Refactoring/techniques/dealing with generalization

من موسوعة حسوب
< Refactoring‏ | techniques
مراجعة 18:43، 27 فبراير 2019 بواسطة جميل-بيلوني (نقاش | مساهمات) (إنشاء الصفحة.)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)
اذهب إلى التنقل اذهب إلى البحث

يملك التجريد (Abstraction) تقنيات إعادة التصميم الخاصة به والمرتبطة بشكل أساسي بوظيفة النقل على طول التسلسل الهرمي لوراثة الصنف (class inheritance hierarchy)، وبإنشاء أصناف وواجهات جديدة، وبتبديل التفويض مكان الوراثة أو العكس. تقنيات هذا القسم هي:

  1. استخراج الأصناف الفرعية (Extract Subclass)
    • المشكلة: يكون للصنف ميزات تستعمل فقط في حالات معينة.
    • الحل: إنشاء صنف فرعي واستخدامه في هذه الحالات.
  2. استخراج الأصناف الفائقة (Extract Superclass)
    • المشكلة: وجود صنفين لهما حقول وتوابع مشتركة.
    • الحل: إنشاء صنف أب مشترك لهما ونقل جميع الحقول والتوابع المتطابقة إليه.
  3. استخرج الواجهات (Extract Interface)
    • المشكلة: يستخدم العديد من العملاء نفس الجزء من واجهة الصنف. حالة أخرى: عندما يوجد نفس الجزء من الواجهة في صنفين.
    • الحل: نقل هذا الجزء المتطابق إلى الواجهة الخاصة به.
  4. هدم التسلسل الهرمي (Collapse Hierarchy)
    • المشكلة: في التسلسل الهرمي لصنف، يكون صنفٌ فرعي هو عمليًا نفس صنفه الأب.
    • الحل: دمج الصنف الفرعي والصنف الأب.
  5. تكوين قالب تابع (Form Template Method)
    • المشكلة: تُنفِّذ الأصناف الفرعية خوارزميات تحتوي على خطوات مماثلة في نفس الترتيب.
    • الحل: نقل بنية الخوارزمية والخطوات المتطابقة إلى الصنف الأب، وترك تنفيذ الخطوات المختلفة في الأصناف الفرعية.
  6. استبدال التوريث بالتفويض (Replace Inheritance with Delegation)
    • المشكلة: يستخدم صنف فرعي جزءًا فقط من توابع صنفه الأب (أو من غير الممكن وراثة بيانات الصنف الأب).
    • الحل: إنشاء حقل ووضع كائن صنف أب فيه، وتفويض التوابع إلى كائن الصنف الأب، والتخلص من التوريث.
  7. استبدال التفويض بالتوريث (Replace Delegation with Inheritance)
    • المشكلة: يحتوي الصنف على العديد من التوابع البسيطة التي تفوِّض إلى كل التوابع في صنفٍ آخر.
    • الحل: جعل الصنف مفوِّض وارث، الأمر الذي يجعل تابع التفويض غير ضروري.
  8. سحب الحقل لأعلى (Pull Up Field)
    • المشكلة: يحتوي صنفان على نفس الحقل.
    • الحل: إزالة الحقل من الأصناف الفرعية ونقله إلى الصنف الأعلى.
  9. سحب التابع لأعلى (Pull Up Method)
    • المشكلة: تحتوي الأصناف الفرعية على توابع تؤدي نفس العمل.
    • الحل: جعل التوابع متطابقة ثم نقلها إلى الصنف الأعلى ذي الصلة.
  10. سحب متن المُنشِئ لأعلى (Pull Up Constructor Body)
    • المشكلة: تحتوي الأصناف الفرعية على مُنشِئات لها شيفرة متطابقة في أغلبها.
    • الحل: إنشاء مُنشئ صنف أب ونقل الشيفرة المماثلة في الأصناف الفرعية إليه. استدعاء مُنشئ الصنف الأب في مُنشِئات الصنف الفرعي.
  11. دفع التابع لأسفل (Push Down Method)
    • المشكلة: هل السلوك المُنفَّذ في الصنف الأب مُستخدمٌ في صنف فرعي واحد فقط (أو أكثر)؟
    • الحل: نقل هذا السلوك إلى الأصناف الفرعية.
  12. دفع الحقل لأسفل (Push Down Field)
    • المشكلة: هل يستخدم الحقل في بعض الأصناف الفرعية فقط؟
    • الحل: نقل الحقل إلى هذه الأصناف الفرعية.

انظر أيضًا

مصادر