Hi! Ayo kita ngaturake pelajaran dina iki kanggo enkapsulasi lan langsung diwiwiti kanthi conto :) Prinsip enkapsulasi - 1Kene sampeyan duwe mesin soda biasa . Aku duwe pitakonan kanggo sampeyan: kepiye cara kerjane? Coba menehi jawaban sing rinci: saka ngendi asale cangkir, kepiye suhu internal dijaga, ing ngendi es disimpen, kepiye mesin ngerti sirup sing bakal ditambahake, lsp. Sampeyan mbokmenawa ora duwe jawaban kanggo pitakonan iki. Cukup adil, amarga ora kabeh wong nggunakake mesin kasebut. Padha ora dadi populer saiki. Ayo coba menehi conto liyane. Soko sing mesthi sampeyan gunakake kaping pirang-pirang saben dina. Oh, iki ide! Prinsip enkapsulasi - 2Marang kita carane mesin telusur Googlenyambut gawe. Kepiye carane nggoleki informasi sing ana gandhengane karo tembung sing sampeyan lebokake? Apa asil tartamtu peringkat dhuwur lan ora liyane? Sanajan sampeyan nggunakake Google saben dina, kemungkinan sampeyan ora ngerti. Nanging ora masalah. Sampeyan ora perlu ngerti iki. Sampeyan bisa ngetik pitakon menyang mesin telusuran tanpa mikir babagan cara kerjane. Sampeyan bisa tuku soda saka mesin tanpa ngerti cara kerjane. Sampeyan bisa nyopir mobil tanpa ngerti cara kerja mesin pembakaran internal, lan ora ngerti fisika, sanajan ing tingkat SD. Kabeh iki bisa ditindakake amarga salah sawijining prinsip utama pemrograman berorientasi obyek: enkapsulasi. Maca macem-macem artikel babagan pemrograman berorientasi obyek (OOP), sampeyan mesthi wis nemokake kasunyatan manawa pemrograman kalebu rong konsep umum: enkapsulasi lan ndhelikake . Lan penulis nggunakake tembung "enkapsulasi" kanggo tegese siji bab lan banjur liyane. Kita bakal njelajah istilah kasebut supaya sampeyan entuk pangerten lengkap. Ing pemrograman, makna asli enkapsulasi yaiku nglumpukake data, bebarengan karo metode sing ngoperasikake data kasebut, dadi siji unit (yaiku "kapsul"). Ing basa Jawa, kelas minangka satuan enkapsulasi. Kelas ngemot data (bidang) lan cara kanggo nggarap data iki.Prinsip enkapsulasi - 3Iki bisa uga katon kaya pendekatan sing bener kanggo sampeyan, nanging ing paradigma pemrograman liyane, kabeh diatur kanthi beda. Contone, ing pemrograman fungsional, data dipisahake saka operasi kasebut. Ing OOP, program kalebu kapsul, utawa kelas, sing kalebu data lan fungsi kanggo nggarap data kasebut. Saiki ayo ngomong babagan ndhelikake . Kepiye carane nggunakake macem-macem piranti sing rumit tanpa ngerti carane diatur utawa cara kerjane? Iku prasaja: pangripta menehi kita antarmuka sing prasaja lan trep. Ing mesin soda, antarmuka minangka tombol ing panel. Pencet siji tombol, sampeyan milih ukuran cangkir. Pencet liyane, sampeyan milih rasa. Katelu tanggung jawab kanggo nambah es. Lan iku kabeh sing perlu kanggo nindakake. Organisasi internal mesin ora masalah. Sing penting yaiku dirancang kanthi cara sing mbutuhake pangguna menet telung tombol kanggo njaluk soda . Semono uga babagan mobil. Ora ketompo apa sing ana ing njero. Sing penting nalika sampeyan menet pedal tengen, mobil maju, lan nalika sampeyan menet pedal kiwa, iku alon.. Sing ndhelikake jumlahe. Kabeh "jero" program didhelikake saka pangguna. Kanggo pangguna, iki superfluous, informasi sing ora perlu. Pangguna mbutuhake asil pungkasan, dudu proses internal. Ayo katon ing Autokelas minangka conto:

public class Auto {

   public void go() {

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

   public void brake() {

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

   public static void main(String[] args) {

       Auto auto = new Auto();

       // From the user's perspective,

       // one pedal is pressed and the car accelerates.
       auto.gas();
      
       // The other is pressed, and the car slows down.
       auto.brake();
   }
}
Mangkene tampilan ndhelikake implementasine ing program Jawa. Kaya ing urip nyata: pangguna diwenehake antarmuka (metode). Yen pangguna mbutuhake mobil ing program kanggo nindakake tumindak, dheweke mung nelpon cara sing dikarepake. Apa sing kedadeyan ing metode kasebut ora perlu. Sing penting kabeh bisa mlaku kaya sing dikarepake. Ing kene kita ngomong babagan ndhelikake implementasine . Kajaba iku, Jawa uga nduweni ndhelikake data . Kita nulis babagan kasebut ing pawulangan babagan getter lan setter , nanging nyemak konsep kasebut ora bakal lara. Contone, kita duwe Catkelas:

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!");
   }

  
}
Mbokmenawa sampeyan ngelingi masalah karo kelas iki saka pawulangan pungkasan? Yen ora, ayo elinga saiki. Masalahe yaiku data (bidang) mbukak kanggo kabeh wong - programer liyane bisa nggawe kucing tanpa jeneng kanthi bobot 0 lan umur -1000 taun:

public static void main(String[] args) {

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

}
Mungkin sampeyan bisa ngati-ati manawa salah sijine rekan kerja sampeyan wis nggawe obyek kanthi status sing ora bener, nanging luwih becik ngilangi kemungkinan nggawe "obyek ora sah" kasebut. Prinsip enkapsulasi - 4Mekanisme ing ngisor iki mbantu kita entuk ndhelikake data:
  1. akses modifiers ( pribadi , dilindhungi , paket standar )
  2. getters lan setter
Contone, kita bisa sijine mriksa ana kanggo ndeleng yen wong nyoba kanggo nemtokake nomer negatif kanggo umur kucing. Kaya sing wis dingerteni sadurunge, panulis macem-macem artikel babagan enkapsulasi kadhangkala tegese nggabungake data lan metode, utawa ndhelikake, utawa loro-lorone (nggabungake lan ndhelikake). Jawa duwe loro mekanisme (iki ora kudu bener kanggo basa OOP liyane), supaya makna pungkasan paling bener. Encapsulation menehi sawetara kaluwihan penting:
  1. Ngontrol kahanan sing bener saka obyek. Ana conto ing ndhuwur. Setter lan modifier pribadi mesthekake yen program kita ora duwe kucing sing bobote 0.

  2. Pangguna-loropaken liwat antarmuka. Mung cara sing ditinggalake "kasedhiya" menyang jagad njaba. Cara nelpon wis cukup kanggo entuk asil — pancen ora perlu ngerteni rincian babagan cara kerjane.

  3. Owah-owahan kode ora mengaruhi pangguna. Kita nggawe kabeh owah-owahan ing metode kasebut. Iki ora mengaruhi pangguna cara: yen kode tengen sadurunge "auto.gas ()" kanggo aplikasi pedal gas, banjur bakal terus. Kasunyatan bilih kita wis diganti soko nang gas () cara tetep siro kanggo pangguna: kaya sadurunge, panelpon mung nampa asil sing dipengini.