1. Perkenalan

Kami ingin mengabdikan pelajaran hari ini untuk enkapsulasi . Anda sudah tahu apa itu secara umum.

Enkapsulasi

Apa manfaat enkapsulasi? Ada beberapa di antaranya, tetapi saya dapat memilih empat yang menurut saya adalah yang utama:


2. Kondisi internal yang valid

Dalam program, situasi sering muncul ketika sebuah objek berinteraksi dengan beberapa kelas lain. Interaksi dengan objek ini dapat merusak data di dalam objek, sehingga objek tidak dapat terus bekerja seperti yang diharapkan.

Akibatnya, objek perlu melacak setiap perubahan pada data internalnya, atau lebih baik lagi, membuat perubahan itu sendiri.

Jika kita tidak ingin beberapa variabel diubah oleh kelas lain, maka kita mendeklarasikannya sebagai private. Setelah kami melakukannya, hanya metode dari kelasnya sendiri yang dapat mengaksesnya. Jika kita ingin variabel menjadi hanya-baca, maka kita perlu menambahkan a public getteruntuk variabel yang relevan.

Misalnya, kita ingin setiap orang dapat mengetahui jumlah elemen dalam koleksi kita, tetapi kita tidak ingin mereka dapat mengubah koleksi tanpa seizin kita. Kemudian kita mendeklarasikan private int countvariabel dan public getCount()metode.

Penggunaan enkapsulasi yang tepat memastikan bahwa tidak ada kelas yang dapat langsung mengakses data internal kelas kami, yang karenanya mencegah perubahan apa pun di luar kendali kami. Perubahan ini hanya dimungkinkan melalui pemanggilan metode dari kelas yang sama dengan variabel yang diubah.

Sebaiknya asumsikan bahwa pemrogram lain akan selalu menggunakan kelas Anda dengan cara yang paling nyaman bagi mereka, bukan cara yang paling aman bagi Anda (untuk kelas Anda). Perilaku ini adalah sumber dari kedua bug sekaligus upaya untuk mencegahnya.


3. Memvalidasi argumen metode

Terkadang kita perlu memvalidasi argumen yang diteruskan ke metode kita. Misalnya, kami memiliki kelas yang mewakili seseorang dan memungkinkan Anda menetapkan tanggal lahir. Kita harus memeriksa semua input data untuk memastikan masuk akal dengan logika program dan logika kelas kita. Misalnya melarang tanggal lahir di bulan ke-13 atau tanggal 30 Februari, dan seterusnya.

Mengapa seseorang menunjukkan 30 Februari sebagai tanggal lahir mereka? Pertama, ini bisa jadi kesalahan pengguna saat memasukkan data. Kedua, sebuah program mungkin memiliki banyak kesalahan di dalamnya sebelum mulai berjalan seperti jarum jam. Misalnya, situasi berikut mungkin terjadi.

Seorang programmer menulis sebuah program yang mengidentifikasi orang-orang yang ulang tahunnya lusa. Misalnya, katakanlah hari ini tanggal 3 Maret. Program menambahkan angka 2 ke hari saat ini di bulan itu dan mencari semua orang yang lahir pada tanggal 5 Maret. Sepertinya semuanya sudah benar.

Tetapi ketika 30 Maret tiba, program tidak akan menemukan siapa pun, karena kalender tidak memiliki 32 Maret. Sebuah program memiliki kesalahan yang jauh lebih sedikit jika kita memeriksa data yang diteruskan ke metode.

Ingat ketika kita mempelajari ArrayListdan menganalisis kodenya? Kami melihat bahwa metode getdan setmemeriksa apakah indexlebih besar dari atau sama dengan nol dan kurang dari panjang array. Terlebih lagi, metode ini mengeluarkan pengecualian jika indeks berada di luar batas array. Ini adalah contoh klasik validasi input.


4. Meminimalkan kesalahan saat mengubah kode

Misalkan kita menulis kelas yang sangat berguna saat kita terlibat dalam proyek besar. Semua orang sangat menyukainya sehingga pemrogram lain mulai menggunakannya di ratusan tempat dalam kode mereka.

Kelas itu sangat berguna sehingga Anda memutuskan untuk memberikannya beberapa perbaikan. Tetapi jika Anda menghapus metode apa pun dari kelas, maka kode puluhan orang akan berhenti dikompilasi. Mereka harus menulis ulang semuanya. Dan semakin banyak perubahan yang Anda buat, semakin banyak kesalahan yang akan Anda buat. Anda akan merusak banyak majelis dan Anda akan dibenci.

Tetapi ketika kita mengubah metode yang dideklarasikan sebagai private, kita tahu bahwa tidak ada satu kelas pun di manapun yang dapat memanggil metode ini. Kami dapat menulis ulang, mengubah jumlah parameter dan tipenya, dan kode eksternal apa pun yang bergantung akan terus berfungsi. Yah, setidaknya itu akan dikompilasi.


5. Kami memutuskan bagaimana objek kami berinteraksi dengan objek eksternal

Kami dapat membatasi beberapa tindakan yang dapat dilakukan dengan objek kami. Sebagai contoh, misalkan kita ingin sebuah objek dibuat instance-nya hanya sekali. Bahkan jika itu dapat dibuat di beberapa tempat dalam proyek tersebut. Dan kita bisa melakukan ini berkat enkapsulasi.

Enkapsulasi 2

Enkapsulasi memungkinkan kita menambahkan batasan tambahan , yang dapat diubah menjadi keuntungan tambahan . Misalnya, Stringkelas diimplementasikan sebagai objek yang tidak dapat diubah . Objek kelas Stringtidak dapat diubah sejak saat penciptaannya hingga saat kematiannya. Semua metode kelas String( remove, substring, ...), mengembalikan string baru tanpa membuat perubahan apa pun pada objek yang dipanggil.

Enkapsulasi adalah hal yang sangat menarik.