استبدال قيمة البيانات بكائن.
فئة (أو مجموعة فئات) تحتوي على حقل بيانات. هذا الحقل له سلوكه الخاص وبياناته المرتبطة به.
أنشئ فئة جديدة، ووضع الحقل القديم وسلوكه في هذه الفئة، ثم تخزين كائن الفئة في الفئة الأصلية.
##مثال
class Order {
private String customer;
}class Order {
private Customer customer;
String getCustomerName() {
return customer.getName();
}
}
class Customer {
private String name;
String getName() { return name; }
}##لماذا نعيد الهيكلة
تعتبر إعادة الهيكلة هذه في الأساس حالة خاصة من استخلاص الفئة. ما يجعلها مختلفة هو سبب إعادة الهيكلة.
في استخلاص الفئة، لدينا فئة واحدة مسؤولة عن أشياء مختلفة ونريد تقسيم مسؤولياتها.
مع استبدال قيمة البيانات بكائن، لدينا حقل أولي (رقم، سلسلة نصية، إلخ) لم يعد بسيطًا للغاية بسبب نمو البرنامج، ولديه الآن بيانات وسلوكيات مرتبطة به. من ناحية، لا يوجد شيء مخيف في هذه الحقول بحد ذاتها. ومع ذلك، يمكن أن تكون هذه المجموعة من الحقول والسلوكيات موجودة في عدة فئات في نفس الوقت، مما يؤدي إلى إنشاء كود مكرر.
لذلك، نقوم بإنشاء فئة جديدة وننقل إليها كلاً من الحقل والبيانات والسلوكيات ذات الصلة.
##الفوائد
- يحسن الترابط داخل الفئات. توجد البيانات والسلوكيات ذات الصلة داخل فئة واحدة.
##كيفية إعادة الهيكلة
قبل البدء في إعادة الهيكلة، تحقق مما إذا كانت هناك مراجع مباشرة للحقل من داخل الفئة. إذا كان الأمر كذلك، فاستخدم التغليف الذاتي للحقل لإخفائه في الفئة الأصلية.
-
أنشئ فئة جديدة وانسخ حقولك ودوال الجلب (getter) ذات الصلة إليها. بالإضافة إلى ذلك، أنشئ بانيًا (constructor) يقبل القيمة البسيطة للحقل. لن تحتوي هذه الفئة على دالة تعيين (setter) لأن كل قيمة حقل جديدة يتم إرسالها إلى الفئة الأصلية ستنشئ كائن قيمة جديدًا.
-
في الفئة الأصلية، قم بتغيير نوع الحقل إلى الفئة الجديدة.
-
في دالة الجلب بالفئة الأصلية، قم باستدعاء دالة الجلب الخاصة بالكائن المرتبط.
-
في دالة التعيين، أنشئ كائن قيمة جديدًا. قد تحتاج أيضًا إلى إنشاء كائن جديد في الباني إذا كانت هناك قيم أولية قد تم تعيينها للحقل سابقًا هناك.