Salam! Java-yň näme üçin beýle döredilendigi hakda pikir edip gördüňizmi? Olara esaslanyp synplar döretmek manysynda - obýektleriň, synplaryň usullary we ş.m. Whyöne näme üçin diliň gurluşy, programmalar başga bir zat däl-de, synplardan we obýektlerden durýar? Näme üçin “obýekt” düşünjesi oýlanyp tapyldy we birinji orunda goýuldy? Languageshli diller şeýle işleýärmi, ýok bolsa, Java-a näme peýdasy bar? Görşüňiz ýaly, soraglar kän :) Geliň, şu günki leksiýada olaryň hersine jogap bermäge synanyşalyň.
Kristen Nygaard we Ole anohan Dahl - “Simulanyň” döredijileri
Simula programmirleme ülňüleri boýunça gadymy dil ýaly bolup görünýär, ýöne olaryň Java bilen “maşgala” baglanyşygy göze görünýär. Onda ýazylan kody aňsatlyk bilen okap, näme edýändigini umumy manyda düşündirip bilersiňiz :)
OOP ýörelgeleri:
Obýekte gönükdirilen programmirleme näme (OOP)
Elbetde, Java bir sebäbe görä obýektlerden we synplardan durýar. Bu döredijileriň islegi ýa-da oýlap tapyşy däl. Obýektlere esaslanýan başga-da köp dil bar. Şeýle ilkinji dil Simula diýlip atlandyryldy we 1960-njy ýyllarda Norwegiýada oýlanyp tapyldy. Simula beýleki zatlaryň arasynda “ synp ” we “ usul ” düşünjelerini hödürledi .Begin
Class Rectangle (Width, Height); Real Width, Height;
Begin
Real Area, Perimeter;
Procedure Update;
Begin
Area := Width * Height;
OutText("Rectangle is updating, Area = "); OutFix(Area,2,8); OutImage;
Perimeter := 2*(Width + Height);
OutText("Rectangle is updating, Perimeter = "); OutFix(Perimeter,2,8); OutImage;
End of Update;
Update;
OutText("Rectangle created: "); OutFix(Width,2,6);
OutFix(Height,2,6); OutImage;
End of Rectangle;
Rectangle Class ColouredRectangle (Color); Text Color;
Begin
OutText("ColouredRectangle created, color = "); OutText(Color);
OutImage;
End of ColouredRectangle;
Ref(Rectangle) Cr;
Cr :- New ColouredRectangle(10, 20, "Green");
End;
Kod mysaly Simula - 50 ýyllyk OOP makalasyndan alyndy . Görşüňiz ýaly, Java we onuň atasy biri-birinden beýle bir tapawudy ýok :) Bu, Simulanyň peýda bolmagy, täze düşünjäniň - obýekte gönükdirilen programmirlemegiň döremegine sebäp boldy. Wikipediýa OOP-yň aşakdaky kesgitlemesini berýär: Obýekte gönükdirilen programmirleme (OOP), hersi belli bir synpyň mysaly bolup, synplary miras iýerarhiýasyny emele getirýän obýektleriň ýygyndysy hökmünde bir programmany görkezmäge esaslanýan programmirleme usulydyr. Meniň pikirimçe, bu örän üstünlikli. Javaaňy-ýakynda Java öwrenip başladyňyz, ýöne onda size nätanyş sözler ýok diýen ýaly :) Häzirki wagtda OOP iň köp ýaýran programmirleme usulydyr. Java-dan başga-da, eşiden bolmagyňyz mümkin köp meşhur dillerde OOP ýörelgeleri ulanylýar. Bular C ++ (kompýuter oýunlaryny döredijiler tarapyndan işjeň ulanylýar), Objective-C we Swift (olar Apple enjamlary üçin programmalar ýazýarlar), Python (maşyn öwrenmekde iň köp talap edilýän), PHP (iň meşhur web ösüş dilleriniň biri), JavaScript (has ýönekeý zat, näme etmeýändiklerini aýdyň) we başgalar. Aslynda, OOP-yň bu “ýörelgeleri” haýsylar? Has giňişleýin aýdaýyn.
OOP ýörelgeleri
Bu esaslar. Obýekte gönükdirilen programmirleme paradigmasyny bilelikde emele getirýän 4 esasy aýratynlyk. Olara düşünmek üstünlikli programmist bolmagyň açarydyr.Ipleörelge 1. Miras
Gowy habar, OOP-yň käbir ýörelgeleri bilen eýýäm tanyş! :) Biz leksiýalarda eýýäm birnäçe gezek mirasa duş geldik we onuň bilen işlemäge wagtymyz boldy. 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. Miras näme üçin zerur we haýsy peýdalary berýär? Ilki bilen kodlary gaýtadan ulanmak. Ene-atalar synplarynda beýan edilen meýdanlar we usullar nesil synplarynda ulanylyp bilner. Awtoulaglaryň ähli görnüşlerinde 10 umumy meýdan we 5 meňzeş usul bar bolsa, olary diňe ene synpyna salmalyAuto
. Olary nesil synplarynda hiç hili kynçylyksyz ulanyp bilersiňiz. Gaty artykmaçlyklar: mukdar taýdan (az kod) we netijede hil taýdan (synplar has ýönekeýleşýär). Şol bir wagtyň özünde, miras mehanizmi örän çeýe bolup, nesillerde ýiten funksiýany aýratyn goşup bilersiňiz (käbir meýdanlara ýa-da belli bir synp üçin häsiýet). Umuman, adaty durmuşda bolşy ýaly: hemmämiz käbir tarapdan ene-atamyza meňzeýäris, ýöne käbir tarapdan olardan tapawutlanýarys :)
Princörelge 2. Abstraksiýa
Bu gaty ýönekeý prinsip. Abstraksiýa, obýektiň esasy, iň möhüm aýratynlyklaryny görkezmegi we tersine - ikinji, ähmiýetsizleri taşlamagy aňladýar. Tigiri täzeden dikeltmäliň we sapaklar hakda köne leksiýadan bir mysaly ýada salalyň. Kompaniýanyň işgärleriniň faýl kabinetini döredýäris diýeliň. Işgärleriň obýektlerini döretmek üçin synp ýazdykEmployee
. Kompaniýanyň faýlynda düşündirilmegi üçin haýsy aýratynlyklar möhüm? Doly ady, doglan senesi, sosial üpjünçilik belgisi, salgyt şahsyýet belgisi. Heöne bu görnüşdäki kartada onuň beýikligine, gözüne we saç reňkine mätäçligimiz ýok. Kompaniýa işgäri barada bu maglumata mätäç däldir. Şonuň üçin synp üçin üýtgeýjileri Employee
belläris we gözüň reňki ýaly zerur däl maglumatlary terk ederis we abstrakt ederis . Emma bir edara üçin surat modelleriniň katalogyny döretsek, ýagdaý düýpgöter üýtgeýär. Moda modelini suratlandyrmak üçin beýiklik, gözüň reňki we saçyň reňki biziň üçin gaty möhümdir, ýöne TIN belgisi gerek däl. Şonuň üçin synpda üýtgeýjiler döredýäris ,, .String name
int age
int socialInsuranceNumber
int taxNumber
Model
String height
String hair
String eyes
Princörelge 3: Enkapsulýasiýa
Biz eýýäm muňa duş geldik. Java-da encapsulýasiýa, maglumatlaryň elýeterliligini we ony üýtgetmek mümkinçiligini çäklendirýär. Görşüňiz ýaly, "kapsula" sözüne esaslanýar. Bu “kapsulada” hiç kimiň üýtgemegini islemeýän käbir möhüm maglumatlary gizleýäris. Durmuşdan ýönekeý mysal. Siziň familiýaňyz we familiýaňyz bar. Tanaýanlaryňyzyň hemmesi olary tanaýar. Emma familiýaňyzy we familiýaňyzy üýtgetmek mümkinçiligi ýok. Bu amal, pasport ofisinde “jemlenendir” diýmek bolar: diňe familiýaňyzy we familiýaňyzy şol ýerde üýtgedip bilersiňiz, diňe muny edip bilersiňiz. Beýleki “ulanyjylar” diňe familiýaňyzy we familiýaňyzy okap bilerler :) Başga bir mysal, kwartiradaky pul. Olary otagyň ortasynda aç-açan goýmak gowy pikir däl. Islendik “ulanyjy” (öýüňize gelýän adam) puluňyzyň sanyny üýtgedip biler. al. Olary seýfde jemlemek has gowudyr. Diňe ýörite kod bilen girip bilersiňiz. Öň işlän encapsulýasiýanyň aýdyň mysallary giriş üýtgeýjileri (private
we public
ş.m.) we getter-sazlaýjylardyr. age
Synp meýdançasy Cat
gurulmadyk bolsa , her kim ýazyp biler:
Cat.age = -1000;
Enkapsulýasiýa mehanizmi, age
ýaşyň negatiw san bolup bilmejekdigini barlap bilýän kesgitleýji usul bilen meýdany goramaga mümkinçilik berýär.
Ipleörelge 4. Polimorfizm
Polimorfizm , birnäçe görnüşe birmeňzeş görnüşdäki ýaly garamak ukybydyr. Bu ýagdaýda obýektleriň özüni alyp barşy, görnüşine baglylykda tapawutlanýar. Biraz çylşyrymly? Geliň indi düşüneliň. Iň ýönekeý mysal alalyň - haýwanlar.Animal
Methodeke-täk usul bilen synp döredeliň - voice()
we onuň iki nesli - Cat
we Dog
.
public class Animal {
public void voice() {
System.out.println("Voice!");
}
}
public class Dog extends Animal {
@Override
public void voice() {
System.out.println("Bow-wow!");
}
}
public class Cat extends Animal {
@Override
public void voice() {
System.out.println("Meow!");
}
}
Animal
Indi bir baglanyşyk döretmäge we oňa obýekt bellemäge synanyşalyň Dog
.
public class Main {
public static void main(String[] args) {
Animal dog = new Dog();
dog.voice();
}
}
Siziň pikiriňizçe haýsy usul diýler? Animal.voice()
ýa-da Dog.voice()
? Synp usuly şeýle atlandyrylar Dog
: Woof-woof! Salgy döretdik Animal
, ýöne obýekt özüni alyp barýar Dog
. Zerur bolsa, pişik, at ýa-da beýleki haýwan ýaly hereket edip biler. Animal
Esasy zat, belli bir nesil synpynyň obýektine umumy görnüşe salgylanma bellemekdir . Bu mantykly, sebäbi itleriň hemmesi haýwan. "Jisimler haýsy görnüşine baglylykda başgaça hereket eder" diýlende göz öňünde tutduk. Obýekt döretmeli bolsak Cat
-
public static void main(String[] args) {
Animal cat = new Cat();
cat.voice();
}
usul voice()
"Meow!" “Birmeňzeş görnüşdäki ýaly birnäçe görnüş bilen işlemek ukyby” nämäni aňladýar? Bu hem aňsat. Haýwanlar üçin saç kesmek salonyny döredýändigimizi göz öňüne getireliň. Saç salonymyz ähli haýwanlary kesmegi başarmaly, şonuň üçin shear()
parametr Animal
- kesjek haýwanymyz bilen usul (“kesmek”) dörederis.
public class AnimalBarbershop {
public void shear(Animal animal) {
System.out.println("The haircut is ready!");
}
}
shear
Indi bolsa obýektleri Cat
we obýektleri usula geçirip bileris Dog
!
public static void main(String[] args) {
Cat cat = new Cat();
Dog dog = new Dog();
AnimalBarbershop barbershop = new AnimalBarbershop();
barbershop.shear(cat);
barbershop.shear(dog);
}
Ine aýdyň mysal: synp edil şol bir görnüşdäki ýaly AnimalBarbershop
işleýär . Şol bir wagtyň özünde, dürli hereketleri bar : seslerini başgaça ulanýarlar. Cat
Dog
Cat
Dog
GO TO FULL VERSION