نکاتی راجب Abstract و Interface

Y.P.Y

Well-Known Member
- اینکه هر دو در پیاده سازی الگوی 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 هست.

منبع: نکاتی تکمیلی راجب Abstract و Interface
 

جدیدترین ارسال ها

بالا