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

في التفويض، يعالج الكائن الطلب عن طريق التفويض إلى كائن ثانٍ ( المفوض ). المفوض هو كائن مساعد ، ولكن مع السياق الأصلي . باستخدام دعم التفويض المعتمد على اللغة، يتم ذلك ضمنيًا من خلال نفس (الكملة المفتاحية 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.

روابط خارجية عدل