استبدال الوراثة بالتفويض.
لديك فئة فرعية تستخدم جزءًا فقط من دوال فئتها الفائقة (أو لا يمكنها وراثة بيانات الفئة الفائقة).
قم بإنشاء حقل وضع فيه كائن الفئة الفائقة، وفوّض الدوال إلى كائن الفئة الفائقة، وتخلص من الوراثة.
##Example


##Why Refactor
يمكن أن يؤدي استبدال الوراثة بالتركيب (composition) إلى تحسين تصميم الفئة بشكل كبير إذا كان:
-
الفئة الفرعية الخاصة بك تنتهك مبدأ لiskov للاستبدال (Liskov substitution principle)، أي إذا تم تنفيذ الوراثة فقط لدمج الكود المشترك وليس لأن الفئة الفرعية هي امتداد للفئة الفائقة.
-
الفئة الفرعية تستخدم جزءًا فقط من دوال الفئة الفائقة. في هذه الحالة، فالمسألة مسألة وقت فقط قبل أن يقوم شخص ما باستدعاء دالة في الفئة الفائقة لم يكن من المفترض استدعاؤها.
في جوهرها، تقوم تقنية إعادة الهيكلة هذه بتقسيم الفئتين وتجعل الفئة الفائقة مساعدة للفئة الفرعية وليست أبًا لها. وبدلاً من وراثة جميع دوال الفئة الفائقة، ستكون لدى الفئة الفرعية فقط الدوال اللازمة للتفويض إلى دوال كائن الفئة الفائقة.
##Benefits
-
لا تحتوي الفئة على أي دوال غير ضرورية موروثة من الفئة الفائقة (superclass).
-
يمكن وضع كائنات مختلفة بتطبيقات مختلفة في حقل التفويض. وبذلك تحصل على نمط تصميم الاستراتيجية (Strategy).
##How to Refactor
-
أنشئ حقلًا في الفئة الفرعية للاحتفاظ بالفئة الفائقة. في المرحلة الأولية، ضع الكائن الحالي فيه.
-
قم بتغيير دوال الفئة الفرعية بحيث تستخدم كائن الفئة الفائقة بدلاً من
this. -
بالنسبة للدوال الموروثة من الفئة الفائقة والتي يتم استدعاؤها في كود العميل (client code)، أنشئ دوال تفويض بسيطة في الفئة الفرعية.
-
أزل تصريح الوراثة من الفئة الفرعية.
-
قم بتغيير كود تهيئة الحقل الذي يتم تخزين الفئة الفائقة السابقة فيه عن طريق إنشاء كائن جديد.