الفرق بين المراجعتين لصفحة: «Refactoring/encapsulate field»

من موسوعة حسوب
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: تغليف الحقول (Encapsulate Field)}}</noinclude> == المشكلة == لديك حقل عام.<syntaxhighlight lang="java"> class Pers...'
 
سطر 47: سطر 47:


== مصادر ==
== مصادر ==
* [https://refactoring.guru/encapsulate-field صفحة توثيق تغليف الحقول في موقع refactoring.guru].
* [https://refactoring.guru/encapsulate-field صفحة توثيق تغليف الحقول في موقع refactoring.guru]. [[تصنيف:Refactoring]] [[تصنيف:Refactoring Techniques]] [[تصنيف:Refactoring Organizing Data]]
[[تصنيف:Refactoring]]
[[تصنيف:Refactoring Techniques]]
[[تصنيف:Refactoring Organizing Data]]y

مراجعة 15:03، 21 نوفمبر 2018

المشكلة

لديك حقل عام.

class Person {
  public String name;
}

الحل

جعل الحقل خاصا وإنشاء توابع وصول له.

class Person {
  private String name;

  public String getName() {
    return name;
  }
  public void setName(String arg) {
    name = arg;
  }
}

لم إعادة التصميم؟

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

فوائد تطبيق الحل

  • إذا كانت بيانات وسلوك مُكوِّن ما مترابطة بشكل وثيق وتكون في نفس المكان في الشيفرة البرمجية، فمن الأسهل بكثير الحفاظ علي هذا المُكوِّن وتطويره.
  • يمكن أيضا تنفيذ عمليات معقدة تتعلق بالوصول إلى حقول الكائنات.

متى يُترك هذا الحل؟

  • وفي بعض الحالات، يكون التغليف خيار سيء بسبب اعتبارات الأداء. هذه الحالات نادرة ولكن عندما تحدث، يصبح هذا الظرف هام جدًا.

فرضًا أن لديك محرر رسوم يحتوي على كائنات تمتلك إحداثيات x-‎ و y-‎. ومن غير المرجح أن تتغير هذه الحقول في المستقبل. أكثر من ذلك، ينطوي البرنامج علي مجموعة كبيرة من العديد من الكائنات المختلفة التي يوجد بها هذه الحقول. إذا الوصول إلى حقول الإحداثيات مباشرة يحفظ دورات وحدة المعالجة المركزية الهامة والتي يجب تناولها بطريقة أخرى عن طريق استدعاء توابع الوصول.

كمثال على هذه الحالة غير العادية، يوجد صنف Point في جافا. جميع الحقول من هذا الصنف عامة.

آلية الحل

  1. أنشئ مُتلقي وضابط للحقل.
  2. ابحث عن كافة استدعاءات الحقل. استبدل استلام قيمة الحقل بالمُتلقي، واستبدل إعدادات قيم الحقول الجديدة بالضابط.
  3. بعد استبدال كافة الاستدعاءات الحقل، اجعل الحقل خاصًا.

الخطوات التالية

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

انظر أيضًا

مصادر