Saya membaca "konkurensi Java dalam praktek" dan ada yang mengatakan: "Untungnya, teknik berorientasi objek yang sama yang membantu Anda menulis kelas yang terorganisir dengan baik - seperti enkapsulasi dan penyembunyian data - dapat juga membantu Anda membuat thread-safe kelas. "
Masalah # 1 - Saya tidak pernah mendengar tentang data yang disembunyikan dan tidak tahu apa itu.
Masalah # 2 - Saya selalu berpikir bahwa enkapsulasi menggunakan pribadi vs publik, dan sebenarnya menyembunyikan data.
Bisakah Anda jelaskan data apa yang disembunyikan dan bagaimana data itu berbeda dengan enkapsulasi?
java
design
object-oriented
dhblah
sumber
sumber
Jawaban:
Penyembunyian data dan informasi adalah gagasan yang lebih luas, ditemukan dalam ilmu komputer & rekayasa perangkat lunak. Ini merujuk pada kenyataan bahwa bagian-bagian dari program komputer yang dapat berubah tidak boleh diakses dari modul lain / dari klien.
Enkapsulasi adalah istilah yang ditemukan dalam paradigma Berorientasi Objek dan mengacu pada menyimpan data di bidang pribadi dan memodifikasinya hanya melalui metode.
Dengan demikian enkapsulasi dapat dilihat sebagai cara untuk mencapai penyembunyian data dalam sistem berorientasi objek .
sumber
Enkapsulasi dan penyembunyian data adalah istilah terkait. Penting untuk dipahami bahwa mereka muncul dalam kaitannya dengan Abstraksi . Booch et. Al. dalam Analisis dan Desain Berorientasi Objek dengan Aplikasi menjelaskan,
sumber
Membuat kelas termasuk konsep enkapsulasi. Saat Anda membuat kelas, Anda memasukkan data dan perilaku di dalam kelas dan kelas menjadi satu unit yang kita sebut objek. Jadi penyembunyian data adalah bagian dari enkapsulasi.
sumber
Dari Wikipedia :
sumber
Mereka sering digunakan secara bergantian dalam diskusi, dan sering saya pikir mereka bekerja bersama untuk mencapai tujuan yang sama, dan sementara yang berikut ini mungkin tidak sepenuhnya akurat, mungkin memberikan beberapa perbedaan yang bermakna, jika perbedaan perlu dibuat:
Ketika berbicara tentang enkapsulasi, seringkali ini diimplementasikan sebagai mekanisme prosedural / fungsional. Ada beberapa jenis penjaga untuk keadaan yang mendasarinya, dan akses melalui penjaga memerlukan protokol tertentu yang harus diikuti untuk diberi akses (baca atau ubah status yang diinginkan). Enkapsulasi juga menawarkan kesempatan untuk efek samping terjadi karena akses (seperti perubahan status kaskade, atau pemberitahuan / peningkatan peristiwa / mengeluarkan sinyal ketika hal yang menarik dibaca atau diubah) sehingga tindakan tindak lanjut dapat dimulai. Sekali lagi, saya sering menganggap enkapsulasi sebagai konsep yang merupakan sesuatu yang diimplementasikan sebagai prosedur.
Saya melihat konsep menyembunyikan data serupa dengan tujuan enkapsulasi; Namun, mekanismenya struktural dan beroperasi pada level yang berbeda. Dalam praktiknya, alih-alih menyediakan mekanisme perlindungan dan efek samping melalui prosedur, negara dilindungi dan dipengaruhi melalui mekanisme struktural bahasa dan runtime. Tipe-tipe penjaga ini adalah klausa visibilitas, definisi tipe, pewarisan, dan sejenisnya. Efek samping yang dapat Anda manfaatkan dari objek yang dijaga secara struktural adalah lagi sesuatu yang bergantung pada bahasa dan runtime: mungkin aktivasi objek, jumlah referensi, atau sesuatu di sepanjang garis itu.
sumber
Mereka sering, mungkin biasanya, digunakan secara bergantian. Tetapi perhatikan kutipan Booch di atas yang mengatakan, "Enkapsulasi paling sering dicapai melalui penyembunyian informasi ..." yaitu paling sering, tetapi tidak selalu dalam setiap kasus.
Perhatikan bahwa Python memungkinkan pengguliran data di kelas, tetapi tidak mengizinkan variabel pribadi. Jadi bisa dikatakan bahwa Python menyediakan enkapsulasi tanpa menyembunyikan data.
Anda bisa melakukan hal yang sama di Jawa dengan membuat semua variabel anggota Anda
public
, tetapi selain memberi semua orang serangan jantung, Anda akan kehilangan manfaat dari penyembunyian data ... yaitu menjaga semantik objek dengan membatasi akses ke kondisinya.sumber
Dalam OO, Enkapsulasi adalah tempat informasi disimpan dalam suatu Objek. Sebagai contoh, a
Person
memilikiname
dan klien Orang (yaitu Anda) tahu bahwa Orang memegang nama, baik melalui bidang publik atau metode accessor. Dan, mudah-mudahan, Anda tidak perlu juga memegang nama-nama di beberapa array nama global, dll. Jadi ini adalah langkah besar untuk menghindari kode spageti yang tidak terkelola. Tetapi klien masih perlu mengetahui sesuatu tentang bagaimana Orang menangani nama: misalnya spasi atau dibatasi koma?Menyembunyikan Data adalah tempat yang
Person
memiliki bidang nama, tetapi, setidaknya secara teori, tidak ada yang tahu . Lapangan bersifat pribadi tanpa metode aksesor publik. Klien dapat memberikan nama dari catatan basis data, XML, HTTP POST, apa pun, tetapi cara internal orang menangani nama adalah "kotak hitam". Implementasi Person di masa depan bebas untuk berubah, misalnya, untuk beralih ke memiliki afirstName
dan alastName
.Dalam dunia ideal Menyembunyikan Data lebih unggul daripada Enkapsulasi, tetapi tidak semua dunia ideal. :-)
sumber