JavaRush /Java Blog /Random-TK /Polimorfizmi ulanmagyň amaly

Polimorfizmi ulanmagyň amaly

Toparda çap edildi
Salam! Bu gün OOP ýörelgeleri boýunça birnäçe leksiýany tamamlaýarys . Bu sapakda polimorfizm hakda gürleşeris. Polimorfizmi ulanmagyň amaly - 1Polimorfizm, birnäçe görnüşe birmeňzeş görnüşdäki ýaly garamak ukybydyr. Bu ýagdaýda obýektleriň özüni alyp barşy, haýsy görnüşine degişlidigine baglylykda üýtgeşik bolar. Geliň, bu sözleme has jikme-jik seredeliň. Birinji bölümden başlalyň: "birmeňzeş görnüşdäki ýaly birnäçe görnüş bilen işlemek ukyby." Dürli görnüşler bir we birmeňzeş bolup bilermi? Biraz geň görünýär: / Aslynda ýönekeý. Mysal üçin, bu ýagdaý mirasyň adaty ulanylmagy bilen ýüze çykýar. Onuň nähili işleýändigini göreliň. CatSingleönekeý usul bilen ýönekeý ene synpymyz bar diýeliň run()- “işlediň”:
public class Cat {

   public void run() {
       System.out.println("Бег!");
   }
}
Indi miras galan üç synp döredeliň Cat: we Lion, arslan, gaplaň we çigidini aňladýar. TigerCheetah
public class Lion extends Cat {

   @Override
   public void run() {
       System.out.println("Лев бежит со speedю 80 км/ч");
   }
}

public class Tiger extends Cat {

   @Override
   public void run() {
       System.out.println("Тигр бежит со speedю 60 км/ч");
   }
}

public class Cheetah extends Cat {

   @Override
   public void run() {
       System.out.println("Гепард бежит со speedю до 120 км/ч");
   }
}
Şonuň üçin bizde 3 synp bar. Geliň, olar bilen bir synpdaky ýaly işläp boljak ýagdaýy öwreneliň. Pişiklerimiziň biriniň syrkawlandygyny we doktor Aýbolitiň kömegine mätäçdigini göz öňüne getireliň. AibolitLionsolbarslary, ýolbarslary we şireleri bejerip biljek synp döretmäge synanyşalyň .
public class Aibolit {

   public void healLion(Lion lion) {

       System.out.println("Лев здоров!");
   }

   public void healTiger(Tiger tiger) {

       System.out.println("Тигр здоров!");
   }

   public void healCheetah(Cheetah cheetah) {

       System.out.println("Гепард здоров!");
   }
}
Mesele çözülen ýaly - synp ýazylyp, ulanmaga taýyn. Emma programmamyzy giňeltmek islesek näme ederis? Indi diňe 3 görnüşimiz bar: arslan, gaplaň we çigid. Emma dünýäde pişikleriň 40-dan gowrak görnüşi bar. Programma Pallasyň pişikleri, jaguarlary, Maine konslary, öý pişikleri we başgalar üçin aýratyn sapaklary goşsak näme boljagyny göz öňüne getiriň. Polimorfizmi ulanmagyň amaly - 2Elbetde, programmanyň özi işlär, ýöne synp Aibolither bir pişigi bejermek üçin hemişe täze usullary goşmaly bolar we netijede görlüp-eşidilmedik ululykda öser. Polimorfizmiň häsiýeti şu ýerde ýüze çykýar - “birmeňzeş görnüşdäki ýaly birnäçe görnüş bilen işlemek ukyby”. Şol bir zady etjek - pişigi bejermek üçin sansyz usullary döretmeli däl. Bir usul ähli ýagdaýlarda birbada ýeterlik bolar:
public class Aibolit {

   public void healCat(Cat cat) {

       System.out.println("Пациент здоров!");
   }
}
Obýektleri we obýektleri hem usula healCat()geçirip bileris - hemmesi : LionTigerCheetahCat
public class Main {

   public static void main(String[] args) {

       Aibolit aibolit = new Aibolit();

       Lion simba = new Lion();
       Tiger sherekhan = new Tiger();
       Cheetah chester = new Cheetah();

       aibolit.healCat(simba);
       aibolit.healCat(sherekhan);
       aibolit.healCat(chester);
   }
}
Konsol çykyşy:

Пациент здоров!
Пациент здоров!
Пациент здоров!
Ine, synpymyz Айболитbirmeňzeş görnüşdäki ýaly dürli görnüşler bilen işläp biler. Indi ikinji bölüm bilen iş salyşalyň: "bu ýagdaýda obýektleriň özüni alyp barşy, haýsy görnüşine degişlidigine görä üýtgeşik bolar." Bu ýerde hem hemme zat ýönekeý. Tebigatda ähli pişikler başgaça ylgaýarlar. Iň bolmanda, olaryň işleýiş tizligi tapawutlanýar. Üç öý haýwanymyzyň arasynda çigid iň çalt, ýolbars we arslan bolsa haýal hereket edýär. .Agny, olaryň özüni alyp barşy başga. Polimorfizm diňe bir dürli görnüşleri ulanmaga mümkinçilik bermeýär. Şol bir wagtyň özünde, olaryň tapawudyny ýatdan çykarmazlyga mümkinçilik berýär we olaryň hersine mahsus häsiýeti saklaýar. Bu mysal bilen düşünip bolar. Üstünlikli gutulandan soň, pişiklerimiz bellemek üçin azajyk ylgamak kararyna geldik. Muny synpymyza goşalyň Aibolit:
public class Aibolit {

   public void healCat(Cat cat) {

       System.out.println("Пациент здоров!");
       cat.run();
   }
}
Üç haýwany bejermek üçin şol bir kody işletmäge synanyşalyň:
public static void main(String[] args) {

   Aibolit aibolit = new Aibolit();

   Lion simba = new Lion();
   Tiger sherekhan = new Tiger();
   Cheetah chester = new Cheetah();

   aibolit.healCat(simba);
   aibolit.healCat(sherekhan);
   aibolit.healCat(chester);
}
Netijäniň görnüşi şeýle bolar:

Пациент здоров!
Лев бежит со speedю 80 км/ч
Пациент здоров!
Тигр бежит со speedю 60 км/ч
Пациент здоров!
Гепард бежит со speedю до 120 км/ч
Bu ýerde, üç haýwanyň hemmesini “umumylaşdyrmak” usulyna geçenem bolsak, obýektlerimiziň aýratyn häsiýetiniň saklanandygyny görýäris Cat. Polimorfizmiň kömegi bilen Java bularyň diňe üç pişik bolman, eýsem başgaça hereket edýän arslan, gaplaň we çigididigini doly ýada salýar. Bu polimorfizmi ulanmagyň esasy artykmaçlygy - çeýeligi . Köp görnüşlere mahsus bolan käbir funksiýalary döretmeli bolanymyzda, ýolbarslar, ýolbarslar we şireler diňe “pişiklere” öwrülýärler. Animalshli haýwanlar başga, ýöne käbir ýagdaýlarda - haýsy görnüşe degişlidigine garamazdan pişik pişikdir :) Ine, size wideo tassyklamasy.
Haçan-da bu “umumylaşdyrma” talap edilmeýän bolsa we tersine, görnüşleriň özüni alyp barşynyň üýtgeşik bolmagy zerur bolsa, her görnüş başgaça hereket edýär. Polimorfizmiň kömegi bilen, dürli synplar üçin ýekeje interfeýs (usullar toplumy) döredýärsiňiz. Şol sebäpli programmalaryň çylşyrymlylygy azalýar. run()Programmany 40 görnüşli pişige çenli giňeldenimizde-de, iň ýönekeý interfeýs - 40 pişigiň hemmesi üçin bir usul bolar .
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION