شعار ConstructiCat
CodeBust.
تصفح القسم ▾

تنزيل التابع (Push Down Method).

المشكلة

هل السلوك المطبق في الفئة الفائقة يُسخدم من قِبل فئة فرعية واحدة فقط (أو عدد قليل منها)؟

الحل

انقل هذا السلوك إلى الفئات الفرعية.

##مثال

قبل
class Employee {
  double salesQuota() { return quota; }
}
class Salesman extends Employee {}
class Engineer extends Employee {}
بعد
class Employee {}
class Salesman extends Employee {
  double salesQuota() { return quota; }
}
class Engineer extends Employee {}

##لماذا نعيد الهيكلة

في البداية، كان الهدف من تابع معين أن يكون عاماً لجميع الفئات، ولكنه في الواقع يُسخدم في فئة فرعية واحدة فقط. يمكن أن يحدث هذا الموقف عندما تفشل الميزات المخطط لها في التحقق.

ويمكن أن تحدث مثل هذه المواقف أيضاً بعد الاستخراج الجزئي (أو الإزالة) للوظائف من التسلسل الهرمي للفئات، مما يترك تابعاً يُسخدم في فئة فرعية واحدة فقط.

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

##الفوائد

  • يحسن تماسك الفئات. حيث يقع التابع في المكان الذي تتوقع رؤيته فيه.

##كيفية إعادة الهيكلة

  1. صرح بالتابع في فئة فرعية وانسخ الكود الخاص به من الفئة الفائقة.

  2. أزل التابع من الفئة الفائقة.

  3. ابحث عن جميع الأماكن التي يُسخدم فيها التابع وتأكد من أنه يُستدعى من الفئة الفرعية المطلوبة.