مثال عملی از پلی مورفیسم

پرسیده شده
فعالیت 1405 روز پیش
دیده شده 1208 بار
1

سلام به همه دوستان 

یک مثال از پلی مورفیسم آماده کردم که به درک بهتر این مبحث کمک میکنه. 

 

برای شروع؛ یک بازی تفنگی رو در نظر بگیرین که یک سرباز و چندین اسلحه در این بازی داریم.

تمام اسلحه ها باید بتونند شلیک کنند ولی روش انجام این کار متفاوت هستش. 

 

( برای مثال بازی کلش آف کلنز رو در نظر بگیرید که کلی هیرو واسه حمله کردن داره مثل آرچر؛ بربر؛ دراگون و...

که همشون حمله میکنند ولی روش انجام این کار تو هرکدوم متفاوته )

 

خوب پس حالا که باید تمام اسلحه ها شلیک کنند ولی روش انجام کار متفاوته بهترین کار اینه که از interface استفاده بشه. 

 

interface gun {
  public function fire();
}

 

خوب حالا که اینترفیس رو تعریف کردیم؛ باید بیایم اسلحه هارو بسازیم.

دوتا اسلحه M4 و shotgun داریم

 

class m4 implements gun{

  public function fire(){
    return "M4 - - - - - - - - - >>> ";
  }

}

 

اسلحه شات گان



class shotgun implements gun{

  public function fire(){
    return "shotgun = = = = = = = = = = >>> ";
  }

}

 

شاید سوال پیش بیاد چرا اینترفیس ؟؟؟؟ چرا از ارث بری استفاده نشده

جواب اینه که اگه به متد fireدر اسلحه ها دقت کنید؛  کدهای متد fire در شات گان با m4 فرق داره.

پس این یعنی نمیشه یک بدنه مشترک برای هر 2 متد استفاده بشه 

 

 

و در آخر کلاس سرباز رو میسازیم:



class soldier {

  public function fireGun(gun $obj) {
    echo $obj->fire();
  }
}

 

 

و حالا تست  برنامه:


$m4 = new m4();
$shotgun = new shotgun();
$soldier = new soldier();

$soldier->fireGun($shotgun);

 

حالا به راحتی میشه؛ هر اسلحه ای که میخوایم به سربازمون بدیم

و حتی فردا روز اگه اسحله جدید به بازی اضافه شد؛ خیلی راحت میشه بدون نقض کردن اصول solid ( قسمت O ) اینکار رو انجام داد.

 

مراقب سربازتون باشید :دی

 

فایل پیوست

amir tavakolian
amir tavakolian

2 تیر 99

1
حذف شده

سلام ممنون از توضیح خوبتون

 

در مثال اسلحه کاری که همه اسلحه ها انجام میدن یکسانه (شلیک کردن) و این کارو هر اسلحه به روش متفاوتی انجام میده . شما به خروجی اشاره ای نکردی ؟

 

خروجی ، تیری است که وارد اسلحه می‌ کنیم. یعنی، نوع داده‌ای که اسلحه بر روی آن کار انجام میدهد! بدیهیه که اسلحه M۴ نمیتونه داده ای رو که  اسلحه shotgun باهاش کار میکنه شلیک کنه

 

دلیل اینکه ما اسلحه ها مختلفی میسازیم میتونه این باشه که میخواهیم با تیر های (داده های) مختلفی کار کنیم آیا در برنامه نویسی هم همینطوره ؟ یعنی دلیل ساخت اشیاء مختلف که یک کارو به روش های مختلف انجام میدن (اصل پولی مورفیسم) اینه که میخواهیم داده های مختلفی رو هندل کنیم؟

فایل پیوست

علی.

توسط

علی.

3 تیر 99