Hampir semua ini menunjukkan kesalahpahaman mendasar tentang enkapsulasi, dan bagaimana itu berlaku.
Respons awal yang Anda hancurkan adalah enkapsulasi. Aplikasi Anda mungkin memiliki kebutuhan untuk hanya mengatur nilai keju di lemari es daripada kenaikan / penurunan atau menambah / menghapus. Selain itu, ini bukan semantik, tidak peduli bagaimana Anda menyebutnya, jika Anda memiliki kebutuhan untuk mengakses dan / atau mengubah atribut Anda tidak merusak enkapsulasi dengan menyediakannya. Akhirnya, enkapsulasi tidak benar-benar tentang "bersembunyi", ini tentang mengendalikan akses ke negara dan nilai-nilai yang tidak perlu dipublikasikan atau dimanipulasi di luar kelas, sementara memberikannya kepada orang-orang yang seharusnya dan melakukan tugas yang disediakan secara internal.
Seorang pengambil atau penyetel tidak memecah enkapsulasi ketika ada kebutuhan sah untuk mendapatkan atau menetapkan nilai. Inilah sebabnya mengapa metode dapat dipublikasikan.
Enkapsulasi adalah tentang menyimpan data dan metode yang memodifikasi data secara langsung bersama di satu tempat logis, kelas.
Dalam kasus khusus ini, jelas ada kebutuhan untuk mengubah nilai keju dalam aplikasi. Terlepas dari bagaimana hal ini dilakukan, melalui get / set atau tambah / hapus, selama metode dienkapsulasi di kelas Anda mengikuti gaya berorientasi objek.
Untuk klarifikasi, saya akan memberikan contoh bagaimana enkapsulasi dipecah dengan menyediakan akses terlepas dari nama metode atau eksekusi logis.
Katakanlah lemari es Anda memiliki "masa hidup", hanya beberapa kutu sebelum lemari es tidak lagi beroperasi (demi argumen, kulkas tidak dapat diperbaiki). Secara logis tidak ada cara pengguna (atau sisa aplikasi Anda) harus dapat mengubah nilai ini. Itu harus pribadi. Itu hanya akan terlihat melalui mengatakan atribut publik yang berbeda yang dikenal sebagai "isWorking". Ketika masa hidup berakhir, secara internal set kulkas bekerja dengan palsu.
Pelaksanaan menghitung mundur seumur hidup dan membalik saklar isWorking semua internal ke lemari es, tidak ada yang di luar bisa / harus dapat mempengaruhi proses. isWorking seharusnya hanya terlihat, sehingga pengambil tidak merusak enkapsulasi. Namun menambahkan pengakses untuk elemen proses seumur hidup akan merusak enkapsulasi Anda.
Seperti kebanyakan hal, definisi enkapsulasi tidak literal, itu relatif. Apakah Anda dapat melihat X di luar kelas? Apakah Anda dapat mengubah Y? Apakah semua yang berlaku untuk objek Anda di sini di kelas ini atau apakah fungsinya tersebar di beberapa kelas?
putCheese
akan menambahkan keju ke lemari es, dantakeCheese
akan menghapusnya - ini adalah abstraksi berorientasi domain (tingkat lebih tinggi), bukan pengambil & setter bidang objek (yang merupakan abstraksi pemrograman komputer level rendah).