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ň!
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()
, Truck
synpda Sedan
, synpda F1Car
, synpda Sportcar
we 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! 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 Car
we sapaklaryň içinde nesil synplarynyň aýratyn häsiýetini goşup bileris. 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 ýerdeAnimal
synp ene-atasy we Lion
synp ç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 engine
Meý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 . B
C
Car
Passenger [] passengers
Student
StudentsGroup
Car
Passengers
GO TO FULL VERSION