JavaRush /Kurslar /All lectures for TK purposes /Inkapsulýasiýanyň prinsipleri

Inkapsulýasiýanyň prinsipleri

All lectures for TK purposes
Dereje , Sapak
Elýeterli
Salam! Bu günki sapagymyzy inkapsulýasiýa bagyşlaýarys we ony derrew mysallar bilen başlaýarys :) Inkapsulýasiýanyň prinsipleri - 1Seniň öňüňde — adaty gazly suw awtomaty. Saňa bir soragym bar: ol nähili işleýär? Galyň ýagdaýda düşündirjek bol: stakan nireden çykýar, içindäki temperatura nädip saklanýar, buz nirede saklanýar, awtomat haýsy şerbeti goşmalydygyny nädip düşünýär we ş.m. Belki, şu soraglaryň jogaplary sende ýokdur. Bolýar, belki hemmeler beýle awtomatlary ulanyp baranok, häzirki döwürde olar beýle meşhur däl. Başga bir mysala geçip göreliň. Günde ençeme gezek ulanyp bilýän bir zady. O, gowy pikir! Inkapsulýasiýanyň prinsipleri - 2 Google gözleg motory nähili işleýär? Ol sende girizen sözler boýunça maglumatlary nähili gözleýär? Nämüçin ýokarda şol netijeler dur we beýlekileri däl? Her gün Google ulansaň hem, belki muny bilmeýärsiň. Emma munuň ähmiýeti ýok. Çünki bu zady bilmäge zerurlyk ýok. Sen motora sorag girizip bilýärsiň, onuň nädip işleýänini oýlanman. Gazly suw satyn alyp bilýärsiň, awtomatyň nähili işleýändigini bilmän. Maşyn sürüp bilýärsiň, içki ýanma hereketlendirijisiniň nähili işleýändigini bilmezden, hatda mekdep derejesinde fizika bilmezden. Bular OOP (obýekt ugrukdyrylan programmirleme) prinsipleriniň biri bolan inkapsulýasiýanyň netijesinde mümkin bolýar. Bu tema barada dürli makalalary okap, programmalaşdyrmada köp ulanylýan iki düşünje — inkapsulýasiýa we gizlemek bar. Biz ikisini hem düşündäris, şonuň üçin seniň doly düşünmegiň bolar. Programmalaşdyrmada « inkapsulýasiýanyň» ilkibaşdaky manysy — maglumatlaryň we şol maglumatlar bilen işleýän usullaryň bir gapda («kapsulada») birleşmegi. Java-da gap-kapsula hökmünde klas çykyş edýär. Klas öz içine maglumatlary (klas meýdanlary) we şol maglumatlar bilen işleýän usullary alýar. Inkapsulýasiýanyň prinsipleri - 3 Bu saňa aňsat görünip biler, emma beýleki programmalaşdyrma konsepsiýalarynda ähli zat başgaça gurnalan. Mysal üçin, funksiýonial programmalaşdyrmada maglumatlar olara degişli operasiýalardan berk aýrylan. OOP-da (obýekt ugrukdyrylan programmalaşdyrmada) programmylar klas-kapsullardan durýar, olar öz-özünden hem maglumatlar, hem işlemek üçin funksiýalar. Indi gizlemek barada gepleşeliň. Näme üçin biz dürli çylşyrymly mehanizmleri olaryň nähili gurnalandygyny we işiniň nämede esaslanandygyny bilmän ulanyp bilýäris? Hemmesi aňsat: olaryň döredijileri aňsat we amatly interfeýs hödürlediler. Gazly suw awtomatynda interfeýs — paneldäki düwmeler. Bir düwmäni basyp, stakanyň göwrümini saýlaýaň. Ikinji düwme bilen şerbeti saýlaýaň. Üçünji düwme buzu goşmak üçin jogap berýär. Indi ähli gerek zat — üç düwmäni basmak. Awtomatyň nähili gurnalandygynyň ähmiýeti ýok. Esasy zat — ol şeýle gurnalan, hatda ulanyjy gazly suw almak üçin üç düwmäni basmaly. Maşyn bilen hem şeýle. Onuň içindäki zatlaryň ähmiýeti ýok. Esasy zat — sağ pedal bilen maşyn öňe gidýär, çep pedal bilen bolsa durýar. Bu ýerde gizlemegiň manysy bar. Programmyň ähli «içindäkiler» ulanyjydan gizlenýär. Ol üçin bu maglumat gereksiz we artykmaç. Ulanyja diňe ahyrky netijä gerek, içki proses zerur däl. Mysal üçin Auto klasy barada göreliň:

public class Auto {

   public void gas() {

       /*maşynyň içinde käbir çylşyrymly zatlar bolup geçýär,
       şonuň netijesinde ol öňe gidýär*/
   }

   public void brake() {

       /*maşynyň içinde käbir çylşyrymly zatlar bolup geçýär,
       şonuň netijesinde ol durýar*/
   }

   public static void main(String[] args) {

       Auto auto = new Auto();

       //Ulanyjy üçin hemme zat şeýle görünýär

       //bir pedaly basdy - gitdi
       auto.gas();
      
       //başga pedaly basdy - durdy
       auto.brake();
   }
}
Java programmasynda gizlemek şeýle görünýär. Hemmesi hakyky durmuşdaky ýaly: ulanyja interfeýs (usullar) hödürlenýär. Ulanyja programmandaky maşyn hereketini amala aşyrmak üçin diňe gerekli usuly çagyrmak ýeterlikdir. Ol usullaryň içindäki näme bolýar — bu artykmaç maglumat, esasy zat hemme zadyň dogry işlemegi. Bu ýerde biz gizlenme realizasiýasy barada gürleşdik. Java-da başga hem maglumat gizlemek bar. Bu barada biz getter-lar we setter-ler barada sapagymyzda ýazdyk, emma gaýtalap bileris. Mysal üçin, bizde Cat klassy bar:

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("Mäw!");
   }

  
}
Belki sen öňki sapakdan bu klassa nähili problema bar diýip ýatdan çykarmadyň? Eger ýok bolsa — ýatla. Problema şundaky, onuň maglumatlary (meýdanlary) hemmeler üçin açyk, we başga programmist programma-da ady ýok, agramy 0 bolan we ýaşy -1000 ýyllap ketirilen pişik döredip biler:

public static void main(String[] args) {

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

}
Bu ýagdaýda mümkin boldugyça, kollektorlaryň ýagdaýyny bozýan obýektleri döretmeýänine gözegçilik etmäge synanyşyň, emma iň gowusy beýle «ýalňyş obýektleri» döretmek mümkinçiligini ýok etmek. Maglumat gizlemek bilen biz kömek berýär:
  1. dolyýüz geçmiş modifikatorlary (private, protected, package default);
  2. getter-lar we setter-ler.
Bärde, mysal üçin, biz goýmak mümkinçiligini girizip bileris, biri pişige ýaş üçin negatiw san berip bilýärmi ýa ýok. Öň aýdanymyz ýaly, inkapsulýasiýa barada dürli makalalaryň awtorlary inkapsulýasiýa (maglumatlaryň we usullaryň birleşmegi) ýa-da gizlemek manysynda ýa-da ikisi bilen şol bir wagtda ulanyp bilerler. Java-da bu iki mehanizm bar (başga OOP dillərində bu hökmany däl), şonuň üçin bu iň dogruçyl saýlaw bolar. Inkapsulýasiýany ulanmak bize birnäçe möhüm üstünligi berýär:
  1. Obýektiň dogry ýagdaýyna gözegçilik etmek. Munuň mysallary ýokarda boldy: settere we private modifikatoryna minnetdar bolanymyz üçin, programma-da agramy 0 bolan pişikleri howpsuzlyga aldyk.

  2. Ulanyjy üçin interfeýs arkaly amatlyk. Biz ulanyjynyň elýeterliligi üçin diňe usullary «daşarda» goýýarys. Olary çagyrmak ýeterlik, dogruçyl netije almak üçin, we olaryň işiniň maglumatlaryna düýpli düşünmäge gerek ýok.

  3. Kod üýtgetmeleriniň ulanyjylar üçin täsiri ýok. Biz ähli üýtgetmeleri usullaryň içinde geçirýäris. Bu ulanyjylara täsir etmeli däl: ol, öňki ýaly, maşyn gaz üçin auto.gas() ýazýar, öňki ýaly ýazmaga dowam edýär. A usul gas() işinde üýtgetmeleriň içindäki zady onuň üçin görünmez, esasy zat hemme zadyň dogry işlemegi.
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION