PDA

View Full Version : نکاتی راجب Abstract و Interface



Yousha
چهارشنبه 19 مهر 1396, 10:24 صبح
- اینکه هر دو در پیاده سازی الگوی polymorphism استفاده می شن.
- هر دو برای پیروی از یک شِماتیک و اسکلت ثابت هستند.
- هردو گزینه خوبی برای استاندارد سازی API داخلی هستن.
- هردو بهترین گزینه برای کار تیمی/گروهی هستن.
- هر دو قوانین استفاده از کلاس رو برای توسعه دهنده اجبار می کنن.
- کلاس Abstract در واقع ترکیبی از Interface و کلاس هستش اما Interface یک کلاس مجازی Abstract هستش.
- متدهای کلاس Abstract میتونن حاوی کد/محتوا باشن تا یک عملیات رو برای همه کلاس های مصرف کننده فراهم کنن. اما Interface نمی تونه.
- کلاس Abstract قابلیت instantiation یا همون new شدن رو نداره. فقط میشه inheritance/extend کردش.
- یک کلاس فقط از یک کلاس Abstract می تونه inheritance بشه. (قدرتمند/extend بشه)
- یک کلاس(از هر نوعی) میتونه از یک کلاس extend بشه و از صدهزار interface مختلف implement بگیره.
- یک Interface می تونه از چندین Interface مختلف extend بشه.
- اینترفیس معمولاً در طراحی Listener ها، Callback ها و سازگارسازی کلاس های غیرمرتبط استفاده داره، اما abstract در همه جا.
- کلاس Abstract میتونه متد private داشته باشه(غیر abstract)، اما Interface نمی تونه.
- کلاس Abstract میتونه فیلد، const و متد داشته باشه. اما Interface فقط می تونه متد(خالی) و const داشته باشه.
- یک کلاس معمولی(concrete) باید همه متدهای اینترفیس رو implement کنه، اما در کلاس Abstract اجباری نیست.
- سطوح دسترسی متدها و فیلدها در Abstract میتونه public, private, protected باشه. اما در Interface فقط public میتونه باشه.
نکته: از PHP 5.3 به بعد مجاز به استفاده از static abstract هستید.
نکته 2: هنگام طراحی کلاسهای utility یا full static، استفاده از کلاس Abstract گزینه مناسبیه.
نکته 3: معمولاً هنگام طراحی متدهای خالی(stubs)، استفاده از Interface گزینه مناسب تری نسبت به Abstract هست.

منبع: https://forum.iranphp.org/showthread.php?tid=11861