CodeGym /وبلاگ جاوا /Random-FA /چند شکلی در جاوا
John Squirrels
مرحله
San Francisco

چند شکلی در جاوا

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

   public void run() {
       System.out.println("Run!");
   }
}
اکنون سه کلاس ایجاد می کنیم که Cat را به ارث می برند : Lion ، Tiger و Cheetah .
public class Lion extends Cat {

   @Override
   public void run() {
       System.out.println("Lion runs at 80 km/h");
   }
}

public class Tiger extends Cat {

   @Override
   public void run() {
       System.out.println("Tiger runs at 60 km/h");
   }
}

public class Cheetah extends Cat {

   @Override
   public void run() {
       System.out.println("Cheetah runs at up to 120 km/h");
   }
}
بنابراین ما 3 کلاس داریم. بیایید موقعیتی را که می توانیم با آنها کار کنیم، به گونه ای مدل سازی کنیم که گویی آنها یک کلاس هستند. تصور کنید که یکی از گربه های ما بیمار است و به کمک دکتر دولیتل نیاز دارد. بیایید سعی کنیم یک کلاس Dolittle ایجاد کنیم که بتواند شیرها، ببرها و یوزپلنگ ها را شفا دهد.
public class Dolittle {

   public void healLion(Lion lion) {

       System.out.println("Lion is healthy!");
   }

   public void healTiger(Tiger tiger) {

       System.out.println("Tiger is healthy!");
   }

   public void healCheetah(Cheetah cheetah) {

       System.out.println("Cheetah is healthy!");
   }
}
به نظر می رسد مشکل حل شده است: کلاس نوشته شده و آماده رفتن است. اما اگر بخواهیم برنامه خود را تمدید کنیم چه خواهیم کرد؟ ما در حال حاضر فقط 3 نوع داریم: شیر، ببر و یوزپلنگ. اما بیش از 40 نوع گربه در جهان وجود دارد. تصور کنید چه اتفاقی می‌افتد اگر کلاس‌های جداگانه‌ای برای مانول‌ها، جگوارها، مین کون‌ها، گربه‌های خانگی و بقیه اضافه کنیم. نحوه استفاده از پلی مورفیسم - 2خود برنامه البته کار خواهد کرد، اما ما باید به طور مداوم روش های جدیدی را به کلاس Dolittle اضافه کنیم تا هر نوع گربه را درمان کنیم. در نتیجه، به اندازه های بی سابقه ای رشد خواهد کرد. اینجاست که پلی مورفیسم - «توانایی کار با چندین نوع به‌گونه‌ای که گویی یک نوع هستند» وارد می‌شود. ما برای انجام یک کار نیازی به ایجاد روش‌های بی‌شماری نداریم - درمان گربه. یک روش برای همه آنها کافی است:
public class Dolittle {

   public void healCat(Cat cat) {

       System.out.println("The patient is healthy!");
   }
}
متد healCat () می تواند اشیاء Lion ، Tiger و Cheetah را بپذیرد - همه آنها نمونه هایی از Cat هستند :
public class Main {

   public static void main(String[] args) {

       Dolittle dolittle = new Dolittle();

       Lion simba = new Lion();
       Tiger shereKhan = new Tiger();
       Cheetah chester = new Cheetah();

       dolittle.healCat(simba);
       dolittle.healCat(shereKhan);
       dolittle.healCat(chester);
   }
}
خروجی کنسول: بیمار سالم است! بیمار سالم است! بیمار سالم است! بنابراین کلاس Dolittle ما با انواع مختلف کار می کند که گویی آنها یک نوع هستند. حال بیایید به بخش دوم بپردازیم: "علاوه بر این، رفتار اشیا بسته به نوع آنها متفاوت خواهد بود". همه چیز خیلی ساده است. در طبیعت، هر گربه به روشی متفاوت می دود. حداقل آنها با سرعت های مختلف کار می کنند. در میان سه گربه ما، یوزپلنگ سریعترین است، در حالی که ببر و شیر کندتر می دوند. به عبارت دیگر رفتار آنها متفاوت است. چند شکلی کاری بیشتر از این است که ما از انواع مختلف به عنوان یکی استفاده کنیم. همچنین به ما امکان می دهد تفاوت های آنها را به خاطر بسپاریم و رفتار خاص هر یک از آنها را حفظ کنیم. مثال زیر این موضوع را نشان می دهد. فرض کنید که گربه های ما پس از بهبودی موفق، تصمیم گرفتند از دویدن کمی لذت ببرند. ما این را به کلاس Dolittle خود اضافه می کنیم :
public class Dolittle {

   public void healCat(Cat cat) {

       System.out.println("The patient is healthy!");
       cat.run();
   }
}
بیایید سعی کنیم همان کد را برای درمان سه حیوان اجرا کنیم:
public static void main(String[] args) {

   Dolittle dolittle = new Dolittle();

   Lion simba = new Lion();
   Tiger shereKhan = new Tiger();
   Cheetah chester = new Cheetah();

   dolittle.healCat(simba);
   dolittle.healCat(shereKhan);
   dolittle.healCat(chester);
}
و در اینجا نتایج به نظر می رسد: بیمار سالم است! شیر با سرعت 80 کیلومتر در ساعت می دود. بیمار سالم است! ببر با سرعت 60 کیلومتر در ساعت می دود. بیمار سالم است! یوزپلنگ با سرعت 120 کیلومتر در ساعت می‌دوید در اینجا ما به وضوح می‌بینیم که رفتار خاص اشیاء حفظ می‌شود، حتی اگر هر سه حیوان را پس از «تعمیم» به گربه به روش انتقال دادیم . به دلیل چندشکلی، جاوا به خوبی به خاطر می‌آورد که اینها به سادگی هر سه گربه نیستند. آنها یک شیر، یک ببر و یک یوزپلنگ هستند که هر کدام متفاوت می دوند. این مزیت اصلی پلی مورفیسم را نشان می دهد: انعطاف پذیری. هنگامی که ما نیاز به اجرای برخی از عملکردهای مشترک بین انواع مختلف داریم، شیرها، ببرها و یوزپلنگ ها به سادگی به "گربه" تبدیل می شوند. همه حیوانات متفاوت هستند، اما در برخی موقعیت ها گربه، صرف نظر از نوع آن، گربه است :) در اینجا چند تایید ویدیویی برای شما آورده شده است.
وقتی این "تعمیم" ناخواسته است و در عوض به رفتار هر گونه نیاز داریم، هر نوع کار خود را انجام می دهد. به لطف پلی مورفیسم، می توانید یک رابط واحد (مجموعه ای از روش ها) برای طیف گسترده ای از کلاس ها ایجاد کنید. این باعث می شود برنامه ها پیچیده تر شوند. حتی اگر برنامه را برای پشتیبانی از 40 نوع گربه گسترش دهیم، باز هم ساده‌ترین رابط را خواهیم داشت: یک روش run() برای همه 40 گربه. همچنین به ما اجازه می دهد تفاوت های آنها را به خاطر بسپاریم و رفتار خاص هر یک از آنها را حفظ کنیم. مثال زیر این موضوع را نشان می دهد. فرض کنید که گربه های ما پس از بهبودی موفق، تصمیم گرفتند از دویدن کمی لذت ببرند. ما این را به کلاس Dolittle خود اضافه می کنیم :
public class Dolittle {

   public void healCat(Cat cat) {

       System.out.println("The patient is healthy!");
       cat.run();
   }
}
بیایید سعی کنیم همان کد را برای درمان سه حیوان اجرا کنیم:
public static void main(String[] args) {

   Dolittle dolittle = new Dolittle();

   Lion simba = new Lion();
   Tiger shereKhan = new Tiger();
   Cheetah chester = new Cheetah();

   dolittle.healCat(simba);
   dolittle.healCat(shereKhan);
   dolittle.healCat(chester);
}
و در اینجا نتایج به نظر می رسد: بیمار سالم است! شیر با سرعت 80 کیلومتر در ساعت می دود. بیمار سالم است! ببر با سرعت 60 کیلومتر در ساعت می دود. بیمار سالم است! یوزپلنگ با سرعت 120 کیلومتر در ساعت می‌دوید در اینجا ما به وضوح می‌بینیم که رفتار خاص اشیاء حفظ می‌شود، حتی اگر هر سه حیوان را پس از «تعمیم» به گربه به روش انتقال دادیم . به دلیل چندشکلی، جاوا به خوبی به خاطر می‌آورد که اینها به سادگی هر سه گربه نیستند. آنها یک شیر، یک ببر و یک یوزپلنگ هستند که هر کدام متفاوت می دوند. این مزیت اصلی پلی مورفیسم را نشان می دهد: انعطاف پذیری. هنگامی که ما نیاز به اجرای برخی از عملکردهای مشترک بین انواع مختلف داریم، شیرها، ببرها و یوزپلنگ ها به سادگی به "گربه" تبدیل می شوند. همه حیوانات متفاوت هستند، اما در برخی موقعیت ها گربه، صرف نظر از نوع آن، گربه است :) در اینجا چند تایید ویدیویی برای شما آورده شده است.
وقتی این "تعمیم" ناخواسته است و در عوض به رفتار هر گونه نیاز داریم، هر نوع کار خود را انجام می دهد. به لطف پلی مورفیسم، می توانید یک رابط واحد (مجموعه ای از روش ها) برای طیف گسترده ای از کلاس ها ایجاد کنید. این باعث می شود برنامه ها پیچیده تر شوند. حتی اگر برنامه را برای پشتیبانی از 40 نوع گربه گسترش دهیم، باز هم ساده‌ترین رابط را خواهیم داشت: یک روش run() برای همه 40 گربه.
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION