JavaRush /Java блогу /Random-KY /Полиморфизмди колдонуу практикасы

Полиморфизмди колдонуу практикасы

Группада жарыяланган
Салам! Бүгүн биз OOP принциптери боюнча лекциялардын сериясын аяктап жатабыз . Бул сабакта биз полиморфизм жөнүндө сүйлөшөбүз. Полиморфизмди колдонуу практикасы - 1Полиморфизм - бул бир нече түргө бирдей мамиле кылуу жөндөмү. Бул учурда an objectтердин жүрүм-туруму алардын кайсы түргө таандык экендигине жараша ар кандай болот. Келгиле, бул билдирүүнү кененирээк карап көрөлү. Биринчи бөлүктөн баштайлы: "бир типтегидей бир нече түр менен иштөө жөндөмү." Кантип ар кандай түрлөрү бир жана бирдей болушу мүмкүн? Бир аз кызыктай угулат :/ Бул чындыгында жөнөкөй. Мисалы, бул жагдай мурасты нормалдуу пайдалануу менен пайда болот. Келгиле, анын кантип иштээрин карап көрөлү. Келгиле, бизде 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мышыктын ар бир түрүн дарылоонун жаңы ыкмаларын дайыма кошуп турууга туура келет, натыйжада ал болуп көрбөгөндөй чоңоёт. Бул жерде полиморфизмдин касиети – «бир типтегидей бир нече түр менен иштөө жөндөмдүүлүгү» пайда болот. Биз бир эле нерсени жасай турган сансыз ыкмаларды жаратуунун кереги жок - мышык менен мамиле кылгыла. Бардык учурларда бир эле ыкма жетиштүү болот:
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тердин жүрүм-туруму алардын кайсы түргө таандык экендигине жараша ар кандай болот». Бул жерде да баары жөнөкөй. Табиятта бардык мышыктар ар кандай чуркайт. Жок дегенде, алардын чуркоо ылдамдыгы айырмаланат. Үч үй жаныбарыбыздын арасында гепард эң ылдам, ал эми жолборс менен арстан жайыраак чуркайт. Башкача айтканда, алардын жүрүм-туруму башкача. Полиморфизм бизге ар кандай типтерди бир катары колдонуу мүмкүнчүлүгүн гана бербейт. Ошол эле учурда, алардын айырмачылыктары жөнүндө унутпоого мүмкүндүк берет жана алардын ар бирине мүнөздүү жүрүм-турумду сактайт. Муну бул мисал менен түшүнүүгө болот. Ийгorктүү айыгып кеткенден кийин, биздин мышыктар майрамдоо үчүн бир аз чуркашууну чечишти дейли. Муну биздин класска кошолу 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 км/ч
Бул жерде биз үч жаныбарды тең методго өткөрүп, алардын ар бирин Cat. Полиморфизмдин аркасында Java булар үч гана мышык эмес, башкача айтканда арстан, жолборс жана гепард экенин эң сонун эстейт. Бул полиморфизмди колдонуунун негизги артыкчылыгы - ийкемдүүлүк . Көптөгөн түрлөргө мүнөздүү функцияларды түзүү керек болгондо, арстандар, жолборстор жана гепарддар жөн эле "мышыктарга" айланат. Бардык жаныбарлар ар кандай, бирок кээ бир учурларда - мышык кайсы түргө таандык болбосун, мышык болуп саналат :) Мына сиз үчүн видео тастыктоо.
Бул "жалпылоо" талап кылынбаганда, тескерисинче, түрлөрдүн жүрүм-туруму ар кандай болушу керек болгондо, ар бир түр өзүнчө мамиле кылат. Полиморфизмдин аркасында сиз класстардын кеңири диапазону үчүн бирдиктүү интерфейсти (методдордун жыйындысын) түзөсүз. Ушундан улам, программалардын татаалдыгы азаят. Программаны мышыктардын 40 түрүнө чейин кеңейтсек дагы, бизде мүмкүн болгон эң жөнөкөй интерфейс болот - run()бардык 40 мышык үчүн бир ыкма.
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION