"Hello, Amigo! Saya ingin mendedikasikan kuliah hari ini untuk enkapsulasi . Anda sudah mempunyai idea umum tentang apa itu."

Enkapsulasi - 1

Jadi apakah kelebihan enkapsulasi? Terdapat banyak, tetapi saya akan menunjukkan empat yang, pada pandangan saya, yang paling penting:

1) Keadaan dalaman yang sah.

Program selalunya mempunyai beberapa kelas yang berinteraksi dengan objek yang sama. Dengan berinteraksi secara serentak dengan data dalaman objek, mereka mungkin melanggar integriti data objek, menyebabkan objek berhenti berfungsi dengan betul.

Oleh itu, objek mesti menjejaki sebarang perubahan pada data dalamannya, atau lebih baik lagi - ia sepatutnya yang membuat perubahan tersebut.

Jika kami tidak mahu beberapa pembolehubah kelas ditukar oleh kelas lain, maka kami mengisytiharkannya private , yang bermaksud bahawa hanya kaedah kelas itu boleh mengaksesnya. Jika kami mahu pembolehubah menjadi baca sahaja untuk kelas lain, maka kami menambah pengambil awam pada pembolehubah ini.

Sebagai contoh, kami mungkin mahu semua orang mengetahui berapa banyak elemen yang terdapat dalam koleksi kami, tetapi tiada siapa yang boleh mengubahnya tanpa kebenaran kami. Dalam kes ini, kami mengisytiharkan kiraan int peribadi berubah-ubah dan kaedah public getCount() .

Enkapsulasi yang betul menjamin bahawa kelas lain tidak boleh mengakses data dalaman kelas kami secara langsung dan, akibatnya, tidak boleh mengubahnya tanpa kami dapat mengawal tindakan mereka. Mereka mesti memanggil kaedah pada kelas yang mengandungi pembolehubah yang akan diubah.

Adalah lebih baik untuk menganggap bahawa pengaturcara lain akan sentiasa menggunakan kelas anda dengan cara yang paling mudah untuk mereka, bukan dengan cara yang paling selamat untuk anda (atau kelas anda). Ini adalah sumber pepijat, dan cara untuk mencegahnya.

2) Pemeriksaan parameter.

Kadangkala anda perlu menyemak parameter yang dihantar ke dalam kaedah kelas anda. Sebagai contoh, katakan kita mempunyai kelas yang mewakili "orang" dan anda boleh menentukan tarikh lahirnya. Kita harus mengesahkan bahawa sebarang data yang dihantar sepadan dengan logik program dan logik kelas. Contohnya, tiada bulan ke-13, tiada 30 Februari, dsb.

"Mengapa seseorang menunjukkan tarikh lahir pada 30 Februari?"

"Nah, pertama sekali, ia mungkin hasil daripada ralat kemasukan data."

Kedua, sebelum program berfungsi seperti jam, ia mungkin mempunyai banyak pepijat. Sebagai contoh, sesuatu seperti ini mungkin berlaku.

Seorang pengaturcara menulis kod yang menentukan siapa yang mempunyai hari lahir lusa. Katakan hari ini ialah 3 Mac. Program ini menambah 2 pada tarikh semasa dan mencari semua orang yang lahir pada 5 Mac. Setakat ini, begitu baik.

Tetapi apabila 30 Mac tiba, program itu tidak menemui sesiapa, kerana tiada 32 Mac. Program adalah jauh lebih mudah apabila kaedah melakukan semakan parameter."

"Saya masih ingat semasa kita mempelajari ArrayList saya melihat kodnya, dan terdapat semakan dalam kaedah get dan set untuk memastikan parameter indeks lebih besar daripada atau sama dengan sifar dan kurang daripada panjang tatasusunan. Kod itu akan membuang pengecualian jika tatasusunan tidak mempunyai elemen yang sepadan dengan indeks.

"Ya, itu semakan input klasik. "

3) Kurang pepijat apabila menukar kod di dalam kelas.

Katakan kita menulis kelas yang sangat membantu sebagai sebahagian daripada projek besar. Semua orang sangat menyukainya sehingga pengaturcara lain mula menggunakannya di ratusan tempat dalam kod mereka sendiri.

Kelas ini terbukti sangat berguna sehingga anda memutuskan untuk memperbaikinya. Tetapi jika anda menyingkirkan mana-mana kaedah dalam kelas, kod berpuluh-puluh pengaturcara lain tidak akan disusun lagi. Mereka perlu menulis semula kod mereka dengan cepat. Dan lebih banyak penulisan semula yang berlaku, lebih banyak peluang terdapat untuk pepijat. Jika anda kerap memecahkan binaan, anda akan dibenci.

Tetapi jika kami menukar kaedah yang ditandakan sebagai peribadi, kami tahu bahawa kaedah ini tidak dipanggil oleh kod orang lain di mana-mana sahaja. Kami boleh menulis semula mereka, dan menukar nombor dan jenis parameter, dan kod bergantung masih akan berfungsi. Atau sekurang-kurangnya ia masih akan disusun.

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

Kita boleh menyekat tindakan yang boleh diambil pada objek kita. Sebagai contoh, kami mungkin mahu hanya satu contoh kelas dibuat—walaupun ia dibuat di beberapa tempat serentak dalam projek. Dan kita boleh mencapai ini menggunakan enkapsulasi.

Enkapsulasi - 2

Enkapsulasi membolehkan kami mengenakan sekatan tambahan yang mungkin bertukar menjadi faedah tambahan . Sebagai contoh, kelas String dilaksanakan sebagai objek tidak berubah . Contoh kelas String tidak boleh diubah antara penciptaannya dan pemusnahannya. Semua kaedah kelas String (buang, subrentetan, ...) mengembalikan rentetan baharu dan sama sekali tidak mengubah objek yang dipanggil.

"Lembu suci. Jadi begitulah keadaannya."

"Encapsulation adalah menarik."

"Saya setuju."