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

From Vigyanwiki
No edit summary
No edit summary
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> ध्यान दें कि [[अग्रेषण (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)]] की विशिष्ट अवधारणा को संदर्भित करने के लिए प्रतिनिधि मंडल का उपयोग प्रायः शिथिल रूप से किया जाता है, जहां भेजने वाली वस्तु केवल प्राप्त वस्तु पर संबंधित सदस्य का उपयोग करती है, प्राप्त वस्तु के संदर्भ में मूल वस्तु का नहीं मूल्यांकन किया जाता है।


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


== परिभाषा ==
== परिभाषा ==
Line 9: Line 9:


{{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> इसकी आंतरिक आयत वस्तु (इसके प्रतिनिधि) को कॉल करें।


<वाक्यविन्यास प्रकाश लैंग = कोटलिन> वर्ग आयत (वैल चौड़ाई: इंट, वैल ऊंचाई: इंट) {
<वाक्यविन्यास प्रकाश लैंग = कोटलिन> वर्ग आयत (वैल चौड़ाई: इंट, वैल ऊंचाई: इंट) {
    मज़ा क्षेत्र () = चौड़ाई * ऊँचाई
  class Rectangle(val width: Int, val height: Int) {
}


क्लास विंडो (वैल बाउंड्स: रेक्टेंगल) {
    fun area() = width * height
    // प्रतिनिधि मंडल
}
    मज़ा क्षेत्र () = सीमा क्षेत्र ()
}</syntaxhighlight>
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> उदाहरण के लिए, कोटलिन (प्रोग्रामिंग भाषा) प्रोग्रामिंग भाषा में, हम लिख सकते हैं:
कुछ भाषाओं में निर्मित प्रतिनिधिमंडल के लिए विशेष समर्थन है।।<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 {


<syntaxhighlight lang= kotlin>इंटरफ़ेस 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
क्लास विंडो (निजी वैल बाउंड्स: क्लोज्ड शेप): क्लोज्ड शेप बाय बाउंड्स </ सिंटैक्सहाइलाइट>


== यह भी देखें ==
== यह भी देखें ==

Revision as of 23:34, 19 February 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.


बाहरी संबंध