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

کلاس های جایگزین با interface متفاوت

روش تغییر نام متد را بر روی هر تعداد متد ی که کار یکسان را با امضای متد مختلف انجام میدهند اعمال کنید. معمولا این کافی نیست و در بعضی حالات کلاس ها به اندازه کافی کار انجام نمیدهد از روش انتقال متد به قدری استفاده کنید که پروتکل ها یکسان شود. ممکن است نیاز شود به شکل اضافه کد ها را انتقال دهید تا به این هدف برسید و بعد شما میتوانید از روش استخراج کلاس پدر[1] استفاده کنید.

کلاس کتابخانه ناتمام Incomplete Library Class

سازندگان کلاس های کتابخانه ای ندرتا همه چیز را وقف می کنند. ما به این دلیل آنها را سرزنش نمیکنیم پس از ساخت یک طراحی میتوان کامل به آن پی برد و سازندگان کلاس هایی کتاب خانه ای شغل های سختی دارند. مشکل از آنجا بوجود می آیند که معمولا فرم اشتباه و یا غیر ممکن است که یک کلاس کتابخانه ای را تغییر دهیم و روش هایی مانند انتقال متد را روی آن انجام دهیم.

اما ابزار هایی نیز داریم که در این موقعیت مطرح میشوند، اگر یک تعداد تابع است که آرزو می کنید کلاس کتابخانه ای شما آنها را داشت میتوانید از معرفی متد خارجی[2] استفاده کنید اگر به قابلیت های خیلی بیشتر نیاز دارید روش معرفی کنش محلی[3] را به کار ببندید.

[1] Extract Superclass
[2] Introduce Foreign Method
[3] Introduce Local Extension