الفرق بين المراجعتين ل"Refactoring/smells/oo abusers"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
(إنشاء الصفحة.)
 
ط
 
سطر 3: سطر 3:
 
# [[Refactoring/alternative classes with different interfaces|استخدام الأصناف البديلة (alternative) ذات الواجهات (interfaces) المختلفة]]
 
# [[Refactoring/alternative classes with different interfaces|استخدام الأصناف البديلة (alternative) ذات الواجهات (interfaces) المختلفة]]
 
#* '''المشكلة''': التطابق بالمهام ما بين صنفين ولكن بأسماءٍ مختلفةٍ لتوابعهما.
 
#* '''المشكلة''': التطابق بالمهام ما بين صنفين ولكن بأسماءٍ مختلفةٍ لتوابعهما.
#* '''الحل''': حذف أحد الصنفين بعد تنفيذ إحدى الحلول الآتية: [[Refactoring/rename method|إعادة تسمية التوابع (methods)]] لتصبح متطابقةً بكافّة الأصناف البديلة، أو توحيد التوقيع (signature) وتعريف الاستخدام ما بين التوابع (إمّا <nowiki/>[[Refactoring/move method|بنقل التابع]] أو <nowiki/>[[Refactoring/add parameter|إضافة المعاملات]] أو <nowiki/>[[Refactoring/parameterize method|دمج التوابع عبر المعاملات]])، أو [[Refactoring/extract superclass|استخراج صنفٍ أعلى]]<nowiki/>وجعلهما صنفين فرعيين له (إن كان التطابق جزئيًا).
+
#* '''الحل''': حذف أحد الصنفين بعد تنفيذ إحدى الحلول الآتية: [[Refactoring/rename method|إعادة تسمية التوابع (methods)]] لتصبح متطابقةً بكافّة الأصناف البديلة، أو توحيد التوقيع (signature) وتعريف الاستخدام ما بين التوابع (إمّا <nowiki/>[[Refactoring/move method|بنقل التابع]] أو <nowiki/>[[Refactoring/add parameter|إضافة المعاملات]] أو <nowiki/>[[Refactoring/parameterize method|دمج التوابع عبر المعاملات]])، أو [[Refactoring/extract superclass|استخراج صنفٍ أعلى]] <nowiki/>وجعلهما صنفين فرعيين له (إن كان التطابق جزئيًا).
#*
 
 
# [[Refactoring/refused bequest|الوراثة الفائضة (refused bequest)]]
 
# [[Refactoring/refused bequest|الوراثة الفائضة (refused bequest)]]
 
#* '''المشكلة''': استفادة الصنف الفرعيّ من القليل فقط ممّا ورِثه عن الصنف الأعلى من توابعَ وحقولٍ، لتبقى التوابع الأخرى غيرَ مُستخدَمةٍ أو قد يُعاد تعريفها مع الكثير من الاختلافات.
 
#* '''المشكلة''': استفادة الصنف الفرعيّ من القليل فقط ممّا ورِثه عن الصنف الأعلى من توابعَ وحقولٍ، لتبقى التوابع الأخرى غيرَ مُستخدَمةٍ أو قد يُعاد تعريفها مع الكثير من الاختلافات.

المراجعة الحالية بتاريخ 13:46، 26 فبراير 2019

من مشاكل الشيفرات أيضًا التطبيقُ الخطأ وغير المكتمل لمبادئ البرمجة كائنية التوجّه (Object-Oriented)، مثل:

  1. استخدام الأصناف البديلة (alternative) ذات الواجهات (interfaces) المختلفة
  2. الوراثة الفائضة (refused bequest)
    • المشكلة: استفادة الصنف الفرعيّ من القليل فقط ممّا ورِثه عن الصنف الأعلى من توابعَ وحقولٍ، لتبقى التوابع الأخرى غيرَ مُستخدَمةٍ أو قد يُعاد تعريفها مع الكثير من الاختلافات.
    • الحل: تطبق إحدى الحلول التالية بناءً على حالة الاستخدام: تبديل الوراثة إلى تفويض، أو التخلُّص من حقول وتوابع الصنف الأعلى غير المستخدمة في الصنف الفرعيّ.
  3. الشكل المعقَّد لتعليمة switch
  4. الحقول المؤقّتة (temporary fields)
    • المشكلة: تحتوي الحقول المؤقَّتة على قيمٍ (وتُستخدَم وفقًا لها في الكائنات [objects]) ضمن شروطٍ مُحدَّدة، وتبقى فارغةً عند عدم تحقٌّق تلك الشروط.
    • الحل: عزل الحقول المؤقتَّة -وكلِّ الشيفرات المرتبطة بها- في صنفٍ (class) مستقلٍ عبر إنشاءٍ صنفٍ جديدٍ ونقلها إليه، أو إنشاء كائن null‏ (null object) واستخدامه بدلًا من الشيفرة الشرطيّة المُستخدمة للتحقُّق من وجود القيم بالحقول المؤقَّتة.

انظر أيضًا

مصادر