CodeGym /Blog Java /rawak /Enkapsulasi di Jawa
John Squirrels
Tahap
San Francisco

Enkapsulasi di Jawa

Diterbitkan dalam kumpulan
Hai! Kami akan menumpukan pelajaran hari ini kepada Enkapsulasi di Jawa dan mulakan dengan contoh terus dari pintu masuk:) Di sini anda mempunyai mesin pendispensan soda biasa . Saya ada satu soalan untuk anda: bagaimana ia berfungsi? Cuba berikan jawapan terperinci: Dari manakah soda itu berasal? Bagaimanakah suhu dalaman dikekalkan? Di manakah ais disimpan? Bagaimanakah mesin tahu sirap yang hendak ditambah? Anda mungkin tidak mempunyai jawapan kepada soalan ini. Okay, mungkin bukan semua orang menggunakan mesin ini. Mereka tidak begitu popular pada masa ini. Mari cuba contoh lain. Sesuatu yang pasti anda gunakan berkali-kali setiap hari. Oh, saya ada idea! Prinsip pengkapsulan - 2Beritahu saya bagaimana enjin carian Googleberfungsi. Bagaimana sebenarnya ia mencari maklumat mengenai perkataan yang anda masukkan? Mengapakah keputusan ini berada di bahagian atas dan bukan yang lain? Walaupun anda menggunakan Google setiap hari, anda mungkin tidak tahu. Tetapi itu tidak penting. Lagipun, ia bukan sesuatu yang anda perlu tahu. Anda boleh menggunakan enjin carian tanpa memikirkan cara ia berfungsi. Anda boleh membeli soda daripada mesin tanpa mengetahui bagaimana ia dibina. Anda boleh memandu kereta tanpa mendalami cara enjin pembakaran dalaman berfungsi dan tanpa mengetahui fizik sekolah menengah. Ini semua mungkin terima kasih kepada salah satu prinsip utama pengaturcaraan berorientasikan objek: enkapsulasi. Semasa membaca artikel yang berbeza mengenai topik tersebut, anda mesti menemui dua konsep pengaturcaraan yang meluas: pengkapsulan dan penyembunyian maklumat. Seperti yang berlaku, orang yang berbeza memahami perkataan ' enkapsulasi' bermaksud perkara yang berbeza. Kami akan menguraikan kedua-dua istilah supaya anda mempunyai pemahaman yang lengkap. Dalam pengaturcaraan, maksud asal bagienkapsulasi telah menggabungkan data dan kaedah untuk bekerja dengan data tersebut dalam satu pakej ("kapsul"). Di Java, pakej enkapsulasi ialah class . Kelas mengandungi kedua-dua data (medan) dan kaedah untuk bekerja dengan data tersebut. Prinsip pengkapsulan - 3Ini mungkin kelihatan jelas kepada anda, tetapi semuanya disusun secara berbeza dalam paradigma pengaturcaraan lain. Sebagai contoh, dalam pengaturcaraan berfungsi, data dipisahkan dengan ketat daripada operasi data. Dalam pengaturcaraan berorientasikan objek (OOP), program terdiri daripada kapsul (kelas) yang terdiri daripada kedua-dua data dan fungsi untuk bekerja dengan data.

Sekarang mari kita bercakap tentang penyembunyian maklumat

Bagaimanakah kita menggunakan semua jenis mekanisme kompleks tanpa memahami cara ia dibina atau cara ia berfungsi? Ia mudah: pencipta mereka menyediakan antara muka yang ringkas dan mudah. Pada mesin soda, antara muka ialah butang pada panel hadapan. Satu butang membolehkan anda memilih saiz cawan. Anda memilih sirap dengan butang kedua. Satu pertiga bertanggungjawab untuk menambah ais. Dan itu sahaja yang perlu anda lakukan. Tidak kira rupa mesin di dalamnya. Perkara penting ialah ia direka supaya pengguna mendapat soda dengan menekan tiga butang. Perkara yang sama berlaku untuk kereta. Tidak kira apa yang berlaku di dalam. Yang penting ialah apabila anda menekan pedal kanan kereta bergerak ke hadapan, dan apabila anda menekan pedal kiri kereta itu perlahan. Inilah intipati penyembunyian maklumat. Semua program' s 'dalaman' disembunyikan daripada pengguna. Maklumat sedemikian adalah berlebihan atau tidak diperlukan untuk pengguna. Pengguna memerlukan hasil akhir, bukan proses dalaman. Sebagai contoh, mari kita lihat padaKelas kenderaan :

public class Vehicle {

   public void gas() {

       /* Some complicated things happen inside a car.
       As a result, it moves forward */
   }

   public void brake() {

       /* Some complicated things happen inside a car.
       As a result, it slows down */
   }

   public static void main(String[] args) {

       Vehicle vehicle = new Vehicle();

       // How everything looks to the user

       // Press one pedal, the car moves
       vehicle.gas();

       // Press the other pedal, the car brakes
       vehicle.brake();
   }
}
Ini adalah bagaimana pelaksanaan disembunyikan dalam program Java. Sama seperti dalam kehidupan sebenar: pengguna disediakan dengan antara muka (kaedah). Dalam program, jika anda memerlukan kereta untuk melakukan tindakan, anda hanya memanggil kaedah yang dikehendaki. Apa yang berlaku di dalam kaedah ini adalah berlebihan. Yang penting semuanya berfungsi sebagaimana mestinya. Di sini kita telah bercakap tentang penyembunyian pelaksanaan. Java juga mempunyai penyembunyian data. Kami menulis tentangnya dalam pelajaran tentang getter dan setter, tetapi peringatan tidak akan menyakitkan. Sebagai contoh, kami mempunyai kelas Cat :

public class Cat {

   public String name;
   public int age;
   public int weight;

   public Cat(String name, int age, int weight) {
       this.name = name;
       this.age = age;
       this.weight = weight;
   }

   public Cat() {
   }

   public void sayMeow() {
       System.out.println("Meow!");
   }


}
Mungkin anda masih ingat dari pelajaran lepas apa masalahnya dengan kelas ini? Jika tidak, mari kita ingat. Masalahnya ialah data (medan)nya terbuka kepada semua orang. Pengaturcara lain dengan mudah boleh mencipta kucing tanpa nama dengan berat 0 dan umur -1000 tahun:

public static void main(String[] args) {

   Cat cat = new Cat();
   cat.name = "";
   cat.age = -1000;
   cat.weight = 0;

}
Dalam situasi ini, anda boleh menjejaki dengan teliti sama ada salah seorang rakan sekerja anda mencipta objek dengan keadaan tidak sah, tetapi adalah lebih baik untuk menghapuskan walaupun kemungkinan mencipta objek tidak sah ini. Prinsip pengkapsulan - 4Kami mencapai penyembunyian data dengan bantuan:
  1. akses pengubah suai ( peribadi, dilindungi, pakej lalai );
  2. getter dan setter.
Kami menggunakannya untuk memeriksa sama ada seseorang cuba memberi kucing umur negatif. Seperti yang kami katakan sebelum ini, pengarang pelbagai artikel mengenai enkapsulasi sebenarnya merujuk kepada enkapsulasi (menggabungkan data dan kaedah) atau menyembunyikan maklumat, atau kedua-duanya. Java mempunyai kedua-dua mekanisme (ini tidak semestinya berlaku dalam bahasa OOP lain), jadi pilihan terakhir adalah paling betul.

Enkapsulasi memberi kita beberapa kelebihan penting:

  1. Memantau keadaan objek yang betul. Kami memberikan contoh perkara ini di atas: terima kasih kepada setter dan pengubah suai peribadi , kami telah menjamin program kami terhadap kucing dengan berat 0.

  2. Antara muka mesra pengguna. Kami hanya membiarkan kaedah terdedah kepada pengguna. Pengguna hanya perlu memanggil mereka untuk mendapatkan hasil. Dan tidak ada keperluan untuk menyelidiki perincian cara ia berfungsi.

  3. Perubahan kod tidak menjejaskan pengguna. Kami membuat semua perubahan dalam kaedah. Ini tidak menjejaskan pengguna: mereka menulis vehicle.gas() untuk menggunakan gas, dan itulah yang mereka akan terus lakukan. Hakikat bahawa kami mengubah sesuatu di dalam kaedah gas() kekal tidak kelihatan: seperti sebelum ini, mereka hanya mendapat hasil yang diperlukan.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION