JavaRush /Java Blog /Random-TK /OOP ýörelgeleri

OOP ýörelgeleri

Toparda çap edildi
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ň.

OOP ýörelgeleri:

  1. Miras
  2. Abstraksiýa
  3. Enkapsulýasiýa
  4. Polimorfizm

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 . Obýekte gönükdirilen programmirlemegiň esaslary - 2
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 :)
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. Obýekte gönükdirilen programmirlemegiň esaslary - 3

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 salmaly Auto. 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 ýazdyk Employee. 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 Employeebellä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 nameint ageint socialInsuranceNumberint taxNumberModelString heightString hairString 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 ( privatewe publicş.m.) we getter-sazlaýjylardyr. ageSynp meýdançasy Catgurulmadyk 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. AnimalMethodeke-täk usul bilen synp döredeliň - voice()we onuň iki nesli - Catwe 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!");
   }
}
AnimalIndi 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. AnimalEsasy 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!");
   }
}
shearIndi bolsa obýektleri Catwe 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 AnimalBarbershopişleýär . Şol bir wagtyň özünde, dürli hereketleri bar : seslerini başgaça ulanýarlar. CatDogCatDog

OOP-nyň peýda bolmagynyň sebäpleri

Näme üçin bu täze programmirleme düşünjesi - OOP - hatda ýüze çykdy ? Programmistleriň işleýän gurallary bardy: mysal üçin prosessual diller. Olary düýpgöter täze bir zat oýlap tapmaga näme itergi berdi? Ilki bilen ýüzbe-ýüz bolýan meseleleriň çylşyrymlylygy. 60 ýyl ozal bir programmistiň wezipesi “şuňa meňzeş matematiki deňlemäni hasaplamak” ýaly görünýän bolsa, indi “A, B, C, D oýun pursatlarynda ulanyjynyň haýsy karar kabul edendigine baglylykda“ STALKER ”oýny üçin 7 dürli netijäni ýerine ýetirmek ýaly bolup biler. , E, F we bu çözgütleriň kombinasiýalary. " Görşüňiz ýaly, meseleler soňky onýyllykda has çylşyrymlaşdy. Bu maglumatlaryň görnüşleriniň has çylşyrymlaşandygyny aňladýar. Bu OOP-yň döremeginiň başga bir sebäbi. Deňlik bilen mysal adaty primitiwleri ulanyp aňsatlyk bilen çözülip bilner, bu ýerde hiç zat gerek däl. Evenöne oýlap tapan käbir synplaryňyzy ulanman, oýnuň soňy bilen meseläni suratlandyrmak kyn bolar. Theöne şol bir wagtyň özünde, synplarda we obýektlerde suratlandyrmak gaty aňsat: bize Oýun synpy, Stalker synpy, Ahyrky synp, Oýunçynyň karar synpy, Oýun pursaty synpy we ş.m. gerek bolar. .Agny, bir meseläni çözmäge başlamazdan, kellämizdäki çözgüdiň “eskizlerini” aňsatlyk bilen göz öňüne getirip bileris. Meseleleriň barha çylşyrymlylygy programmistleri meseläni böleklere bölmäge mejbur etdi. Emma prosessual programmirlemekde beýle aňsat däldi. Programma köplenç işlemek üçin mümkin bolan bir topar şahanyň “agajy” boldy. Käbir şertlere baglylykda programma bir şahada ýa-da başga bir bölümde ýerine ýetirildi. Kiçi programmalar üçin bu wariant amatlydy, ýöne uly meseläni böleklere bölmek gaty kyndy. Bu zerurlyk OOP-yň döremeginiň başga bir sebäbi boldy. Bu düşünje programmistlere programmany bir topar synpyň “modulyna” bölmek ukybyny berdi, olaryň hersi öz işini ýerine ýetirdi. Birek-birege täsir edip, ähli obýektler programmamyzyň işini emele getirýär. Mundan başga-da, ýazýan kodumyz programmanyň başga bir ýerinde gaýtadan ulanylyp bilner, bu hem köp wagt tygşytlaýar.
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION