الفرق بين المراجعتين لصفحة: «Refactoring/extract superclass»
Khaled-yassin (نقاش | مساهمات) طلا ملخص تعديل |
جميل-بيلوني (نقاش | مساهمات) |
||
(1 مراجعات متوسطة بواسطة نفس المستخدم غير معروضة) | |||
سطر 4: | سطر 4: | ||
== الحل == | == الحل == | ||
إنشاء صنف | إنشاء صنف أب مشترك لهما ونقل جميع الحقول والتوابع المتطابقة إليه. | ||
=== مثال === | === مثال === | ||
==== قبل إعادة التصميم ==== | ==== قبل إعادة التصميم ==== | ||
[[ملف:Extract Superclass - Before.png|alt=وجود صنفين لهما حقول وتوابع مشتركة.|بدون|تصغير|وجود صنفين لهما حقول وتوابع مشتركة.]] | يملك الصنفين <code>Department</code> و <code>Employee</code> توابعًا مشتركة فيما بينهما:[[ملف:Extract Superclass - Before.png|alt=وجود صنفين لهما حقول وتوابع مشتركة.|بدون|تصغير|وجود صنفين لهما حقول وتوابع مشتركة.]] | ||
==== بعد إعادة التصميم ==== | ==== بعد إعادة التصميم ==== | ||
[[ملف:Extract Superclass - After.png|alt=إنشاء صنف فائق مشترك لهما ونقل جميع الحقول والتوابع المتطابقة إليه.|بدون|تصغير|إنشاء صنف فائق مشترك لهما ونقل جميع الحقول والتوابع المتطابقة إليه.]] | إنشاء صنف أب لهما يدعى <code>Party</code> يحوي التوابع المشتركة:[[ملف:Extract Superclass - After.png|alt=إنشاء صنف فائق مشترك لهما ونقل جميع الحقول والتوابع المتطابقة إليه.|بدون|تصغير|إنشاء صنف فائق مشترك لهما ونقل جميع الحقول والتوابع المتطابقة إليه.]] | ||
== لم إعادة التصميم؟ == | == لم إعادة التصميم؟ == | ||
يحدث نوع من تكرار الشيفرة عندما يؤدي صنفان نفس المهام بنفس الطريقة أو بطرق مختلفة. وتتيح الكائنات آلية داخلية لتبسيط مثل هذه الحالات عن طريق التوريث. ولكن في كثير من الأحيان يبقى هذا التشابه غير ملحوظ حتى وقت إنشاء الأصناف، مما يستلزم إنشاء هيكل التوريث في وقت لاحق. | يحدث نوع من تكرار الشيفرة عندما يؤدي صنفان نفس المهام بنفس الطريقة أو بطرق مختلفة. وتتيح الكائنات آلية داخلية لتبسيط مثل هذه الحالات عن طريق التوريث. ولكن في كثير من الأحيان يبقى هذا التشابه غير ملحوظ حتى وقت إنشاء الأصناف، مما يستلزم إنشاء هيكل التوريث في وقت لاحق. | ||
سطر 18: | سطر 18: | ||
* إزالة الشيفرة البرمجية المكررة. ويصبح تواجد الحقول والتوابع المشتركة في مكان واحد فقط. | * إزالة الشيفرة البرمجية المكررة. ويصبح تواجد الحقول والتوابع المشتركة في مكان واحد فقط. | ||
== متى | == متى يترك هذا الحل؟ == | ||
* لا يمكنك تطبيق هذه التقنية على الأصناف التي لها صنف | * لا يمكنك تطبيق هذه التقنية على الأصناف التي لها صنف أب بالفعل. | ||
== آلية الحل == | == آلية الحل == | ||
# أنشئ | # أنشئ صنفَ أبٍ مجرد. | ||
# استخدم تقنيات [[Refactoring/pull up field|سحب الحقل لأعلى]] و<nowiki/>[[Refactoring/pull up method|سحب التابع لأعلى]] و<nowiki/>[[Refactoring/pull up constructor body|سحب متن المُنشئ لأعلى]] لنقل الوظائف المشتركة إلى | # استخدم تقنيات [[Refactoring/pull up field|سحب الحقل لأعلى]] و<nowiki/>[[Refactoring/pull up method|سحب التابع لأعلى]] و<nowiki/>[[Refactoring/pull up constructor body|سحب متن المُنشئ لأعلى]] لنقل الوظائف المشتركة إلى ذلك الصنف الأب. ابدأ بالحقول، إذ أنه بالإضافة إلى الحقول المشتركة سوف تحتاج إلى نقل الحقول التي تستخدم في التوابع المشتركة. | ||
# ابحث عن أماكن في شيفرة العميل حيث يمكن استبدال استخدام الأصناف الفرعية بالصنف الجديد (مثل في حالة تعريف النوع). | # ابحث عن أماكن في شيفرة العميل حيث يمكن استبدال استخدام الأصناف الفرعية بالصنف الجديد (مثل في حالة تعريف النوع). | ||
سطر 34: | سطر 34: | ||
[[تصنيف:Refactoring]] | [[تصنيف:Refactoring]] | ||
[[تصنيف:Refactoring Techniques]] | [[تصنيف:Refactoring Techniques]] | ||
[[تصنيف:Dealing with Generalization]] | [[تصنيف:Refactoring Dealing with Generalization]] |
المراجعة الحالية بتاريخ 12:10، 2 مارس 2019
المشكلة
وجود صنفين لهما حقول وتوابع مشتركة.
الحل
إنشاء صنف أب مشترك لهما ونقل جميع الحقول والتوابع المتطابقة إليه.
مثال
قبل إعادة التصميم
يملك الصنفين Department
و Employee
توابعًا مشتركة فيما بينهما:
بعد إعادة التصميم
إنشاء صنف أب لهما يدعى Party
يحوي التوابع المشتركة:
لم إعادة التصميم؟
يحدث نوع من تكرار الشيفرة عندما يؤدي صنفان نفس المهام بنفس الطريقة أو بطرق مختلفة. وتتيح الكائنات آلية داخلية لتبسيط مثل هذه الحالات عن طريق التوريث. ولكن في كثير من الأحيان يبقى هذا التشابه غير ملحوظ حتى وقت إنشاء الأصناف، مما يستلزم إنشاء هيكل التوريث في وقت لاحق.
فوائد تطبيق الحل
- إزالة الشيفرة البرمجية المكررة. ويصبح تواجد الحقول والتوابع المشتركة في مكان واحد فقط.
متى يترك هذا الحل؟
- لا يمكنك تطبيق هذه التقنية على الأصناف التي لها صنف أب بالفعل.
آلية الحل
- أنشئ صنفَ أبٍ مجرد.
- استخدم تقنيات سحب الحقل لأعلى وسحب التابع لأعلى وسحب متن المُنشئ لأعلى لنقل الوظائف المشتركة إلى ذلك الصنف الأب. ابدأ بالحقول، إذ أنه بالإضافة إلى الحقول المشتركة سوف تحتاج إلى نقل الحقول التي تستخدم في التوابع المشتركة.
- ابحث عن أماكن في شيفرة العميل حيث يمكن استبدال استخدام الأصناف الفرعية بالصنف الجديد (مثل في حالة تعريف النوع).