🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ amir tavakolian
مثال عملی از پلی مورفیسم
جامعه پی اچ پی ایجاد شده در ۰۲ تیر ۱۳۹۹

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

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

 

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

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

 

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

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

 

خوب پس حالا که باید تمام اسلحه‌ها شلیک کنند ولی روش انجام کار متفاوته بهترین کار اینه که از 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 ) اینکار رو انجام داد.

 

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

 

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

 

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

 

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

 

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

علی ۰۳ تیر ۱۳۹۹، ۰۵:۳۲