JavaRush /Java Blog /Random-TK /Sapaklaryň arasyndaky gatnaşyklar. Miras, kompozisiýa we ...

Sapaklaryň arasyndaky gatnaşyklar. Miras, kompozisiýa we jemleme

Toparda çap edildi
Salam! Bu gün obýekte gönükdirilen programmirlemegiň (OOP) başga bir ýörelgesine - mirasa has içgin serederis. Şol bir wagtyň özünde, synplaryň arasyndaky beýleki gatnaşyklary - kompozisiýa we jemlemäni öwreneris. Bu mowzuk kyn bolmaz: öňki leksiýalarda eýýäm mirasa we onuň mysallaryna duş geldiňiz. Bu gün esasy zat bilimleriňizi berkitmek, miras mehanizmine has içgin göz aýlamak we ýene bir gezek mysallardan geçmek bolar :) Şonuň üçin gideliň!
Sapaklaryň arasyndaky gatnaşyklar.  Miras, kompozisiýa we jemleniş - 1

Java-da miras we onuň peýdalary

Probablyadyňyzda bolsa, miras bar bolan (ene-atanyň) esasynda täze synpy suratlandyrmaga mümkinçilik berýän mehanizmdir. Bu ýagdaýda ene synpyň häsiýetleri we işleýşi täze synp tarapyndan karz alýar. Öňki leksiýalardan miras mysalyny ýada salalyň:
public class Car {

   private String model;
   private int maxSpeed;
   private int yearOfManufacture;

   public Car(String model, int maxSpeed, int yearOfManufacture) {
       this.model = model;
       this.maxSpeed = maxSpeed;
       this.yearOfManufacture = yearOfManufacture;
   }


public void gas() {
       //...gas
   }

public void brake() {
       //...brake
   }
}


public class Truck extends Car {

   public Truck(String model, int maxSpeed, int yearOfManufacture) {
       super(model, maxSpeed, yearOfManufacture);
   }
}



public class Sedan extends Car {
   public Sedan(String model, int maxSpeed, int yearOfManufacture) {
       super(model, maxSpeed, yearOfManufacture);
   }
}
Dürli görnüşli awtoulaglar bilen işleýän belli bir programma bar. Awtoulag höwesjeňi bolmasaňyzam, dünýäde şol bir awtoulaglaryň köp görnüşiniň bardygyny bilýän bolsaňyz gerek :) Şonuň üçin awtoulaglaryň umumy häsiýetlerini umumy ene-atalar synpyna bölýäris - Car. Haýsy görnüşine garamazdan, ähli awtoulaglaryň umumylygy näme? Islendik awtoulagda öndürilen ýyl, model ady we iň ýokary tizlik bar. Bu häsiýetleri meýdanlara goýýarys model,, maxSpeed. yearOfManufactureÖzüňi alyp baryş barada aýdylanda, islendik awtoulag tizlenip we tormozlap biler :) Bu hereketi usullar bilen kesgitleýäris gas()we brake(). Bu bize näme peýda berýär? Ilki bilen koduň mukdaryny azaltmak. Elbetde, ene-atalar synpy bolmazdan edip bileris. gas()Everyöne her bir awtoulag tizlenmegi we tormozlamagy başarmalydygy sebäpli, synpda brake(), Trucksynpda Sedan, synpda F1Car, synpda Sportcarwe beýleki ähli awtoulag synplarynda usullary döretmeli bolarys . Bu ýagdaýda näçe goşmaça kod ýazjakdygymyzy göz öňüne getiriň. Model, maxSpeed ​​we yearOfMan önümçilik meýdanlaryny ýatdan çykarmaň: ene synpdan ýüz öwürsek, olary maşyn sapaklarynyň hersinde dörederis! Sapaklaryň arasyndaky gatnaşyklar.  Miras, kompozisiýa we jemleme - 2 Birnäçe maşyn synpymyz bar bolsa, gaýtalanýan koduň mukdary hakykatdanam çynlakaý bolar. Umumy meýdanlary we usullary (“döwlet” we “özüni alyp barş” hem diýilýär) ene-atalar synpyna geçirmek köp wagt we ýer tygşytlamaga mümkinçilik berer. Belli bir görnüşiň diňe özüne mahsus bolan we beýleki maşynlarda ýok aýratynlyklary ýa-da usullary bar bolsa, bu möhüm däl. Elmydama beýlekilerden aýratynlykda nesil synpynda döredilip bilner.
public class F1Car extends Car {

   public void pitStop() {

       //...only racing cars make pit stops
   }

   public static void main(String[] args) {

       F1Car formula1Car = new F1Car();
       formula1Car.gas();
       formula1Car.pitStop();
       formula1Car.brake();
   }
}
“Formula 1” ýaryş awtoulaglaryny mysal alyň. “Garyndaşlaryndan” tapawutlylykda, özboluşly häsiýeti bar - wagtal-wagtal çukur duralgasy üçin durýarlar. Bu bizi biynjalyk edenok. Ene-atalar synpynda umumy özüni alyp barşymyzy eýýäm beýan etdik Carwe sapaklaryň içinde nesil synplarynyň aýratyn häsiýetini goşup bileris. Sapaklaryň arasyndaky gatnaşyklar.  Miras, kompozisiýa we jemleniş - 3 Bu meýdanlara hem degişlidir: çaga synpynyň özboluşly aýratynlyklary bar bolsa, içindäki bu meýdanlary arkaýyn yglan edip bileris we alada etmeris :) Kody gaýtadan ulanmak ukyby mirasyň esasy artykmaçlygydyr. Programmist üçin gereksiz mukdarda kod ýazmazlyk gaty möhümdir. Bu işiňizde bir gezekden köp duşarsyňyz. Moreene bir möhüm zady ýadyňyzdan çykarmaň: Java-da köp miras ýok. Her synp diňe bir synpdan miras alýar. Munuň sebäpleri barada geljekki leksiýalarda has jikme-jik gürleşeris, ýöne häzirlikçe ýadyňyzda bolsun. Theeri gelende aýtsak, Java-ny käbir beýleki OOP dillerinden tapawutlandyrýar. Mysal üçin, C ++ köp mirasa eýe. Hemme zat miras bilen has düşnükli - geliň dowam edeliň.

Kompozisiýa we agregasiýa

Synplar we obýektler biri-biri bilen baglanyşykly bolup biler. Miras gatnaşyklary "is" (ýa-da iňlis dilinde "IS A") düşündirýär. Leo haýwan. Bu gatnaşyk mirasyň kömegi bilen aňsatlyk bilen aňladylyp bilner, bu ýerde Animalsynp ene-atasy we Lionsynp çaga bolar. Şeýle-de bolsa, dünýädäki gatnaşyklaryň hemmesi beýle suratlandyrylmaýar. Mysal üçin, klawiatura hökman belli bir derejede kompýutere birikdirilen, ýöne bu kompýuter däl . Eller nämüçindir adam bilen baglanyşykly, ýöne olar adam däl. Bu ýagdaýlarda başga bir gatnaşyga esaslanýar: “ýok” däl-de, “bölek” (“HAS A”). El adam däl, ýöne adamyň bir bölegidir. Klawiatura kompýuter däl, ýöne kompýuteriň bir bölegidir. HAS Gatnaşyklary kompozisiýa we jemleýiş mehanizmleri bilen kodda suratlandyryp bolar . Olaryň arasyndaky tapawut, bu baglanyşyklaryň “berkliginde”. Simpleönekeý mysal getireliň: Bizde Car- maşyn bar. Her awtoulagda hereketlendiriji bar. Mundan başga-da, her awtoulagyň içinde ýolagçylar bar. Engine engineMeýdanlar bilen düýpli tapawut näme Passenger [] passengers? Awtoulagyň içinde ýolagçy bar bolsa , bu içinde Аýolagçy bolup bilmejekdigini aňlatmaýar . Bir awtoulag birnäçe ýolagçyny kabul edip biler. Mundan başga-da, ähli ýolagçylar awtoulagdan aýrylsa, asuda işlemegini dowam etdirer. Synp bilen ýolagçy massasynyň arasyndaky gatnaşyk az däl. Agregasiýa diýilýär . Bu mowzukda gowy makala bar: Synplaryň (obýektleriň) arasyndaky gatnaşyklar . Toplumyň başga bir gowy mysalydyr. Bir okuwçyny aňladýan synpymyz we synpymyz bar (okuwçylar topary) diýeliň . Talyp fizika klubynyň, “Wyldyz söweşleri” talyp janköýerleriniň ýa-da KVN toparynyň agzasy bolup biler. Kompozisiýa has berk aragatnaşyk görnüşidir. Kompozisiýa ulanylanda, bir obýekt diňe bir obýektiň bir bölegi bolman, eýsem şol bir görnüşdäki başga bir obýekte-de degişli bolup bilmez. Iň ýönekeý mysal awtoulag dwigateli. Dwigatel awtoulagyň bir bölegi, ýöne başga awtoulagyň bölegi bolup bilmez. Görşüňiz ýaly, olaryň baglanyşygy has berk we . BCCarPassenger [] passengersStudentStudentsGroupCarPassengersSapaklaryň arasyndaky gatnaşyklar.  Miras, kompozisiýa we jemleme - 4
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION