डेलिगेशन पैटर्न: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
 
(8 intermediate revisions by 6 users not shown)
Line 1: Line 1:
[[सॉफ्टवेयर इंजीनियरिंग]] में, डेलिगेशन पैटर्न एक [[ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग]] है। ऑब्जेक्ट-ओरिएंटेड [[डिज़ाइन पैटर्न]] जो [[वस्तु रचना]] को विरासत (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) के समान [[कोड पुन: उपयोग]] करने की अनुमति देता है।
[[सॉफ्टवेयर इंजीनियरिंग]] में, '''डेलिगेशन पैटर्न''' [[ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग|ऑब्जेक्ट ओरिएंटेड]] [[डिज़ाइन पैटर्न]] जो [[वस्तु रचना|ऑब्जेक्ट कम्पोजीशन]] को इनहेरिटेंस के रूप में समान [[कोड पुन: उपयोग|कोड रियूज़]] करने की अनुमति देता है।


प्रतिनिधिमंडल में, [[वस्तु (कंप्यूटर विज्ञान)]] दूसरी वस्तु (''प्रतिनिधि'') को सौंप कर अनुरोध को संभालती है। प्रतिनिधि  [[सहायक वस्तु]] है, लेकिन ''मूल संदर्भ के साथ''। प्रतिनिधिमंडल के लिए भाषा-स्तर के समर्थन के साथ, यह निहित रूप से किया जाता है <code>[[self (computer science)|self]]</code> प्रतिनिधि में मूल (भेजने वाली) वस्तु का संदर्भ लें, न कि प्रतिनिधि (प्राप्त करने वाली वस्तु) का। प्रतिनिधि पैटर्न में, इसके बजाय प्रतिनिधि को मूल वस्तु को विधि के तर्क के रूप में स्पष्ट रूप से पास करके पूरा किया जाता है।<ref>Gamma et al. 1994</ref> ध्यान दें कि [[अग्रेषण (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)]] की विशिष्ट अवधारणा को संदर्भित करने के लिए डेलिगेशन का उपयोग अक्सर शिथिल रूप से किया जाता है, जहां भेजने वाली वस्तु केवल प्राप्त वस्तु पर संबंधित सदस्य का उपयोग करती है, प्राप्त वस्तु के संदर्भ में मूल्यांकन किया जाता है, मूल वस्तु नहीं।
डेलिगेशन में, [[वस्तु (कंप्यूटर विज्ञान)|ऑब्जेक्ट (कंप्यूटर विज्ञान)]] किसी दूसरे ऑब्जेक्ट को डेलीगेट करके रिक्वेस्ट को हैंडल करता है। ओरिजिनल कॉन्टेक्स्ट के साथ डेलिगेट [[सहायक वस्तु|हेल्पिंग ऑब्जेक्ट]] है। डेलिगेशन के लिए लैंग्वेज-लेवल सपोर्ट के साथ, यह डेलिगेट में <code>[[self (computer science)|self]]</code> को ओरिजिनल (सेंडिंग) ऑब्जेक्ट को संदर्भित करके किया जाता है, न कि डेलिगेट (रिसीविंग ऑब्जेक्ट) को संदर्भित करके किया जाता है। डेलिगेट पैटर्न में, डेलिगेट को ओरिजिनल ऑब्जेक्ट मेथड के आर्ग्युमेंट के रूप में स्पष्ट रूप से पास करके पूर्ण किया जाता है।<ref>Gamma et al. 1994</ref> [[अग्रेषण (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)|फॉरवार्डिंग (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)]] की विशिष्ट अवधारणा को संदर्भित करने के लिए डेलिगेशन का उपयोग किया जाता है, जहां सेंडिंग ऑब्जेक्ट केवल रिसीविंग ऑब्जेक्ट पर संबंधित मेंबर का उपयोग करता है, जिसका इवैल्यूएशन रिसीविंग ऑब्जेक्ट के कॉन्टेक्स्ट में किया जाता है न कि ओरिजिनल ऑब्जेक्ट के कॉन्टेक्स्ट में किया जाता है।


ध्यान दें कि यह आलेख ऑब्जेक्ट/प्रतिनिधि प्राप्त करने के बजाय दो ऑब्जेक्ट्स के लिए ऑब्जेक्ट भेजने/प्राप्त करने वाली ऑब्जेक्ट का उपयोग करता है, इस बात पर जोर देता है कि कौन से ऑब्जेक्ट्स डेलिगेशन कॉल भेजते हैं और प्राप्त करते हैं, मूल कॉल नहीं।
यह लेख सेंडिंग ऑब्जेक्ट/रिसीविंग ऑब्जेक्ट के अतिरिक्त दो ऑब्जेक्ट के लिए रिसीविंग ऑब्जेक्ट/डेलिगेट का उपयोग करता है, इस बात पर बल देता है कि कौन से ऑब्जेक्ट्स ओरिजिनल कॉल नहीं किन्तु डेलिगेशन कॉल सेंड या रिसीव करते हैं।


== परिभाषा ==
== परिभाषा ==
गामा एट अल के परिचय में 1994, ग्रैडी बूच ने प्रतिनिधिमंडल को परिभाषित किया:
गामा एट अल के परिचय में 1994, ग्रैडी बूच ने डेलिगेशन को परिभाषित किया:


{{quote
{{quote
|''प्रतिनिधिमंडल रचना को विरासत के रूप में पुन: उपयोग के लिए शक्तिशाली बनाने का एक तरीका है [Lie86, JZ91]। प्रतिनिधिमंडल में, दो ऑब्जेक्ट एक अनुरोध को संभालने में शामिल होते हैं: एक प्राप्त वस्तु अपने प्रतिनिधि को संचालन सौंपती है। Tयह उपवर्गों के समान है जो माता-पिता वर्गों के अनुरोधों को टालते हैं। लेकिन वंशानुक्रम के साथ, विरासत में मिली कार्रवाई हमेशा सी में इस सदस्य चर और स्मॉलटाक में स्वयं के माध्यम से प्राप्त वस्तु को संदर्भित कर सकती है। प्रत्यायोजन के समान प्रभाव को प्राप्त करने के लिए, प्राप्तकर्ता स्वयं को प्रतिनिधि के पास भेजता है ताकि प्रत्यायोजित संचालन रिसीवर को संदर्भित कर सके।.<ref>{{cite book|last1=Gamma|first1=Erich|last2=Helm|first2=Richard|last3=Johnson|first3=Ralph|last4=Vlissides|first4=John|title=Design patterns : elements of reusable object-oriented software|date=1995|publisher=Addison-Wesley|location=Reading, Mass.|isbn=0-201-63361-2|page=[https://archive.org/details/designpatternsel00gamm/page/20 20]|edition=14. print.|url-access=registration|url=https://archive.org/details/designpatternsel00gamm/page/20}}</ref>}}
|''प्रतिनिधिमंडल रचना को उत्तराधिकार के रूप में पुन: उपयोग के लिए शक्तिशाली बनाने का उपाय है [Lie86, JZ91]। प्रतिनिधिमंडल में, दो ऑब्जेक्ट अनुरोध को संभालने में सम्मलित होते हैं: प्राप्त वस्तु अपने प्रतिनिधि को संचालन प्रदान करती है। यह उपवर्गों के समान है जो माता-पिता वर्गों के अनुरोधों की उपेक्षा हैं। लेकिन वंशानुक्रम के साथ, उत्तराधिकार में मिली कार्यविवरण सदैव सी में इस सदस्य चर और स्मॉलटाक में स्वयं के माध्यम से प्राप्त वस्तु को संदर्भित कर सकती है। प्रत्यायोजन के समान प्रभाव को प्राप्त करने के लिए, प्राप्तकर्ता स्वयं को प्रतिनिधि के पास भेजता है जिससे प्रत्यायोजित संचालन रिसीवर को संदर्भित कर सके।.<ref>{{cite book|last1=Gamma|first1=Erich|last2=Helm|first2=Richard|last3=Johnson|first3=Ralph|last4=Vlissides|first4=John|title=Design patterns : elements of reusable object-oriented software|date=1995|publisher=Addison-Wesley|location=Reading, Mass.|isbn=0-201-63361-2|page=[https://archive.org/details/designpatternsel00gamm/page/20 20]|edition=14. print.|url-access=registration|url=https://archive.org/details/designpatternsel00gamm/page/20}}</ref>}}
 


== उदाहरण ==
== उदाहरण ==
नीचे दिए गए उदाहरण में ([[कोटलिन (प्रोग्रामिंग भाषा)]] प्रोग्रामिंग लैंग्वेज का उपयोग करते हुए), क्लास (कंप्यूटर प्रोग्रामिंग) विंडो डेलिगेशन (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) <code>area()</code> इसकी आंतरिक आयत वस्तु (इसके प्रतिनिधि) को कॉल करें।
नीचे दिए गए उदाहरण में ([[कोटलिन (प्रोग्रामिंग भाषा)|कोटलिन (प्रोग्रामिंग लैंग्वेज)]] प्रोग्रामिंग लैंग्वेज का उपयोग करते हुए), क्लास (कंप्यूटर प्रोग्रामिंग) विंडो डेलिगेशन (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) <code>area()</code> इसकी आंतरिक आयत ऑब्जेक्ट (इसके डेलिगेट) को कॉल करें।
 
<वाक्यविन्यास प्रकाश लैंग = कोटलिन> वर्ग आयत (वैल चौड़ाई: इंट, वैल ऊंचाई: इंट) {
    मज़ा क्षेत्र () = चौड़ाई * ऊँचाई
}
 
क्लास विंडो (वैल बाउंड्स: रेक्टेंगल) {
    // प्रतिनिधि मंडल
    मज़ा क्षेत्र () = सीमा क्षेत्र ()
}</syntaxhighlight>


== भाषा समर्थन ==
  class Rectangle(val width: Int, val height: Int) {
कुछ भाषाओं में बिल्ट इन डेलिगेशन के लिए विशेष समर्थन है।<ref>{{Cite web|url=https://kotlinlang.org/docs/reference/delegation.html|title=Delegation - Kotlin Programming Language|website=Kotlin|access-date=2019-03-23}}</ref> उदाहरण के लिए, कोटलिन (प्रोग्रामिंग भाषा) प्रोग्रामिंग भाषा में, हम लिख सकते हैं:


<syntaxhighlight lang= kotlin>इंटरफ़ेस ClosedShape {
    fun area() = width * height
    मज़ा क्षेत्र (): इंट
}
}
class Window(val bounds: Rectangle) {
    // Delegation
    fun area() = bounds.area()
}


वर्ग आयत (वैल चौड़ाई: इंट, वैल ऊंचाई: इंट): क्लोज्ड शेप {
== लैंग्वेज सपोर्ट ==
    मज़ेदार क्षेत्र को ओवरराइड करें () = चौड़ाई * ऊँचाई
कुछ लैंग्वेज में बिल्ट इन डेलिगेशन के लिए विशेष सपोर्ट है।<ref>{{Cite web|url=https://kotlinlang.org/docs/reference/delegation.html|title=Delegation - Kotlin Programming Language|website=Kotlin|access-date=2019-03-23}}</ref> उदाहरण के लिए, कोटलिन (प्रोग्रामिंग लैंग्वेज) में, हम लिख सकते हैं:
}
  interface ClosedShape {


क्लास विंडो (निजी वैल बाउंड्स: क्लोज्ड शेप): क्लोज्ड शेप बाय बाउंड्स </ सिंटैक्सहाइलाइट>
    fun area(): Int
}
class Rectangle(val width: Int, val height: Int) : ClosedShape {
    override fun area() = width * height
}
class Window(private val bounds: ClosedShape) : ClosedShape by bounds


== यह भी देखें ==
== यह भी देखें ==
* प्रतिनिधिमंडल (वस्तु उन्मुख प्रोग्रामिंग)
* डेलिगेशन (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)
* अग्रेषण (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)
* अग्रेषण (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)
* [[पहलू आधारित प्रोग्रामिंग]]
* [[पहलू आधारित प्रोग्रामिंग|आस्पेक्ट ओरिएंटेड प्रोग्रामिंग]]
* [[प्रतिनिधिमंडल (कम्प्यूटिंग)]]
* [[प्रतिनिधिमंडल (कम्प्यूटिंग)|डेलिगेशन (कम्प्यूटिंग)]]
* [[सॉफ्टवेयर डिजाइन पैटर्न]]
* [[सॉफ्टवेयर डिजाइन पैटर्न]]
* [[मुखौटा पैटर्न]]
* [[मुखौटा पैटर्न|फसाड पैटर्न]]
* सिज़ोफ्रेनिया (वस्तु-उन्मुख प्रोग्रामिंग)
* सिज़ोफ्रेनिया (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)


==संदर्भ==
==रेफरेन्स==
{{Reflist}}
{{Reflist}}


Line 54: Line 54:
* [http://rosettacode.org/wiki/Delegate Delegation] on [[Rosetta Code]]
* [http://rosettacode.org/wiki/Delegate Delegation] on [[Rosetta Code]]


{{Design Patterns Patterns}}
[[Category:C++ कोड के उदाहरण वाले लेख|Delegation Pattern]]
 
[[Category:Collapse templates|Delegation Pattern]]
{{DEFAULTSORT:Delegation Pattern}}
[[Category:Created On 16/02/2023|Delegation Pattern]]
<!--Categories-->[[Category: C++ कोड के उदाहरण वाले लेख]] [[Category: जावा कोड उदाहरण के साथ लेख]] [[Category: सॉफ्टवेयर डिजाइन पैटर्न]]  
[[Category:Machine Translated Page|Delegation Pattern]]
 
[[Category:Navigational boxes| ]]
 
[[Category:Navigational boxes without horizontal lists|Delegation Pattern]]
 
[[Category:Pages with script errors|Delegation Pattern]]
[[Category: Machine Translated Page]]
[[Category:Sidebars with styles needing conversion|Delegation Pattern]]
[[Category:Created On 16/02/2023]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates Vigyan Ready]]

Latest revision as of 16:18, 12 October 2023

सॉफ्टवेयर इंजीनियरिंग में, डेलिगेशन पैटर्न ऑब्जेक्ट ओरिएंटेड डिज़ाइन पैटर्न जो ऑब्जेक्ट कम्पोजीशन को इनहेरिटेंस के रूप में समान कोड रियूज़ करने की अनुमति देता है।

डेलिगेशन में, ऑब्जेक्ट (कंप्यूटर विज्ञान) किसी दूसरे ऑब्जेक्ट को डेलीगेट करके रिक्वेस्ट को हैंडल करता है। ओरिजिनल कॉन्टेक्स्ट के साथ डेलिगेट हेल्पिंग ऑब्जेक्ट है। डेलिगेशन के लिए लैंग्वेज-लेवल सपोर्ट के साथ, यह डेलिगेट में self को ओरिजिनल (सेंडिंग) ऑब्जेक्ट को संदर्भित करके किया जाता है, न कि डेलिगेट (रिसीविंग ऑब्जेक्ट) को संदर्भित करके किया जाता है। डेलिगेट पैटर्न में, डेलिगेट को ओरिजिनल ऑब्जेक्ट मेथड के आर्ग्युमेंट के रूप में स्पष्ट रूप से पास करके पूर्ण किया जाता है।[1] फॉरवार्डिंग (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) की विशिष्ट अवधारणा को संदर्भित करने के लिए डेलिगेशन का उपयोग किया जाता है, जहां सेंडिंग ऑब्जेक्ट केवल रिसीविंग ऑब्जेक्ट पर संबंधित मेंबर का उपयोग करता है, जिसका इवैल्यूएशन रिसीविंग ऑब्जेक्ट के कॉन्टेक्स्ट में किया जाता है न कि ओरिजिनल ऑब्जेक्ट के कॉन्टेक्स्ट में किया जाता है।

यह लेख सेंडिंग ऑब्जेक्ट/रिसीविंग ऑब्जेक्ट के अतिरिक्त दो ऑब्जेक्ट के लिए रिसीविंग ऑब्जेक्ट/डेलिगेट का उपयोग करता है, इस बात पर बल देता है कि कौन से ऑब्जेक्ट्स ओरिजिनल कॉल नहीं किन्तु डेलिगेशन कॉल सेंड या रिसीव करते हैं।

परिभाषा

गामा एट अल के परिचय में 1994, ग्रैडी बूच ने डेलिगेशन को परिभाषित किया:

प्रतिनिधिमंडल रचना को उत्तराधिकार के रूप में पुन: उपयोग के लिए शक्तिशाली बनाने का उपाय है [Lie86, JZ91]। प्रतिनिधिमंडल में, दो ऑब्जेक्ट अनुरोध को संभालने में सम्मलित होते हैं: प्राप्त वस्तु अपने प्रतिनिधि को संचालन प्रदान करती है। यह उपवर्गों के समान है जो माता-पिता वर्गों के अनुरोधों की उपेक्षा हैं। लेकिन वंशानुक्रम के साथ, उत्तराधिकार में मिली कार्यविवरण सदैव सी में इस सदस्य चर और स्मॉलटाक में स्वयं के माध्यम से प्राप्त वस्तु को संदर्भित कर सकती है। प्रत्यायोजन के समान प्रभाव को प्राप्त करने के लिए, प्राप्तकर्ता स्वयं को प्रतिनिधि के पास भेजता है जिससे प्रत्यायोजित संचालन रिसीवर को संदर्भित कर सके।.[2]

उदाहरण

नीचे दिए गए उदाहरण में (कोटलिन (प्रोग्रामिंग लैंग्वेज) प्रोग्रामिंग लैंग्वेज का उपयोग करते हुए), क्लास (कंप्यूटर प्रोग्रामिंग) विंडो डेलिगेशन (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) area() इसकी आंतरिक आयत ऑब्जेक्ट (इसके डेलिगेट) को कॉल करें।

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

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

लैंग्वेज सपोर्ट

कुछ लैंग्वेज में बिल्ट इन डेलिगेशन के लिए विशेष सपोर्ट है।[3] उदाहरण के लिए, कोटलिन (प्रोग्रामिंग लैंग्वेज) में, हम लिख सकते हैं:

 interface ClosedShape {
    fun area(): Int
}

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

class Window(private val bounds: ClosedShape) : 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. ed.). Reading, Mass.: Addison-Wesley. p. 20. ISBN 0-201-63361-2.
  3. "Delegation - Kotlin Programming Language". Kotlin. Retrieved 2019-03-23.


बाहरी संबंध