Trong OO, Encapsulation là nơi thông tin được lưu giữ trong một Đối tượng. Ví dụ: a Person
có một name
và khách hàng của Person (tức là bạn) biết rằng Person giữ một tên, thông qua các trường công khai hoặc các phương thức truy cập. Và, hy vọng, bạn cũng không cần phải giữ tên trong một số tên toàn cầu, v.v ... Vì vậy, đây là một bước lớn để tránh mã spaghetti không thể quản lý được. Nhưng khách hàng vẫn cần biết điều gì đó về cách Person xử lý tên: ví dụ: dấu cách hoặc dấu phẩy được phân cách?
Ẩn dữ liệu là nơi Person
có một trường tên, nhưng, ít nhất là trên lý thuyết, không ai biết . Trường này là riêng tư không có phương thức truy cập công cộng. Khách hàng có thể chuyển tên từ bản ghi cơ sở dữ liệu, XML, HTTP POST, bất cứ điều gì, nhưng hoạt động bên trong về cách Person xử lý tên là một "hộp đen". Việc triển khai Person trong tương lai có thể tự do thay đổi, ví dụ, để chuyển sang có a firstName
và a lastName
.
Trong một thế giới lý tưởng, Ẩn dữ liệu vượt trội hơn so với Đóng gói, nhưng không phải tất cả các thế giới đều lý tưởng. :-)