Các biến thành viên là việc thực hiện của lớp, không phải giao diện. Bạn có thể muốn thay đổi việc triển khai, vì vậy các lớp khác không được phép tham khảo trực tiếp việc triển khai đó.
Hãy xem xét một lớp với các phương thức sau - cú pháp C ++, nhưng điều đó không quan trọng ...
class example
{
public:
virtual void Set_Mode (int p_mode);
virtual int Mode () const;
};
Có vẻ như khá rõ ràng rằng sẽ có một biến thành viên được gọi mode
hoặc m_mode
tương tự lưu trữ trực tiếp giá trị chế độ đó, thực hiện khá nhiều thứ mà "tài sản" sẽ làm trong một số ngôn ngữ - nhưng điều đó không hẳn đúng. Có rất nhiều cách khác nhau để điều này có thể được xử lý. Ví dụ: phương thức Set_Mode có thể ...
- Xác định chế độ bằng cách sử dụng câu lệnh chuyển đổi.
- Khởi tạo một lớp con của một số lớp bên trong, tùy thuộc vào giá trị chế độ đó.
- Lưu trữ một con trỏ đến thể hiện đó như một biến thành viên.
Khi đã thực hiện điều đó, nhiều phương thức khác của lớp mẫu có thể gọi các phương thức thích hợp của lớp bên trong đó thông qua con trỏ, nhận hành vi cụ thể theo chế độ mà không cần kiểm tra chế độ hiện tại là gì.
Vấn đề ở đây là ít có một cách khả thi để thực hiện loại điều này, và nhiều hơn nữa vào một lúc nào đó bạn có thể thay đổi suy nghĩ của mình. Có thể bạn đã bắt đầu với một biến đơn giản, nhưng tất cả các câu lệnh chuyển đổi để xác định chế độ trong mọi phương thức đều bị đau. Hoặc có thể bạn đã bắt đầu với điều con trỏ dụ, nhưng điều đó hóa ra quá nặng nề cho tình huống của bạn.
Nó chỉ ra rằng những điều như thế này có thể xảy ra cho bất kỳ dữ liệu thành viên. Bạn có thể cần phải thay đổi đơn vị mà một giá trị được lưu trữ trong từ dặm sang km, hoặc bạn có thể thấy rằng bạn enumerate độc đáo-xác định-the-trường hợp không còn duy nhất có thể xác định tất cả các trường hợp mà không xem xét một số thông tin thêm, hoặc bất cứ điều gì.
Điều này cũng có thể xảy ra đối với các phương thức - một số phương pháp hoàn toàn dành cho sử dụng nội bộ, phụ thuộc vào việc triển khai và nên ở chế độ riêng tư. Nhưng nhiều phương thức là một phần của giao diện và sẽ không cần phải đổi tên hoặc bất cứ điều gì chỉ vì việc triển khai nội bộ của lớp đã được thay thế.
Dù sao, nếu việc triển khai của bạn bị lộ, chắc chắn các mã khác sẽ bắt đầu phụ thuộc vào nó và bạn sẽ bị khóa để giữ việc thực hiện đó. Nếu việc triển khai của bạn bị ẩn khỏi mã khác, tình huống đó không thể xảy ra.
Chặn truy cập vào chi tiết thực hiện được gọi là "ẩn dữ liệu".