JavaRush /Blog Java /Random-MS /Prinsip Enkapsulasi di Jawa

Prinsip Enkapsulasi di Jawa

Diterbitkan dalam kumpulan
hello! Kuliah hari ini akan ditumpukan kepada enkapsulasi dan kami akan memulakannya dengan segera dengan contoh :) Di hadapan anda adalah mesin soda yang biasa. Saya ada satu soalan untuk anda: bagaimana ia berfungsi? Cuba jawab secara terperinci: dari mana asal kaca, bagaimana suhu di dalamnya dikekalkan, di mana ais disimpan, bagaimana mesin memahami apa yang perlu ditambah dengan sirap, dsb. Kemungkinan besar, anda tidak mempunyai jawapan kepada soalan-soalan ini. Mungkin tidak semua orang menggunakan mesin sedemikian; mereka tidak begitu popular pada masa kini. Cuba kita berikan contoh lain. Sesuatu yang anda tahu anda gunakan berkali-kali setiap hari. Oh, saya ada idea! Prinsip Enkapsulasi - 2 Beritahu kami cara enjin carian Google berfungsi . Bagaimana sebenarnya ia mencari maklumat berdasarkan perkataan yang anda masukkan? Mengapakah keputusan ini berada di bahagian atas dan bukan yang lain? Walaupun anda menggunakan Google setiap hari, anda mungkin tidak mengetahuinya. Tetapi ia tidak penting. Lagipun, anda tidak perlu tahu ini. Anda boleh memasukkan pertanyaan ke dalam enjin carian tanpa memikirkan cara ia berfungsi. Anda boleh membeli soda daripada mesin layan diri tanpa mengetahui cara ia berfungsi. Anda boleh memandu kereta tanpa mendalami operasi enjin pembakaran dalaman, dan tanpa mengetahui fizik sama sekali, walaupun di peringkat sekolah. Semua ini boleh dilakukan terima kasih kepada salah satu prinsip utama pengaturcaraan berorientasikan objek - enkapsulasi . Semasa membaca pelbagai artikel mengenai topik ini, anda mungkin terjumpa fakta bahawa terdapat dua konsep biasa dalam pengaturcaraan - enkapsulasi dan penyembunyian . Dan dengan perkataan "enkapsulasi" pengarang bermaksud satu perkara atau yang lain (seperti yang berlaku). Kami akan memecahkan kedua-dua istilah supaya anda mempunyai pemahaman yang lengkap. Maksud asal perkataan " enkapsulasi " dalam pengaturcaraan ialah gabungan data dan kaedah bekerja dengan data ini dalam satu pakej ("kapsul"). Di Jawa, kelas bertindak sebagai pakej kapsul . Kelas mengandungi kedua-dua data (medan kelas) dan kaedah untuk bekerja dengan data ini. Prinsip Enkapsulasi - 3 Ini kelihatan jelas kepada anda, tetapi dalam konsep pengaturcaraan lain semuanya berfungsi secara berbeza. Sebagai contoh, dalam pengaturcaraan berfungsi, data dipisahkan dengan ketat daripada operasi di atasnya. Dalam OOP (pengaturcaraan berorientasikan objek), program terdiri daripada kelas kapsul, yang merupakan kedua-dua data dan fungsi untuk bekerja dengannya. Sekarang mari kita bercakap tentang bersembunyi . Bagaimanakah kita menggunakan semua jenis mekanisme yang kompleks tanpa memahami cara ia berfungsi dan berdasarkan apa kerja mereka? Ia mudah: pencipta mereka telah menyediakan antara muka yang mudah dan mesra pengguna. Pada mesin soda, antara muka ialah butang pada panel. Dengan menekan satu butang, anda memilih kelantangan kaca. Dengan menekan yang kedua, anda memilih sirap. Yang ketiga bertanggungjawab untuk menambah ais. Dan itu sahaja yang anda perlu lakukan. Tidak kira betapa tepatnya mesin itu direka di dalam. Perkara utama ialah ia direka sedemikian rupa sehingga untuk mendapatkan soda, pengguna perlu menekan tiga butang . Begitu juga dengan kereta. Tidak kira apa yang berlaku dalam dirinya. Perkara utama ialah apabila anda menekan pedal kanan, kereta bergerak ke hadapan, dan apabila anda menekan pedal kiri, ia menjadi perlahan . Inilah sebenarnya intipati penyembunyian. Semua "bahagian dalam" program disembunyikan daripada pengguna. Baginya, maklumat ini adalah berlebihan dan tidak perlu. Pengguna memerlukan hasil akhir, bukan proses dalaman. Mari kita lihat kelas sebagai contoh Auto:
public class Auto {

   public void gas() {

       /*some complicated things are happening inside the car
       as a result of which it goes forward*/
   }

   public void brake() {

       /*some complicated things are happening inside the car
       as a result of which it slows down*/
   }

   public static void main(String[] args) {

       Auto auto = new Auto();

       // How everything looks to the user

       //pressed one pedal - went
       auto.gas();

       //pressed another pedal - braked
       auto.brake();
   }
}
Inilah yang kelihatan seperti penyembunyian pelaksanaan dalam program Java. Segala-galanya seperti dalam kehidupan sebenar: pengguna disediakan dengan antara muka (kaedah). Jika dia memerlukan kereta dalam program untuk melakukan tindakan, dia hanya perlu memanggil kaedah yang dikehendaki. Dan apa yang berlaku di dalam kaedah ini adalah maklumat yang tidak perlu, perkara utama ialah semuanya berfungsi sebagaimana mestinya. Di sini kita bercakap tentang menyembunyikan pelaksanaan . Selain itu, Java juga mempunyai penyembunyian data . Kami menulis tentangnya dalam kuliah tentang getter dan setter , tetapi tidak rugi untuk mengingatkan anda. 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 kuliah lepas apakah masalah kelas ini? Jika tidak, mari kita ingat. Masalahnya ialah datanya (medan) terbuka kepada semua orang, dan pengaturcara lain dengan mudah boleh mencipta kucing tanpa nama dalam program 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 keadaan sedemikian, anda boleh memantau dengan teliti sama ada salah seorang rakan sekerja anda mencipta objek dengan keadaan yang salah, tetapi adalah lebih baik untuk mengecualikan kemungkinan mencipta "objek yang salah" sedemikian. Prinsip Enkapsulasi - 4 Mereka membantu kami menyembunyikan data:
  1. pengubah suai akses ( peribadi , dilindungi , pakej lalai );
  2. getter dan setter.
Di sana kita boleh, sebagai contoh, menyemak sama ada seseorang cuba memberikan nombor negatif kepada kucing sebagai umurnya. Seperti yang kami katakan sebelum ini, pengarang pelbagai artikel mengenai enkapsulasi bermaksud sama ada enkapsulasi (menggabungkan data dan kaedah), atau menyembunyikan, atau kedua-duanya. Java mempunyai kedua-dua mekanisme (ini tidak semestinya berlaku dalam bahasa OOP lain), jadi pilihan terakhir adalah yang paling betul. Menggunakan enkapsulasi memberi kita beberapa kelebihan penting:
  1. Memantau keadaan objek yang betul. Terdapat contoh di atas: terima kasih kepada setter dan pengubah suai peribadi, kami melindungi program kami daripada kucing dengan berat 0.

  2. Kemesraan pengguna kerana antara muka. Kami hanya meninggalkan kaedah "di luar" untuk akses pengguna. Apa yang dia perlu lakukan ialah memanggil mereka untuk mendapatkan keputusan, dan dia tidak perlu menyelidiki butiran kerja mereka sama sekali.

  3. Perubahan pada kod tidak menjejaskan pengguna. Kami membuat semua perubahan dalam kaedah. Ini tidak akan menjejaskan pengguna: dia menulis auto.gas() untuk gas kereta, jadi dia akan menulisnya. Dan hakikat bahawa kami mengubah sesuatu dalam pengendalian kaedah gas() akan kekal tidak kelihatan kepadanya: dia, seperti sebelumnya, hanya akan menerima hasil yang diingini.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION