Composition Over Inheritance

اما به چه معنا است؟

???????????: بین یک کلاس پایه و یک زیر کلاس رابطه "Is-a" بوجود می آورد. این یک راه سریع و شهودی برای به اشتراک گذاشتن رفتار بین کلاس ها است. اما نگهداری code base را دشوار میکند.

- کلاس های فرعی به پیاده سازی کلاس والد بستگی دارد. navigate سخت است.

- زیر کلاس ها همه رفتارهای کلاس والد را به ارث می برند، حتی اگر به آنها نیاز نداشته باشند.

- نادیده گرفتن(Overriding) رفتار کلاس والد می تواند اشکال ایجاد کند.


???????????: یک رابطه "Has-a" تشکیل میدهد.

ایده ساختن آبجکتها پیچیده با ترکیب آبجکتهای ساده تر است.

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

- تغییر رفتار در زمان اجرا با تغییر اجزای یک کلاس آسان است.

- اجزای کوچکتر و خودکفا راحت تر تغییر می کنند.

- کامپوننت ها مستقل هستند و از طریق interface های کاملاً تعریف شده با هم تعامل دارند و وابستگی آنها را کاهش می دهند.


مزایای ???????????:

- بهبود تست پذیری اجزای جداگانه.

- آسان برای تغییر اجزای مستقل.

- کپسولاسیون و اصل مسئولیت واحد(SRP) را ترویج می کند.


مضرات ???????????:

- افزایش تعداد اشیاء در یک سیستم.


ترجیح Composition بر Inheritance به این معنی نیست که وراثت یک مفهوم منسوخ است.
Inheritance مفید باقی می ماند، به خصوص زمانی که چندشکلی و سلسله مراتبی حوزه مسئله را مدل می کنند.

نظر شما چیست؟


همینطور این مقاله را بخوانید