هدم التسلسل الهرمي (Collapse Hierarchy)

من موسوعة حسوب
مراجعة 11:29، 26 فبراير 2019 بواسطة جميل-بيلوني (نقاش | مساهمات) (مراجعة وتدقيق.)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)

المشكلة

في التسلسل الهرمي لصنف، يكون صنفٌ فرعي هو عمليًا نفس صنفه الأب.

الحل

دمج الصنف الفرعي والصنف الأب.

مثال

قبل إعادة التصميم

الصنف الفرعي Salesman هو عمليًّا نفس الصنف Employee له:

الصنفٌ الفرعي هو عمليًا نفس صنفه الفائق.
الصنفٌ الفرعي هو عمليًا نفس صنفه الأب.

بعد إعادة التصميم

دمج الصنف الفرعي Salesman في الصنف الأب:

دمج الصنف الفرعي والصنف الفائق.
دمج الصنف الفرعي والصنف الأب.

لم إعادة التصميم؟

قد يؤدي نمو البرنامج مع مرور الوقت إلى أن يصبح كلٌ من الصنف الفرعي والصنف الأب تقريبًا نفس الشيء. فتُزال ميزة من الصنف الفرعي، ويُنقل تابع إلى الصنف الأب. والآن لديك صنفين متشابهين.

فوائد تطبيق الحل

  • تقليل تعقيد البرنامج. تعني الأصناف الأقل أن عدد أشياء أقل قد تشغل الانتباه، وقلق أقل على أجزاء متحركة قابلة للتقسيم عند إجراء التغييرات التي تطرأ على الشيفرة في المستقبل.
  • يكون التنقل خلال الشيفرة أسهل عند تعريف التوابع في صنفٍ واحد في وقتٍ مبكر. لا تحتاج إلى تمشيط التسلسل الهرمي بأكمله للعثور على تابعٍ معين.

متى يترك هذا الحل؟

  • هل للتسلسل الهرمي للصنف الذي يُعاد تصميمه أكثر من صنف فرعي؟ وإذا كان كذلك، بعد اكتمال إعادة التصميم، يجب أن ترث الأصناف الفرعية المتبقية الصنف الذي ينهدم فيه التسلسل الهرمي.
  • ولكن ضع في اعتبارك أن هذا يمكن أن يؤدي إلى انتهاكات مبدأ ليسكوف للتعويض (Liskov substitution principle). على سبيل المثال، إذا كان البرنامج يحاكي شبكات النقل في المدينة وقمت بهدم الصنف الأب Transport عن طريق الخطأ في الصنف الفرعي Car، قد يصبح الصنف Plane هو وارث Car. تبًا!

آلية الحل

  1. حدد أي الصنفين هو الأسهل في الإزالة: الصنف الأب أم الصنف الفرعي.
  2. إذا قررت التخلص من الصنف الفرعي، استخدم سحب الحقل لأعلى وسحب التابع لأعلى. أمَّا إذا اخترت القضاء على الصنف الأب، استخدم دفع الحقل لأسفل ودفع التابع لأسفل.
  3. استبدل جميع استخدامات الصنف التي تحذفه بالصنف الذي ستنتقل إليه الحقول والتوابع. غالبًا ما تكون شيفرة لإنشاء الأصناف، وكتابة المتغير والمعامل، والتوثيق في تعليقات الشيفرة.
  4. احذف الصنف الفارغ.

انظر أيضًا

مصادر