JavaRush /Блоги Java /Random-TG /Амалияи истифодаи полиморфизм

Амалияи истифодаи полиморфизм

Дар гурӯҳ нашр шудааст
Салом! Имрӯз мо як силсила лексияҳоро оид ба принсипҳои OOP ба анҷом мерасонем . Дар ин дарс мо дар бораи полиморфизм гап мезанем. Амалияи истифодаи полиморфизм - 1Полиморфизм ин қобorяти муносибат кардани намудҳои гуногун аст, ки гӯё онҳо як навъ бошанд. Дар ин ҳолат, рафтори an objectҳо вобаста ба кадом навъи онҳо гуногун хоҳад буд. Биёед ин изҳоротро муфассалтар дида бароем. Биёед бо қисми аввал оғоз кунем: "қобorяти кор бо намудҳои гуногун, ки гӯё онҳо як навъ бошанд." Чӣ тавр намудҳои гуногун метавонанд як ва якхела бошанд? Каме аҷиб садо медиҳад :/ Ин воқеан оддӣ аст. Масалан, ин вазъият бо истифодаи муътадor мерос ба миён меояд. Биёед бубинем, ки он чӣ гуна кор мекунад. Фарз мекунем, ки мо як синфи оддии волидайн Catбо як усули ягона дорем run()- "давидан":
public class Cat {

   public void run() {
       System.out.println("Бег!");
   }
}
Акнун биёед се синферо созем, ки аз мерос мегиранд Cat: Lion, Tigerва Cheetah, ки шер, паланг ва гепардро ифода мекунанд.
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бояд пайваста усулҳои нави табобати ҳар як гурбаро илова кунад ва дар натиҷа он ба андозаи бесобиқа афзоиш хоҳад ёфт. Дар ин ҷо моликияти полиморфизм ба кор меояд - "қобorяти кор кардан бо якчанд намудҳо, ки гӯё онҳо як навъ бошанд." Ба мо лозим нест, ки усулҳои бешумореро эҷод кунем, ки ҳамон корро мекунанд - ба гурба муносибат кунед. Як усул якбора барои ҳама ҳолатҳо кофӣ хоҳад буд:
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