الاستخدام الخطأ لمبادئ البرمجة كائنية التوجه (Object-Orientation Abusers)
< Refactoring | smells
من مشاكل الشيفرات أيضًا التطبيقُ الخطأ وغير المكتمل لمبادئ البرمجة كائنية التوجّه (Object-Oriented)، مثل:
- استخدام الأصناف البديلة (alternative) ذات الواجهات (interfaces) المختلفة
- المشكلة: التطابق بالمهام ما بين صنفين ولكن بأسماءٍ مختلفةٍ لتوابعهما.
- الحل: حذف أحد الصنفين بعد تنفيذ إحدى الحلول الآتية: إعادة تسمية التوابع (methods) لتصبح متطابقةً بكافّة الأصناف البديلة، أو توحيد التوقيع (signature) وتعريف الاستخدام ما بين التوابع (إمّا بنقل التابع أو إضافة المعاملات أو دمج التوابع عبر المعاملات)، أو استخراج صنفٍ أعلى وجعلهما صنفين فرعيين له (إن كان التطابق جزئيًا).
- الوراثة الفائضة (refused bequest)
- المشكلة: استفادة الصنف الفرعيّ من القليل فقط ممّا ورِثه عن الصنف الأعلى من توابعَ وحقولٍ، لتبقى التوابع الأخرى غيرَ مُستخدَمةٍ أو قد يُعاد تعريفها مع الكثير من الاختلافات.
- الحل: تطبق إحدى الحلول التالية بناءً على حالة الاستخدام: تبديل الوراثة إلى تفويض، أو التخلُّص من حقول وتوابع الصنف الأعلى غير المستخدمة في الصنف الفرعيّ.
- الشكل المعقَّد لتعليمة switch
- المشكلة: وجود تركيبٍ معقَّدٍ لتعليمة
switch
أو عدّة تعليماتif
متسلسلة. - الحل: هنالك عدة حلول تختلف بحسب الحالة هي: عزل تعليمة
switch
ووضعها بالصنف الصحيح، أو تبديل شيفرة النوع إلى صنف فرعيّ أو تبديل شيفرة النوع إلى حالة/استراتيجيّة، أو تبديل التعليمات الشرطيّة إلى التعدّدية الشكليّة، أو تقسيم التابع ذي الاستدعاءات المتكررة إلى توابع أصغر، أو إنشاء كائن null.
- المشكلة: وجود تركيبٍ معقَّدٍ لتعليمة
- الحقول المؤقّتة (temporary fields)
- المشكلة: تحتوي الحقول المؤقَّتة على قيمٍ (وتُستخدَم وفقًا لها في الكائنات [objects]) ضمن شروطٍ مُحدَّدة، وتبقى فارغةً عند عدم تحقٌّق تلك الشروط.
- الحل: عزل الحقول المؤقتَّة -وكلِّ الشيفرات المرتبطة بها- في صنفٍ (class) مستقلٍ عبر إنشاءٍ صنفٍ جديدٍ ونقلها إليه، أو إنشاء كائن
null
(null object) واستخدامه بدلًا من الشيفرة الشرطيّة المُستخدمة للتحقُّق من وجود القيم بالحقول المؤقَّتة.