نمط التفويض

في هندسة البرمجيات ، نمط التفويض هو نمط تصميم موجه للكائنات يسمح بتركيب الكائنات للوصول لإعادة استخدام الكود البرمجي نفسه مثل الميراث .

في التفويض، يعالج الكائن الطلب عن طريق التفويض إلى كائن ثانٍ ( المفوض ). المفوض هو كائن مساعد ، ولكن مع السياق الأصلي . باستخدام دعم التفويض المعتمد على اللغة، يتم ذلك ضمنيًا من خلال نفس (الكملة المفتاحية self او this) المفوض يشير إلى الكائن الأصلي (المرسل)، وليس المفوض (الكائن المتلقي). في نمط التفويض، يتم تحقيق ذلك عن طريق تمرير الكائن الأصلي بشكل صريح إلى المفوض، كقيمة للطريقة (قيمة للدالة البرمجية). [1] غالبًا ما يتم استخدام "التفويض" بشكل فضفاض للإشارة إلى المفهوم المميز لإعادة التوجيه ، حيث يستخدم الكائن المرسل ببساطة العضو المقابل في الكائن المتلقي، ويتم تقييمه في سياق الكائن المتلقي ، وليس الكائن الأصلي.

تستخدم هذه المقالة "إرسال الكائن/كائن الاستقبال" للكائنين، بدلاً من "استقبال الكائن/التفويض"، مع التركيز على الكائنات التي ترسل وتستقبل استدعاء التفويض، وليس الاستدعاء (استدعاء الدالة) الأصلي.

تعريف

في مقدمة كتاب عصابة الأربعة لجاما وآخرون. 1994، تم تعريف التفويض على النحو التالي:

«التفويض هو طريقة لجعل التركيب قويًا لإعادة الاستخدام مثل الوراثة [Lie86, JZ91]. في التفويض، يشترك "اثنان" من الكائنات في التعامل مع طلب: يفوض الكائن المستقبِل العمليات إلى مفوضه. هذا يشبه تأجيل الأصناف الفرعية للطلبات إلى الأصناف الأب. لكن مع الوراثة، يمكن لعملية موروثة دائمًا الإشارة إلى الكائن المستقبِل من خلال متغير العضو this في C++ وself في Smalltalk. لتحقيق نفس التأثير مع التفويض، يمرر المستقبل نفسه إلى المفوض ليتيح للعملية المفوضة الإشارة إلى المستقبِل.[2]»

مثال

في المثال أدناه (باستخدام لغة برمجة Kotlin )، يقوم الصنف (كلاس) Window بتفويض استدعاء area()(المساحة) إلى كائن المستطيل الداخلي الخاص بها (المفوض الخاص بها).

class Rectangle(val width: Int, val height: Int) {
    fun area() = width * height
}

class Window(val bounds: Rectangle) {
    // Delegation
    fun area() = bounds.area()
}

دعم اللغة

تتمتع بعض اللغات بدعم خاص للتفويض المدمج. على سبيل المثال، في لغة برمجة Kotlin ، يتم تفويض by المفتاحية [3] إلى واجهة كائن آخر:

interface ClosedShape {
  fun area(): Int
}
 
class Rectangle(val width: Int, val height: Int) : ClosedShape {
  override fun area() = width * height
}

// The ClosedShape implementation of Window delegates to that of the Rectangle that is bounds
class Window(private val bounds: Rectangle) : ClosedShape by bounds

أنظر أيضا

مراجع

  1. Gamma et al. 1994
  2. Gamma، Erich؛ Helm، Richard؛ Johnson، Ralph؛ Vlissides، John (1995). Design patterns : elements of reusable object-oriented software (ط. 14. print.). Reading, Mass.: Addison-Wesley. ص. 20. ISBN:0-201-63361-2.
  3. "Delegation - Kotlin Programming Language". Kotlin. مؤرشف من الأصل في 2023-06-08. اطلع عليه بتاريخ 2019-03-23.
  • أيقونة بوابةبوابة علم الحاسوب

روابط خارجية

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.