"Halo, Amigo! Saya ingin mendedikasikan kuliah hari ini untuk enkapsulasi . Anda sudah memiliki gambaran umum tentang apa itu enkapsulasi."

Enkapsulasi - 1

Jadi apa keuntungan dari enkapsulasi? Ada banyak, tapi saya akan tunjukkan empat yang menurut saya paling penting:

1) Kondisi internal yang valid.

Program seringkali memiliki beberapa kelas yang berinteraksi dengan objek yang sama. Dengan berinteraksi secara bersamaan dengan data internal objek, mereka mungkin melanggar integritas data objek, menyebabkan objek berhenti bekerja dengan benar.

Jadi objek harus melacak setiap perubahan pada data internalnya, atau lebih baik lagi – objek harus menjadi orang yang melakukan perubahan tersebut.

Jika kita tidak ingin beberapa variabel kelas diubah oleh kelas lain, maka kita mendeklarasikannya sebagai private , yang berarti hanya metode kelas tersebut yang dapat mengaksesnya. Jika kita ingin variabel menjadi read-only untuk kelas lain, maka kita menambahkan pengambil publik ke variabel ini.

Misalnya, kita mungkin ingin semua orang tahu berapa banyak elemen yang ada di koleksi kita, tetapi tidak seorang pun boleh mengubahnya tanpa izin kita. Dalam hal ini, kita mendeklarasikan variabel private int count dan metode public getCount() .

Enkapsulasi yang tepat menjamin bahwa kelas lain tidak dapat secara langsung mengakses data internal kelas kita dan, akibatnya, tidak dapat mengubahnya tanpa kita dapat mengontrol tindakan mereka. Mereka harus memanggil metode pada kelas yang berisi variabel yang akan diubah.

Sebaiknya asumsikan bahwa pemrogram lain akan selalu menggunakan kelas Anda dengan cara yang paling nyaman bagi mereka, bukan dengan cara yang paling aman bagi Anda (atau kelas Anda). Ini adalah sumber bug, dan cara untuk mencegahnya.

2) Pemeriksaan parameter.

Terkadang Anda perlu memeriksa parameter yang diteruskan ke metode kelas Anda. Misalnya, kita memiliki kelas yang mewakili "orang" dan Anda dapat menentukan tanggal lahirnya. Kita harus memverifikasi bahwa setiap data yang dikirimkan sesuai dengan logika program dan logika kelas. Misalnya, tidak ada bulan ke-13, tidak ada tanggal 30 Februari, dst.

"Mengapa seseorang menunjukkan tanggal lahir 30 Februari?"

"Yah, pertama-tama, itu bisa jadi akibat kesalahan entri data."

Kedua, sebelum sebuah program bekerja seperti jarum jam, mungkin ada banyak bug. Misalnya, hal seperti ini mungkin terjadi.

Seorang programmer menulis kode yang menentukan siapa yang berulang tahun lusa. Katakanlah hari ini adalah 3 Maret. Program menambahkan 2 ke tanggal saat ini dan menemukan semua orang yang lahir pada tanggal 5 Maret. Sejauh ini, bagus.

Tetapi ketika tanggal 30 Maret tiba, program tidak menemukan siapa pun, karena tidak ada tanggal 32 Maret. Program jauh lebih tidak bermasalah ketika metode melakukan pemeriksaan parameter."

"Saya ingat ketika kami mempelajari ArrayList saya melihat kodenya, dan ada pemeriksaan dalam metode get and set untuk memastikan bahwa parameter indeks lebih besar atau sama dengan nol dan kurang dari panjang array. Kode akan melempar pengecualian jika array tidak memiliki elemen yang sesuai dengan indeks.

"Ya, itu pemeriksaan input klasik. "

3) Lebih sedikit bug saat mengubah kode di dalam kelas.

Misalkan kita menulis kelas yang sangat membantu sebagai bagian dari proyek besar. Semua orang sangat menyukainya sehingga pemrogram lain mulai menggunakannya di ratusan tempat dalam kode mereka sendiri.

Kelas terbukti sangat berguna sehingga Anda memutuskan untuk memperbaikinya. Tetapi jika Anda membuang salah satu metode di kelas, kode dari lusinan programmer lain tidak akan dapat dikompilasi lagi. Mereka harus segera menulis ulang kode mereka. Dan semakin banyak penulisan ulang yang terjadi, semakin banyak peluang untuk bug. Jika Anda sering merusak bangunan, Anda akan dibenci.

Namun jika kita mengubah metode yang ditandai sebagai privat, kita tahu bahwa metode ini tidak dipanggil oleh kode orang lain di mana pun. Kami dapat menulis ulang, dan mengubah jumlah dan jenis parameter, dan kode yang bergantung akan tetap berfungsi. Atau setidaknya masih akan dikompilasi.

4) Kami mendefinisikan bagaimana objek lain akan berinteraksi dengan objek kami.

Kami dapat membatasi tindakan apa yang dapat diambil pada objek kami. Sebagai contoh, kita mungkin ingin hanya satu instance dari kelas yang akan dibuat—bahkan jika dibuat di beberapa tempat secara bersamaan dalam proyek. Dan kita dapat mencapai ini menggunakan enkapsulasi.

Enkapsulasi - 2

Enkapsulasi memungkinkan kita memberlakukan batasan tambahan yang mungkin berubah menjadi manfaat tambahan . Misalnya, kelas String diimplementasikan sebagai objek yang tidak dapat diubah . Instance dari kelas String tidak dapat diubah antara pembuatan dan penghancurannya. Semua metode kelas String (hapus, substring, ...) mengembalikan string baru dan sama sekali tidak mengubah objek yang dipanggil.

"Astaga. Jadi begitu."

"Enkapsulasi itu menarik."

"Saya setuju."