JavaRush /Java блогы /Random-KK /Полиморфизмді қолдану тәжірибесі

Полиморфизмді қолдану тәжірибесі

Топта жарияланған
Сәлеметсіз бе! Бүгін біз OOP принциптері бойынша лекциялар топтамасын аяқтаймыз . Бұл сабақта біз полиморфизм туралы айтатын боламыз. Полиморфизмді қолдану тәжірибесі – 1Полиморфизм - бұл бірнеше түрге бір тип сияқты қарау мүмкіндігі. Бұл жағдайда an objectілердің әрекеті олардың қай типке жататынына байланысты әртүрлі болады. Бұл мәлімдемені толығырақ қарастырайық. Бірінші бөлімнен бастайық: «бір типтегідей бірнеше түрмен жұмыс істеу қабілеті». Әртүрлі түрлер қалай бір және бірдей болуы мүмкін? Біртүрлі естіледі:/ Бұл шын мәнінде қарапайым. Мысалы, бұл жағдай мұрагерлікті қалыпты пайдалану кезінде туындайды. Оның қалай жұмыс істейтінін көрейік. Бізде Catбір әдісі бар қарапайым ата-аналар сыныбы бар делік run()- «іске қосу»:
public class Cat {

   public void run() {
       System.out.println("Бег!");
   }
}
CatЕнді арыстанды , жолбарысты және гепардты білдіретін , және дан Lionмұра алатын үш класс құрайық . 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 км/ч");
   }
}
Сонымен бізде 3 сынып бар. Олармен бір сынып сияқты жұмыс істей алатын жағдайды елестетіп көрейік. Біздің мысықтарымыздың бірі ауырып, доктор Айболиттің көмегіне мұқтаж екенін елестетіп көрейік. AibolitАрыстандарды, жолбарыстарды және гепардтарды емдей алатын класс құруға тырысайық .
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("Гепард здоров!");
   }
}
Мәселе шешілген сияқты - сынып жазылған және пайдалануға дайын. Бірақ біз бағдарламамызды кеңейткіміз келсе, не істейміз? Қазір бізде тек 3 түрі бар: арыстандар, жолбарыстар, гепардтар. Бірақ әлемде мысықтардың 40-тан астам түрі бар. Бағдарламаға Паллас мысықтары, ягуарлар, Мейн кундері, үй мысықтары және басқалар үшін бөлек сыныптарды қоссақ не болатынын елестетіп көріңізші. Полиморфизмді қолдану тәжірибесі – 2Бағдарламаның өзі, әрине, жұмыс істейді, бірақ сыныпқа Aibolitмысықтың әрбір түрін емдеудің жаңа әдістерін үнемі қосуға тура келеді, нәтижесінде ол бұрын-соңды болмаған өлшемдерге дейін өседі. Міне, осы жерде полиморфизм қасиеті - «бір типті бірнеше түрмен жұмыс істеу қабілеті» ойнайды. Бізге бірдей нәрсені жасайтын сансыз әдістерді жасаудың қажеті жоқ - мысықты емдеңіз. Бір әдіс барлық жағдайлар үшін бірден жеткілікті болады:
public class Aibolit {

   public void healCat(Cat cat) {

       System.out.println("Пациент здоров!");
   }
}
Біз әдіске an objectілерді де, an objectілерді де healCat()бере аламыз - олардың барлығы : 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);
   }
}
Консоль шығысы:

Пациент здоров!
Пациент здоров!
Пациент здоров!
Міне, біздің сынып Айболитәртүрлі типтермен бір типтегідей жұмыс істей алады. Енді екінші бөліммен айналысайық: «бұл жағдайда an objectілердің мінез-құлқы олардың қай типке жататынына байланысты әртүрлі болады». Мұнда да бәрі қарапайым. Табиғатта барлық мысықтар басқаша жүгіреді. Кем дегенде, олардың жүгіру жылдамдығы әртүрлі. Біздің үш үй жануарларымыздың ішінде гепард ең жылдам, ал жолбарыс пен арыстан баяу жүгіреді. Яғни, олардың мінез-құлқы әртүрлі. Полиморфизм бізге әртүрлі типтерді біртұтас ретінде пайдалану мүмкіндігін беріп қана қоймайды. Сонымен бірге, олардың айырмашылықтарын ұмытпауға мүмкіндік береді және олардың әрқайсысына тән мінез-құлықты сақтайды. Мұны мына мысал арқылы түсінуге болады. Сәтті сауыққаннан кейін біздің мысықтар тойлау үшін аздап жүгіруді шешті делік. Мұны біздің сыныпқа қосайық Aibolit:
public class Aibolit {

   public void healCat(Cat cat) {

       System.out.println("Пациент здоров!");
       cat.run();
   }
}
Үш жануарды емдеу үшін бірдей codeты іске қосып көрейік:
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);
}
Ал нәтиже келесідей болады:

Пациент здоров!
Лев бежит со speedю 80 км/ч
Пациент здоров!
Тигр бежит со speedю 60 км/ч
Пациент здоров!
Гепард бежит со speedю до 120 км/ч
Бұл жерде біз үш жануардың барлығын бір әдіске «жалпылап» өткізгенмен, an objectілеріміздің ерекше мінез-құлқы сақталғанын анық көреміз Cat. Полиморфизмнің арқасында Java бұл тек үш мысық емес, арыстан, жолбарыс және гепард екенін жақсы есте сақтайды. Бұл полиморфизмді пайдаланудың басты артықшылығы - икемділік . Көптеген түрлерге тән кейбір функцияларды жасау қажет болғанда, арыстандар, жолбарыстар және гепардтар жай ғана «мысықтарға» айналады. Барлық жануарлар әртүрлі, бірақ кейбір жағдайларда - мысық мысық, ол қандай түрге жататынына қарамастан :) Міне, бейне растау.
Бұл «жалпылау» талап етілмесе және керісінше бізге түрлердің мінез-құлқының әртүрлі болуы қажет болғанда, әр түрдің әрекеті әртүрлі. Полиморфизмнің арқасында сіз класстардың кең ауқымы үшін бірыңғай интерфейсті (әдістер жиынтығы) жасайсыз. Осыған байланысты бағдарламалардың күрделілігі азаяды. Бағдарламаны мысықтардың 40 түріне дейін кеңейтсек те, бізде ең қарапайым интерфейс болады - run()барлық 40 мысық үшін бір әдіс.
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION