JavaRush /وبلاگ جاوا /Random-FA /تمرین استفاده از پلی مورفیسم

تمرین استفاده از پلی مورفیسم

در گروه منتشر شد
سلام! امروز ما در حال اتمام یک سری سخنرانی در مورد اصول OOP هستیم . در این درس در مورد چندشکلی صحبت خواهیم کرد. تمرین استفاده از پلی مورفیسم - 1چند شکلی توانایی برخورد با چندین نوع است که گویی آنها یک نوع هستند. در این صورت رفتار اشیا بسته به نوع آنها متفاوت خواهد بود. بیایید به این بیانیه با جزئیات بیشتری نگاه کنیم. بیایید با بخش اول شروع کنیم: "توانایی کار با چندین نوع به گونه ای که گویی آنها یک نوع هستند." چگونه انواع مختلف می توانند یکی و یکسان باشند؟ کمی عجیب به نظر می رسد:/ در واقع ساده است. به عنوان مثال، این وضعیت با استفاده عادی از ارث به وجود می آید. بیایید ببینیم چگونه کار می کند. فرض کنید یک کلاس والد ساده Catبا یک متد run()- "run" داریم:
public class Cat {

   public void run() {
       System.out.println("Бег!");
   }
}
اکنون بیایید سه کلاس ایجاد کنیم که از : و به ارث می برند که Catبه معنی شیر، ببر و یوزپلنگ است. 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 км/ч");
   }
}
بنابراین ما 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("Пациент здоров!");
   }
}
healCat()ما می توانیم هم اشیا Lionو هم Tigerاشیاء را به متد ارسال کنیم Cheetah- همه آنها عبارتند از Cat:
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);
   }
}
خروجی کنسول:

Пациент здоров!
Пациент здоров!
Пациент здоров!
اینگونه است که کلاس ما Айболитمی تواند با انواع مختلف کار کند، انگار که آنها یک نوع هستند. حال به قسمت دوم می پردازیم: «در این صورت، رفتار اشیا بسته به نوع آن ها متفاوت خواهد بود». اینجا هم همه چیز ساده است. در طبیعت، همه گربه ها متفاوت می دوند. حداقل سرعت دویدن آنها متفاوت است. در میان سه حیوان خانگی ما، یوزپلنگ سریع‌ترین است، در حالی که ببر و شیر کندتر می‌دوند. یعنی رفتارشان متفاوت است. چند شکلی نه تنها به ما این توانایی را می دهد که از انواع مختلف به عنوان یکی استفاده کنیم. در عین حال به ما این امکان را می دهد که تفاوت های آنها را فراموش نکنیم و رفتار خاص هر یک از آنها را حفظ کنیم. این را می توان با این مثال فهمید. بیایید بگوییم که پس از بهبودی موفق، گربه‌های ما تصمیم گرفتند برای جشن گرفتن کمی دور بزنند. بیایید این را به کلاس خود اضافه کنیم Aibolit:
public class Aibolit {

   public void healCat(Cat cat) {

       System.out.println("Пациент здоров!");
       cat.run();
   }
}
بیایید سعی کنیم همان کد را برای درمان سه حیوان اجرا کنیم:
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. به لطف چندشکلی، جاوا کاملاً به یاد می آورد که اینها فقط سه گربه نیستند، بلکه یک شیر، یک ببر و یک یوزپلنگ هستند که متفاوت هستند. این مزیت اصلی استفاده از پلی مورفیسم - انعطاف پذیری است . هنگامی که ما نیاز به ایجاد برخی عملکردهای مشترک برای انواع مختلف داریم، شیرها، ببرها و یوزپلنگ ها به سادگی تبدیل به "گربه" می شوند. همه حیوانات متفاوت هستند، اما در برخی شرایط - گربه یک گربه است، مهم نیست که به چه گونه ای تعلق دارد :) در اینجا تأیید ویدیویی برای شما وجود دارد.
وقتی این "تعمیم" مورد نیاز نیست، و برعکس، ما نیاز داریم که رفتار گونه ها متفاوت باشد، هر نوع رفتار متفاوتی دارد. به لطف چندشکلی، شما یک رابط واحد (مجموعه ای از روش ها) برای طیف گسترده ای از کلاس ها ایجاد می کنید. به همین دلیل از پیچیدگی برنامه ها کاسته می شود. حتی اگر برنامه را به 40 نوع گربه گسترش دهیم، باز هم ساده ترین رابط ممکن را خواهیم داشت - یک روش run()برای همه 40 گربه.
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION