مقدمه

پیش از این راجع به Bad Smell و کاربرد آن در مهندسی نرم افزار صحبت کردیم "میراث بدردنخور" یکی از 22 نوع Bad Smell میباشد.

نحوه تشخیص و معرفی راه حل میراث بدردنخور
زیر کلاس ها تمام متد ها و فیلد های پدران را به ارث میبرند ولی وقتی چیزی که میگیرند را نخواهند چه باید کرد؟

تفکر سنتی میگوید  که این به معنی اشتباه بودن سلسله مراتب است شما باید یک کلاس مجاور دیگر درست کنید و با روش های پایین آوردن متد[1] و پایین آوردن فیلد[2] تمامی متد های استفاده نشده را به کلاس مجاور منتقل کنید  و به این طریق کلاس پدر تنها بخش مشترک را نگه میدارد معمولا این طور می شنوید که superclass ها باید abstract باشند.

حتما از اینکه گفته شد تفکر سنتی متوجه شدید که نمیخواهیم این مورد را همیشه توصیه کنیم. ما ساخت زیرکلاس را میسازیم تا یک مقدار قابلیت را همیشه داشته باشیم این یک روش کامل برای پیشبردن کار در صنعت است اما یک بو را نمیتوانید نادیده بگیریم معمولا این بو بوی قوی ای نیست توصیه این است که وقتی رد میراث موجب ابهام و مشکل میشود از توصیه سنتی استفاده کنید. اما معمولا کسی نیاز نیست این کار را کند 90 درصد مواقع این میراث بدردنخور ارزش پاکسازی ندارند.

بوی میراث بدرد نخور وقتی شدید میشود که کلاس زیر در حال استفاده از برخی قابلیت هاست اما نمیخواهد interface کلاس پدر را پشتیبانی کند. ما راجع به رد پیاده سازی بی تفاوت بودیم اما در مورد رد interface قضیه جدی تر میشود. در این حال به سلسله مراتب نچسبید و با روش جایگزینی همراهی با وراثت[3] مشکل را برطرف کنید.

[1] Push Down Method
[2] Push Down Field
[3] Replace Inheritance with Delegation