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

شروع موضوع توسط Y.P.Y ‏11 اکتبر 2017 در انجمن مقالات و آموزش‌ها

  1. Y.P.Y

    Y.P.Y Well-Known Member

    ارسال‌ها:
    459
    تشکر شده:
    441
    امتیاز دستاورد:
    63
    - اینکه هر دو در پیاده سازی الگوی 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
     
    نوشته شده توسط Y.P.Y در ‏11 اکتبر 2017
    SajjadKhati از این پست تشکر کرده است.

به اشتراک بگذارید