JavaRush /Java Blogu /Random-AZ /Polimorfizmdən istifadə təcrübəsi

Polimorfizmdən istifadə təcrübəsi

Qrupda dərc edilmişdir
Salam! Bu gün biz OOP prinsiplərinə dair bir sıra mühazirələri tamamlayırıq . Bu dərsdə polimorfizm haqqında danışacağıq. Polimorfizmdən istifadə təcrübəsi - 1Polimorfizm bir neçə növə eyni tip kimi davranmaq qabiliyyətidir. Bu zaman obyektlərin davranışı onların hansı tipə aid olmasından asılı olaraq fərqli olacaqdır. Bu bəyanatı daha ətraflı nəzərdən keçirək. Birinci hissədən başlayaq: "birdən çox növlə eyni tipli kimi işləmək bacarığı". Fərqli növlər necə bir və eyni ola bilər? Bir az qəribə səslənir :/ Əslində sadədir. Məsələn, mirasın normal istifadəsi ilə bu vəziyyət yaranır. Gəlin görək necə işləyir. Tutaq ki, bizdə Cattək metodlu sadə ana sinifimiz var run()- “çalış”:
public class Cat {

   public void run() {
       System.out.println("Бег!");
   }
}
İndi şir , pələng və çita ifadə edən , Catvə -dən miras qalan üç sinif yaradaq .LionTigerCheetah
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 км/ч");
   }
}
Beləliklə, 3 sinifimiz var. Gəlin elə bir situasiyanı simulyasiya edək ki, onlarla eyni sinifdən olan kimi işləyə bilək. Təsəvvür edək ki, pişiklərimizdən biri xəstədir və doktor Aibolit-in köməyinə ehtiyac duyur. AibolitGəlin aslanları, pələngləri və çitaları müalicə edə biləcək bir sinif yaratmağa çalışaq .
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("Гепард здоров!");
   }
}
Problemin həll edildiyi görünür - sinif yazılır və istifadəyə hazırdır. Bəs proqramımızı genişləndirmək istəsək nə edəcəyik? İndi bizdə cəmi 3 növ var: aslanlar, pələnglər və çitalar. Ancaq dünyada 40-dan çox pişik növü var. Təsəvvür edin ki, proqrama Pallas pişikləri, yaquarlar, meyn quşları, ev pişikləri və hər kəs üçün ayrıca siniflər əlavə etsək, nə baş verəcək. Polimorfizmdən istifadə təcrübəsi - 2Proqramın özü, əlbəttə ki, fəaliyyət göstərəcək, lakin sinif Aibolitdaim pişiklərin hər bir növü ilə müalicə üçün yeni üsullar əlavə etməli olacaq və nəticədə görünməmiş ölçülərə qədər böyüyəcəkdir. Polimorfizmin xüsusiyyəti burada işə düşür - “bir neçə növlə eyni tipmiş kimi işləmək bacarığı”. Eyni şeyi edəcək saysız-hesabsız üsullar yaratmağa ehtiyacımız yoxdur - pişiyi müalicə edin. Bir üsul bütün hallar üçün bir anda kifayət edəcəkdir:
public class Aibolit {

   public void healCat(Cat cat) {

       System.out.println("Пациент здоров!");
   }
}
Biz həm obyektləri , həm də obyektləri metoda healCat()ötürə bilərik - onların hamısı : 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 çıxışı:

Пациент здоров!
Пациент здоров!
Пациент здоров!
Sinifimiz Айболитmüxtəlif növlərlə eyni tip kimi işləyə bilər. İndi isə ikinci hissə ilə məşğul olaq: ​​“bu halda obyektlərin davranışı onların hansı tipə aid olmasından asılı olaraq fərqli olacaq”. Burada da hər şey sadədir. Təbiətdə bütün pişiklər fərqli şəkildə qaçırlar. Ən azı onların qaçış sürəti fərqlənir. Üç ev heyvanımız arasında çita ən sürətli, pələng və aslan isə daha yavaş qaçır. Yəni onların davranışı fərqlidir. Polimorfizm nəinki bizə müxtəlif növlərdən bir kimi istifadə etmək imkanı verir. Eyni zamanda, onların fərqlərini unutmamağa imkan verir və onların hər birinə xas olan davranışı qoruyub saxlayır. Bunu bu misalla başa düşmək olar. Deyək ki, uğurlu sağaldıqdan sonra pişiklərimiz bayram etmək üçün bir az qaçmağa qərar verdilər. Bunu sinfimizə əlavə edək Aibolit:
public class Aibolit {

   public void healCat(Cat cat) {

       System.out.println("Пациент здоров!");
       cat.run();
   }
}
Üç heyvanı müalicə etmək üçün eyni kodu işlətməyə çalışaq:
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);
}
Və nəticə belə olacaq:

Пациент здоров!
Лев бежит со speedю 80 км/ч
Пациент здоров!
Тигр бежит со speedю 60 км/ч
Пациент здоров!
Гепард бежит со speedю до 120 км/ч
Burada obyektlərimizin spesifik davranışının qorunub saxlanıldığını aydın görürük, baxmayaraq ki, biz hər üç heyvanı bir metoda keçirsək, onların hər birini "ümumiləşdirdik" Cat. Polimorfizm sayəsində Java mükəmməl şəkildə xatırlayır ki, bunlar yalnız üç pişik deyil, fərqli şəkildə qaçan aslan, pələng və çitadır. Bu polimorfizmdən istifadənin əsas üstünlüyüdür - elastiklik . Bir çox növlərə xas olan bəzi funksionallıq yaratmağa ehtiyac duyduqda şirlər, pələnglər və çitalar sadəcə olaraq “pişiklərə” çevrilirlər. Bütün heyvanlar fərqlidir, lakin bəzi vəziyyətlərdə - pişik hansı növə aid olursa olsun, pişikdir :) Budur sizin üçün təsdiqləmə videosu.
Bu "ümumiləşdirmə" tələb olunmayanda və əksinə, növlərin davranışının fərqli olması lazım olduqda, hər bir növ fərqli davranır. Polimorfizm sayəsində siz geniş siniflər üçün vahid interfeys (metodlar dəsti) yaradırsınız. Bunun sayəsində proqramların mürəkkəbliyi azalır. Proqramı 40 pişik növünə qədər genişləndirsək belə, mümkün olan ən sadə interfeysə sahib olardıq - run()bütün 40 pişik üçün bir üsul.
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION