الفرق بين المراجعتين ل"Refactoring/push down method"
Khaled-yassin (نقاش | مساهمات) (أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: دفع التابع لأسفل (Push Down Method)}}</noinclude> == المشكلة == هل السلوك المُنفَّذ في الصنف ا...') |
جميل-بيلوني (نقاش | مساهمات) ط (مراجعة وتدقيق.) |
||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE: دفع التابع لأسفل (Push Down Method)}}</noinclude> | <noinclude>{{DISPLAYTITLE: دفع التابع لأسفل (Push Down Method)}}</noinclude> | ||
== المشكلة == | == المشكلة == | ||
− | هل السلوك المُنفَّذ في الصنف | + | هل السلوك المُنفَّذ في الصنف الأب مُستخدمٌ في صنف فرعي واحد فقط (أو أكثر)؟ |
== الحل == | == الحل == | ||
سطر 9: | سطر 9: | ||
==== قبل إعادة التصميم ==== | ==== قبل إعادة التصميم ==== | ||
− | [[ملف:Push Down Method - Before.png|بديل=التابع الموجود في الصنف الفائق مُستخدم في صنف فرعي واحد فقط.|بدون|تصغير|التابع الموجود في الصنف | + | التابع <code>()getFuel</code> الموجود في الصنف <code>Unit</code> الأب مُستخدم في صنف فرعي واحد فقط الذي هو <code>Tank</code>:[[ملف:Push Down Method - Before.png|بديل=التابع الموجود في الصنف الفائق مُستخدم في صنف فرعي واحد فقط.|بدون|تصغير|التابع الموجود في الصنف الأب مُستخدم في صنف فرعي واحد فقط.]] |
==== بعد إعادة التصميم ==== | ==== بعد إعادة التصميم ==== | ||
− | [[ملف:Push Down Method - After.png|بديل=نقل هذا التابع إلى الصنف الفرعي الذي يُستخدم فيه.|بدون|تصغير|نقل هذا التابع إلى الصنف الفرعي الذي يُستخدم فيه.]] | + | نقل التابع <code>()getFuel</code> من الصنف الأب إلى الصنف الفرعي المستخدم فيه:[[ملف:Push Down Method - After.png|بديل=نقل هذا التابع إلى الصنف الفرعي الذي يُستخدم فيه.|بدون|تصغير|نقل هذا التابع إلى الصنف الفرعي الذي يُستخدم فيه.]] |
== لم إعادة التصميم؟ == | == لم إعادة التصميم؟ == | ||
− | في البداية كان من المفترض أن يكون | + | في البداية كان من المفترض أن يكون تابعٌ معينٌ عامًا لجميع الأصناف ولكنه لم يستخدم في الواقع إلا في صنف فرعي واحد. ويمكن أن تحدث هذه الحالة عندما لا تتحقق المميزات المخطط لها. |
ويمكن أن تحدث مثل هذه الحالات أيضًا بعد الاستخراج الجزئي (أو إزالة) الوظائف من التسلسل الهرمي للصنف، مما يترك تابعًا مُستخدمًا في صنفٍ فرعيٍ واحدٍ فقط. | ويمكن أن تحدث مثل هذه الحالات أيضًا بعد الاستخراج الجزئي (أو إزالة) الوظائف من التسلسل الهرمي للصنف، مما يترك تابعًا مُستخدمًا في صنفٍ فرعيٍ واحدٍ فقط. | ||
− | إذا كنت ترى تابعًا مطلوبًا من قِبَل أكثر من صنفٍ فرعيٍ واحد، ولكن ليس كل الأصناف الفرعية، قد يكون من المفيد إنشاء صنف فرعي وسيط ونقل التابع إليه. يسمح هذا بتجنب تكرار الشيفرة الذي من شأنه أن ينتج عن دفع التابع | + | إذا كنت ترى تابعًا مطلوبًا من قِبَل أكثر من صنفٍ فرعيٍ واحد، ولكن ليس كل الأصناف الفرعية، قد يكون من المفيد إنشاء صنف فرعي وسيط ونقل التابع إليه. يسمح هذا بتجنب تكرار الشيفرة الذي من شأنه أن ينتج عن دفع التابع للأسفل لجميع الأصناف الفرعية. |
== فوائد تطبيق الحل == | == فوائد تطبيق الحل == | ||
سطر 25: | سطر 25: | ||
== آلية الحل == | == آلية الحل == | ||
− | # عرِّف التابع في صنف فرعي وانسخ شيفرته من الصنف | + | # عرِّف التابع في صنف فرعي وانسخ شيفرته من الصنف الأب. |
− | # أزِل التابع من الصنف | + | # أزِل التابع من الصنف الأب. |
# ابحث عن كل الأماكن التي يستخدم فيها التابع وتأكد من أنه يُستدعى من الصنف الفرعي اللازم. | # ابحث عن كل الأماكن التي يستخدم فيها التابع وتأكد من أنه يُستدعى من الصنف الفرعي اللازم. | ||
سطر 39: | سطر 39: | ||
[[تصنيف:Refactoring]] | [[تصنيف:Refactoring]] | ||
[[تصنيف:Refactoring Techniques]] | [[تصنيف:Refactoring Techniques]] | ||
− | [[تصنيف:Dealing with Generalization]] | + | [[تصنيف:Refactoring Dealing with Generalization]] |
المراجعة الحالية بتاريخ 09:56، 26 فبراير 2019
المشكلة
هل السلوك المُنفَّذ في الصنف الأب مُستخدمٌ في صنف فرعي واحد فقط (أو أكثر)؟
الحل
نقل هذا السلوك إلى الأصناف الفرعية.
مثال
قبل إعادة التصميم
التابع ()getFuel
الموجود في الصنف Unit
الأب مُستخدم في صنف فرعي واحد فقط الذي هو Tank
:
بعد إعادة التصميم
نقل التابع ()getFuel
من الصنف الأب إلى الصنف الفرعي المستخدم فيه:
لم إعادة التصميم؟
في البداية كان من المفترض أن يكون تابعٌ معينٌ عامًا لجميع الأصناف ولكنه لم يستخدم في الواقع إلا في صنف فرعي واحد. ويمكن أن تحدث هذه الحالة عندما لا تتحقق المميزات المخطط لها.
ويمكن أن تحدث مثل هذه الحالات أيضًا بعد الاستخراج الجزئي (أو إزالة) الوظائف من التسلسل الهرمي للصنف، مما يترك تابعًا مُستخدمًا في صنفٍ فرعيٍ واحدٍ فقط.
إذا كنت ترى تابعًا مطلوبًا من قِبَل أكثر من صنفٍ فرعيٍ واحد، ولكن ليس كل الأصناف الفرعية، قد يكون من المفيد إنشاء صنف فرعي وسيط ونقل التابع إليه. يسمح هذا بتجنب تكرار الشيفرة الذي من شأنه أن ينتج عن دفع التابع للأسفل لجميع الأصناف الفرعية.
فوائد تطبيق الحل
- يُحسِّن من تماسك الصنف. يتواجد التابع حيث يكون متوقعًا أن يكون.
آلية الحل
- عرِّف التابع في صنف فرعي وانسخ شيفرته من الصنف الأب.
- أزِل التابع من الصنف الأب.
- ابحث عن كل الأماكن التي يستخدم فيها التابع وتأكد من أنه يُستدعى من الصنف الفرعي اللازم.
انظر أيضًا
- سحب التابع لأعلى (Pull Up Method).
- دفع الحقل لأسفل (Push Down Field).
- استخراج الأصناف الفرعية (Extract Subclass).
- الوراثة الفائضة (Refused Bequest).