डेलिगेशन पैटर्न: Difference between revisions
No edit summary |
|||
(4 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
[[सॉफ्टवेयर इंजीनियरिंग]] में, | [[सॉफ्टवेयर इंजीनियरिंग]] में, '''डेलिगेशन पैटर्न''' [[ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग|ऑब्जेक्ट ओरिएंटेड]] [[डिज़ाइन पैटर्न]] जो [[वस्तु रचना|ऑब्जेक्ट कम्पोजीशन]] को इनहेरिटेंस के रूप में समान [[कोड पुन: उपयोग|कोड रियूज़]] करने की अनुमति देता है। | ||
डेलिगेशन में, [[वस्तु (कंप्यूटर विज्ञान)|ऑब्जेक्ट (कंप्यूटर विज्ञान)]] किसी दूसरे ऑब्जेक्ट को डेलीगेट करके रिक्वेस्ट को हैंडल करता है। ओरिजिनल कॉन्टेक्स्ट के साथ डेलिगेट [[सहायक वस्तु|हेल्पिंग ऑब्जेक्ट]] है। डेलिगेशन के लिए लैंग्वेज-लेवल सपोर्ट के साथ, यह डेलिगेट में <code>[[self (computer science)|self]]</code> को ओरिजिनल (सेंडिंग) ऑब्जेक्ट को संदर्भित करके किया जाता है, न कि डेलिगेट (रिसीविंग ऑब्जेक्ट) को संदर्भित करके किया जाता है। डेलिगेट पैटर्न में, डेलिगेट को ओरिजिनल ऑब्जेक्ट मेथड के आर्ग्युमेंट के रूप में स्पष्ट रूप से पास करके पूर्ण किया जाता है।<ref>Gamma et al. 1994</ref> [[अग्रेषण (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)|फॉरवार्डिंग (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)]] की विशिष्ट अवधारणा को संदर्भित करने के लिए डेलिगेशन का उपयोग किया जाता है, जहां सेंडिंग ऑब्जेक्ट केवल रिसीविंग ऑब्जेक्ट पर संबंधित मेंबर का उपयोग करता है, जिसका इवैल्यूएशन रिसीविंग ऑब्जेक्ट के कॉन्टेक्स्ट में किया जाता है न कि ओरिजिनल ऑब्जेक्ट के कॉन्टेक्स्ट में किया जाता है। | |||
यह लेख सेंडिंग ऑब्जेक्ट/रिसीविंग ऑब्जेक्ट के अतिरिक्त दो ऑब्जेक्ट के लिए रिसीविंग ऑब्जेक्ट/डेलिगेट का उपयोग करता है, इस बात पर बल देता है कि कौन से ऑब्जेक्ट्स ओरिजिनल कॉल नहीं किन्तु डेलिगेशन कॉल सेंड या रिसीव करते हैं। | |||
== परिभाषा == | == परिभाषा == | ||
गामा एट अल के परिचय में 1994, ग्रैडी बूच ने | गामा एट अल के परिचय में 1994, ग्रैडी बूच ने डेलिगेशन को परिभाषित किया: | ||
{{quote | {{quote | ||
|''प्रतिनिधिमंडल रचना को उत्तराधिकार के रूप में पुन: उपयोग के लिए शक्तिशाली बनाने का उपाय है [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>}} | |''प्रतिनिधिमंडल रचना को उत्तराधिकार के रूप में पुन: उपयोग के लिए शक्तिशाली बनाने का उपाय है [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> इसकी आंतरिक आयत ऑब्जेक्ट (इसके डेलिगेट) को कॉल करें। | ||
class Rectangle(val width: Int, val height: Int) { | class Rectangle(val width: Int, val height: Int) { | ||
Line 26: | Line 24: | ||
} | } | ||
== | == लैंग्वेज सपोर्ट == | ||
कुछ | कुछ लैंग्वेज में बिल्ट इन डेलिगेशन के लिए विशेष सपोर्ट है।<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 { | interface ClosedShape { | ||
Line 40: | Line 38: | ||
== यह भी देखें == | == यह भी देखें == | ||
* | * डेलिगेशन (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) | ||
* अग्रेषण (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) | * अग्रेषण (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) | ||
* [[पहलू आधारित प्रोग्रामिंग]] | * [[पहलू आधारित प्रोग्रामिंग|आस्पेक्ट ओरिएंटेड प्रोग्रामिंग]] | ||
* [[प्रतिनिधिमंडल (कम्प्यूटिंग)]] | * [[प्रतिनिधिमंडल (कम्प्यूटिंग)|डेलिगेशन (कम्प्यूटिंग)]] | ||
* [[सॉफ्टवेयर डिजाइन पैटर्न]] | * [[सॉफ्टवेयर डिजाइन पैटर्न]] | ||
* [[मुखौटा पैटर्न]] | * [[मुखौटा पैटर्न|फसाड पैटर्न]] | ||
* सिज़ोफ्रेनिया ( | * सिज़ोफ्रेनिया (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) | ||
== | ==रेफरेन्स== | ||
{{Reflist}} | {{Reflist}} | ||
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
यह भी देखें
- डेलिगेशन (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)
- अग्रेषण (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)
- आस्पेक्ट ओरिएंटेड प्रोग्रामिंग
- डेलिगेशन (कम्प्यूटिंग)
- सॉफ्टवेयर डिजाइन पैटर्न
- फसाड पैटर्न
- सिज़ोफ्रेनिया (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)
रेफरेन्स
- ↑ Gamma et al. 1994
- ↑ 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.
- ↑ "Delegation - Kotlin Programming Language". Kotlin. Retrieved 2019-03-23.
बाहरी संबंध
- What Is Delegation, WikiWikiWeb
- Delegation on Rosetta Code