Variabel anggota adalah implementasi kelas, bukan antarmuka. Anda mungkin ingin mengubah implementasi, jadi kelas lain tidak boleh diizinkan untuk merujuk ke implementasi itu secara langsung.
Pertimbangkan kelas dengan metode berikut - Sintaks C ++, tapi itu tidak penting ...
class example
{
public:
virtual void Set_Mode (int p_mode);
virtual int Mode () const;
};
Tampaknya cukup jelas bahwa akan ada variabel anggota yang dipanggil mode
atau m_mode
serupa yang secara langsung menyimpan nilai mode itu, melakukan cukup banyak apa yang "properti" akan lakukan dalam beberapa bahasa - tetapi itu tidak selalu benar. Ada banyak cara berbeda yang bisa ditangani. Misalnya, metode Set_Mode mungkin ...
- Identifikasi mode menggunakan pernyataan sakelar.
- Instantiate subclass dari beberapa kelas internal, tergantung pada nilai mode itu.
- Menyimpan pointer ke instance itu sebagai variabel anggota.
Setelah melakukan itu, banyak metode lain dari kelas contoh kemudian dapat memanggil metode yang sesuai dari kelas internal melalui pointer, mendapatkan perilaku mode khusus tanpa perlu memeriksa apa mode saat ini.
Intinya di sini kurang bahwa ada lebih dari satu cara yang mungkin untuk menerapkan hal semacam ini, dan lebih banyak lagi bahwa pada suatu waktu Anda mungkin berubah pikiran. Mungkin Anda mulai dengan variabel sederhana, tetapi semua pernyataan peralihan untuk mengidentifikasi mode dalam setiap metode semakin menyebalkan. Atau mungkin Anda memulai dengan hal instance-pointer, tetapi itu ternyata terlalu berat untuk situasi Anda.
Ternyata hal-hal seperti ini dapat terjadi untuk data anggota apa pun. Anda mungkin perlu mengubah unit tempat nilai disimpan dari mil ke kilometer, atau Anda mungkin menemukan bahwa pencacahan nomor identifikasi-unik Anda tidak lagi dapat secara unik mengidentifikasi semua kasing tanpa mempertimbangkan beberapa informasi tambahan, atau apa pun.
Ini juga dapat terjadi untuk metode - beberapa metode murni untuk penggunaan internal, tergantung pada implementasinya, dan harus bersifat pribadi. Tetapi banyak metode adalah bagian dari antarmuka, dan tidak perlu diganti namanya atau apa pun hanya karena implementasi internal kelas telah diganti.
Bagaimanapun, jika implementasi Anda diekspos, kode lain pasti akan mulai bergantung padanya, dan Anda akan dikunci untuk menjaga implementasi itu. Jika implementasi Anda disembunyikan dari kode lain, situasi itu tidak dapat terjadi.
Memblokir akses ke detail implementasi disebut "data hiding".