• 1 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
نکاتی تکمیلی راجب Abstract و Interface
#1
تفاوت های کلاس Abstact با Interface

- هر دو در پیاده سازی الگوی polymorphism استفاده می شن.

- هر دو برای پیروی از یک شِمای و اسکلت ثابت هستند.

- هردو گزینه خوبی برای استاندارد سازی API داخلی هستن.

- هردو بهترین گزینه برای کار تیمی/گروهی هستن.

- هر دو قوانین استفاده از کلاس رو برای توسعه دهنده اجبار می کنن.

اما:
- متدهای کلاس Abstract میتونن حاوی کد/محتوا باشن تا یک عملیات رو برای همه کلاس های مصرف کننده فراهم کنن. ولی Interface ها نمی تونن.

- کلاس Abstract میتونه متد private داشته باشه(غیر abstract)، اما Interface نمی تونه.

- کلاس Abstract در واقع ترکیبی از Interface و کلاس هستش ولی Interface یک کلاس مجازی.

- کلاس Abstract قابلیت instantiation یا همون new شدن رو نداره. فقط میشه inheritance/extend کرد. و درطرف دیگر Interface رو فقط میشه implement کرد.

- یک کلاس فقط از یک کلاس Abstract می تونه inheritance بشه. (قدرتمند/extend بشه). ولی یک کلاس میتونه از صدهزار interface مختلف implement بگیره.

- یک Interface می تونه از چندین Interface مختلف extend بشه. اما کلاس Abstract نمی تونه(مگر توسط Trait)

- اینترفیس معمولاً در طراحی Listener ها، Callback ها و سازگارسازی کلاس های غیرمرتبط استفاده داره، اما abstract در همه جا.

- کلاس 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 هست.

نکته 4: برای موتور PHP، همه class, interface و trait ها یک نوع opcode دارن و به یک شکل(zend_class_entry) مدیریت میشن.
وبلاگ: Yousha.Blog.ir

صدام: "اگر با ارتش شاه ایران طرف بودیم، یک ماهه جنگ را می بردیم"
http://gulfnews.com/opinion/thinkers/ira...i-1.500997
  پاسخ
تشکر شده توسط : Maysam.m mohammadhosain M.J Reza Sylert mihan43


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان