डिलिगेशन (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग): Difference between revisions
No edit summary |
|||
Line 1: | Line 1: | ||
{{Other uses| | {{Other uses|डिलिगेशन (कम्प्यूटिंग)}} | ||
{{Distinguish| | {{Distinguish|फॉरवार्डिंग (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)}} | ||
[[ ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग |ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग]] में, | [[ ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग |ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग]] में, डिलिगेशन एक अन्य मूल ऑब्जेक्ट (प्रेषक) के संदर्भ में एक [[ वस्तु (कंप्यूटर विज्ञान) |ऑब्जेक्ट (कंप्यूटर विज्ञान)]] (रिसीवर) के एक अवयव [[संपत्ति (प्रोग्रामिंग)]] या [[विधि (कंप्यूटर प्रोग्रामिंग)|प्रणाली (कंप्यूटर प्रोग्रामिंग)]]) का मूल्यांकन करने के लिए संदर्भित करता है। डिलिगेशन स्पष्ट रूप से किया जा सकता है, भेजने वाली ऑब्जेक्ट को प्राप्त करने वाली ऑब्जेक्ट को पास करके, जो किसी [[वस्तु उन्मुख भाषा|ऑब्जेक्ट उन्मुख भाषा]] में किया जा सकता है; या निहित रूप से, भाषा के अवयव लुकअप नियमों द्वारा, जिसके लिए सुविधा के लिए भाषा समर्थन की आवश्यकता होती है। [[वर्ग आधारित प्रोग्रामिंग]] में [[ वंशानुक्रम (वस्तु-उन्मुख प्रोग्रामिंग) |इन्हेरिटेंस (ऑब्जेक्ट-उन्मुख प्रोग्रामिंग)]] के अनुरूप [[प्रोटोटाइप-आधारित प्रोग्रामिंग]] में व्यवहार के पुन: उपयोग के लिए अंतर्निहित डिलिगेशन मौलिक प्रणाली है। भाषा के स्तर पर डिलिगेशन का समर्थन करने वाली सबसे प्रसिद्ध भाषाएँ स्व (प्रोग्रामिंग भाषा) हैं, जो कि अपरिवर्तनीय ऑब्जेक्ट पैरेंट [[स्लॉट (कंप्यूटर आर्किटेक्चर)]] की अपनी धारणा के माध्यम से डिलिगेशन की धारणा को सम्मिलित करती हैं, जो स्वयं कॉल और [[जावास्क्रिप्ट]] पर प्रणाली खोज में उपयोग की जाती हैं; विस्तृत जानकारी के लिए [[जावास्क्रिप्ट डिलिगेशन]] देखें। | ||
' | 'डिलिगेशन' शब्द का उपयोग ऑब्जेक्टों के बीच विभिन्न अन्य संबंधों के लिए भी शिथिल रूप से किया जाता है; अधिक जानका के लिए [[प्रतिनिधिमंडल (प्रोग्रामिंग)|डिलिगेशन (प्रोग्रामिंग)]] देखें। बार-बार भ्रमित होने वाली अवधारणाएं बस किसी अन्य ऑब्जेक्ट का उपयोग कर रही हैं, जिसे अधिक सटीक रूप से ''कंसल्टेशन'' या ''ऑब्जेक्ट एकत्रीकरण'' के रूप में संदर्भित किया जाता है; और किसी अन्य ऑब्जेक्ट पर संबंधित अवयव का मूल्यांकन करके एक ऑब्जेक्ट पर एक अवयव का मूल्यांकन करना, विशेष रूप से प्राप्त ऑब्जेक्ट के संदर्भ में, जिसे अधिक सटीक रूप से ''[[अग्रेषण (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)|फॉरवार्डिंग (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)]]'' के रूप में जाना जाता है, (जब एक रैपर ऑब्जेक्ट नहीं होता है) लपेटी हुई ऑब्जेक्ट को पास न करें)।{{sfn|Gamma|Helm|Johnson|Vlissides|1995|loc="Delegation", pp. 20–21}}{{sfn|Beck|1997|loc="Delegation", pp. 64–69}}{{efn|Beck 1997 uses the terms "simple delegation" for when the receiving object does not have access to the sending object, and "self delegation" for when the receiving object does have access to the sending object; in modern language these are "forwarding" and "delegation", as used in this article.}} [[ प्रतिनिधिमंडल पैटर्न |डिलिगेशन पैटर्न]] डेलिगेशन को लागू करने के लिए एक [[सॉफ्टवेयर डिजाइन पैटर्न]] है, हालांकि इस शब्द का उपयोग कंसल्टेशन या फॉरवार्डिंग के लिए भी शिथिल रूप से किया जाता है। | ||
== | == अवलोकन == | ||
तथाकथित [[स्व कॉल]] भेजने के लिए | तथाकथित [[स्व कॉल]] भेजने के लिए प्रणाली लुकअप नियमों का उपयोग करने वाली प्रोग्रामिंग भाषा सुविधा के रूप में डिलिगेशन की भावना को [[हेनरी लिबरमैन]] ने अपने 1986 के पेपर यूजिंग प्रोटोटाइप ऑब्जेक्ट्स टू इम्प्लीमेंट शेयर्ड बिहेवियर इन ऑब्जेक्ट-ओरिएंटेड सिस्टम्स में परिभाषित किया था। | ||
डिलिगेशन [[डायनेमिक बाइंडिंग (कंप्यूटर साइंस)]] पर निर्भर है, क्योंकि इसके लिए आवश्यक है कि एक दी गई प्रणाली कॉल रनटाइम पर कोड के विभिन्न खंडों को लागू कर सके।{{Citation needed|date = January 2015}}. प्रोग्राम घटकों के व्यवहार को अनुकूलित करने के साधन के रूप में इसका उपयोग [[macOS|मैक-ओएस]] (और इसके पूर्ववर्ती [[NeXTStep|नेक्स्टस्टेप]]) में किया जाता है।<ref>{{cite web | url=https://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/CocoaFundamentals/CommunicatingWithObjects/CommunicateWithObjects.html | title=Cocoa Fundamentals Guide: Delegates and Data Sources | author=Apple |date=2009-08-20 | work=Apple Developer Connection | accessdate=2009-09-11 }}</ref> यह विंडोज़ को प्रबंधित करने के लिए एकल ओएस-प्रदत्त वर्ग का उपयोग करने जैसे कार्यान्वयन को सक्षम करता है, क्योंकि वर्ग एक डिलिगेशन लेता है जो प्रोग्राम-विशिष्ट है और आवश्यकतानुसार डिफ़ॉल्ट व्यवहार को ओवरराइड कर सकता है। उदाहरण के लिए, जब उपयोगकर्ता क्लोज बॉक्स पर क्लिक करता है, तो विंडो प्रबंधक डिलिगेशन को एक विंडोशोल्डक्लोज कॉल भेजता है, और डिलिगेशन विंडो के बंद होने में देरी कर सकता है, यदि विंडो की सामग्री द्वारा सुरक्षित किये गए डेटा का डिलिगेशनत्व नहीं किया जाता है। | |||
डिलिगेशन की विशेषता स्वयं के देर से बाध्यकारी होने के रूप में हो सकती है (और फॉरवार्डिंग (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) से अलग) :<ref> | |||
{{cite book |title=Perspectives of Systems Informatics: 5th International Andrei Ershov Memorial Conference, PSI 2003, Akademgorodok, Novosibirsk, Russia, July 9-12, 2003, Revised Papers |chapter=Intersecting Classes and Prototypes |page=[https://books.google.com/books?id=lqL4wL5aSkkC&pg=PA38&dq=delegation 38]}}</ref> | {{cite book |title=Perspectives of Systems Informatics: 5th International Andrei Ershov Memorial Conference, PSI 2003, Akademgorodok, Novosibirsk, Russia, July 9-12, 2003, Revised Papers |chapter=Intersecting Classes and Prototypes |page=[https://books.google.com/books?id=lqL4wL5aSkkC&pg=PA38&dq=delegation 38]}}</ref> | ||
{{quote|... messages sent to the {{code|self}} (or {{code|this}}) variable in the parent will "come back" to the object that originally received the message.}} | {{quote|... messages sent to the {{code|self}} (or {{code|this}}) variable in the parent will "come back" to the object that originally received the message.}} | ||
वह यह है कि {{code| | वह यह है कि {{code|सेल्फ}} प्राप्त करने वाली ऑब्जेक्ट में एक प्रणाली में परिभाषा समय पर उस ऑब्जेक्ट के लिए स्थिर रूप से बाध्य नहीं है (जैसे संकलन समय या जब फलन किसी ऑब्जेक्ट से जुड़ा होता है), बल्कि मूल्यांकन समय पर, यह मूल ऑब्जेक्ट के लिए बाध्य होता है। | ||
यह तर्क दिया गया है कि प्रोग्राम कोड को अधिक पठनीय और समझने योग्य बनाने के लिए कुछ | यह तर्क दिया गया है कि प्रोग्राम कोड को अधिक पठनीय और समझने योग्य बनाने के लिए कुछ प्रकरणों में डिलिगेशन को इनहेरिटेंस (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) के लिए प्राथमिकता दी जा सकती है।<ref>[http://heim.ifi.uio.no/~trygver/2007/readability.pdf][[Trygve Reenskaug]], Dept. of Informatics, University of Oslo, "The Case for Readable Code" (2007)</ref> स्पष्ट डिलिगेशन काफी व्यापक होने के अतिरिक्त, अपेक्षाकृत कुछ प्रमुख प्रोग्रामिंग भाषाएं इन्हेरिटेंस के वैकल्पिक मॉडल के रूप में डिलिगेशन को लागू करती हैं। डिलिगेशन और इन्हेरिटेंस के बीच सटीक संबंध जटिल है; कुछ लेखक उन्हें समतुल्य मानते हैं, या एक को दूसरे का विशेष प्रकरण मानते हैं।<ref>{{cite conference | first=Lynn Andrea | last=Stein | title=प्रतिनिधिमंडल विरासत है| conference=OOPSLA '87 Conference proceedings on Object-oriented programming systems, languages and applications | pages=138–146 | doi=10.1145/38807.38820 }}</ref> | ||
== | == डिलिगेशन के लिए भाषा समर्थन == | ||
प्रणाली लुकअप नियमों के माध्यम से डिलिगेशन का समर्थन करने वाली भाषाओं में, प्रणाली प्रेषण को इन्हेरिटेंस में वर्चुअल प्रणालीयों के लिए परिभाषित किया गया है: यह सदैव सबसे विशिष्ट प्रणाली है जिसे प्रणाली लुकअप के समय चुना जाता है। इसलिए यह मूल रिसीवर इकाई है जो प्रणाली लुकअप की शुरुआत है, भले ही यह किसी अन्य ऑब्जेक्ट पर नियंत्रण पारित कर दिया गया हो (डिलिगेशनत्व लिंक के माध्यम से, ऑब्जेक्ट संदर्भ नहीं)। | |||
डिलिगेशन का यह लाभ है कि यह रन टाइम पर हो सकता है और किसी प्रकार की संस्थाओं के केवल एक सबसेट को प्रभावित कर सकता है और रन टाइम पर हटाया भी जा सकता है। इन्हेरिटेंस, इसके विपरीत, सामान्यतः उदाहरणों के अतिरिक्त प्रकार को लक्षित करता है, और संकलन समय तक ही सीमित है। दूसरी ओर, इन्हेरिटेंस को स्थिर रूप से टाइप-चेक किया जा सकता है, जबकि डिलिगेशन सामान्यतः जेनरिक के बिना नहीं हो सकता है (हालांकि डिलिगेशन का प्रतिबंधित संस्करण स्थिर रूप से टाइप-सुरक्षित हो सकता है)<ref>{{cite book | chapter-url = https://link.springer.com/ | author = Günter Kniesel | title = ECOOP' 99 — Object-Oriented Programming | volume = 1628 | pages = 351–366 | publisher = Springer | date = 1999-11-19 | archiveurl = https://web.archive.org/web/20150304020026/http://link.springer.com/ | archivedate = 2015-03-04 | quote = यह पेपर विशुद्ध रूप से अग्रेषण-आधारित वस्तु संरचना के पूरक के रूप में वस्तु-आधारित विरासत (जिसे प्रतिनिधिमंडल के रूप में भी जाना जाता है) का प्रस्ताव करता है। यह एक क्लास-आधारित ऑब्जेक्ट मॉडल में प्रतिनिधिमंडल का एक प्रकार का सुरक्षित एकीकरण प्रस्तुत करता है और दिखाता है कि यह अग्रेषण-आधारित घटक इंटरैक्शन द्वारा सामना की जाने वाली समस्याओं को कैसे दूर करता है, यह कैसे घटकों की स्वतंत्र विस्तारशीलता और अप्रत्याशित, गतिशील घटक अनुकूलन का समर्थन करता है।| accessdate = 2015-03-04 | doi = 10.1007/3-540-48743-3_16 | series = Lecture Notes in Computer Science | isbn = 978-3-540-66156-6 | chapter = Type-Safe Delegation for Run-Time Component Adaptation | citeseerx = 10.1.1.33.7584 | url-status = bot: unknown }}</ref>). डिलिगेशन को विशिष्ट ऑब्जेक्टों के लिए रन-टाइम इनहेरिटेंस कहा जा सकता है। | |||
यहाँ C | यहाँ C शार्प (प्रोग्रामिंग भाषा) | C#/जावा (प्रोग्रामिंग भाषा) जैसी भाषा में एक [[स्यूडोकोड]] उदाहरण दिया गया है: | ||
<syntaxhighlight lang=Java> | <syntaxhighlight lang=Java> | ||
Line 57: | Line 57: | ||
b = new B(a); // establish delegation between two objects | b = new B(a); // establish delegation between two objects | ||
</syntaxhighlight> | </syntaxhighlight> | ||
कॉलिंग {{code|b.foo()}} के परिणामस्वरूप b.bar मुद्रित होगा, चूँकि {{code|this}} मूल रिसीवर ऑब्जेक्ट को संदर्भित करता है, {{code|b}}, के संदर्भ में {{code|a}}. परिणामी अस्पष्टता {{code|this}} को [[वस्तु सिज़ोफ्रेनिया]] कहा जाता है। | कॉलिंग {{code|b.foo()}} के परिणामस्वरूप '''b.bar''' मुद्रित होगा, चूँकि {{code|this}} मूल रिसीवर ऑब्जेक्ट को संदर्भित करता है, {{code|b}}, के संदर्भ में {{code|a}}. परिणामी अस्पष्टता {{code|this}} को [[वस्तु सिज़ोफ्रेनिया|ऑब्जेक्ट सिज़ोफ्रेनिया]] कहा जाता है। | ||
निहित अनुवाद {{code|this}} एक स्पष्ट पैरामीटर में, कॉल (in {{code|B}}, साथ {{code|a}} एक | निहित अनुवाद {{code|this}} एक स्पष्ट पैरामीटर में, कॉल (in {{code|B}}, साथ {{code|a}} एक डिलिगेशन) {{code|a.foo()}} में अनुवाद करता है, {{code|A.foo(b)}}, के प्रकार का उपयोग करना {{code|a}} प्रणाली संकल्प के लिए, लेकिन डिलिगेशन ऑब्जेक्ट {{code|b}} के लिए {{code|this}} तर्क कहा जाता है। | ||
इन्हेरिटेंस का उपयोग करते हुए, अनुरूप कोड (बड़े अक्षरों का उपयोग करके यह जोर देने के लिए कि संकल्प वर्गों पर आधारित है, ऑब्जेक्टों पर नहीं) है: | |||
<syntaxhighlight lang=Java> | <syntaxhighlight lang=Java> | ||
Line 88: | Line 88: | ||
b = new B(); | b = new B(); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
कॉलिंग {{code|b.foo()}} का परिणाम | कॉलिंग {{code|b.foo()}} का परिणाम '''b.bar''' होगा। इस प्रकरण में, {{code|this}} असंदिग्ध है: एक ही ऑब्जेक्ट है, {{code|b}}, और {{code|this.bar()}} उपवर्ग पर प्रणाली को हल करता है। | ||
सामान्य रूप से प्रोग्रामिंग लैंग्वेज एक भाषा अवधारणा के रूप में डेलिगेशन के इस असामान्य रूप का समर्थन नहीं करती हैं, लेकिन कुछ अपवाद | सामान्य रूप से प्रोग्रामिंग लैंग्वेज एक भाषा अवधारणा के रूप में डेलिगेशन के इस असामान्य रूप का समर्थन नहीं करती हैं, लेकिन कुछ अपवाद हैं।{{Citation needed|date = January 2015}}. | ||
=== | === ड्युअल इन्हेरिटेंस === | ||
यदि भाषा | यदि भाषा डिलिगेशन और इन्हेरिटेंस दोनों का समर्थन करती है, तो एक ही समय में दोनों प्रणालियों का उपयोग करके ड्युअल इन्हेरिटेंस कर सकते हैं | ||
<syntaxhighlight lang=Java> | <syntaxhighlight lang=Java> | ||
Line 100: | Line 100: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
यह | यह प्रणाली लुकअप के लिए अतिरिक्त नियमों की मांग करता है, क्योंकि अब संभावित रूप से दो प्रणालीयां हैं जिन्हें सबसे विशिष्ट (दो लुकअप पथों के कारण) के रूप में दर्शाया जा सकता है। | ||
===संबंधित क्षेत्र=== | ===संबंधित क्षेत्र=== | ||
डिलिगेशन को संस्थाओं के बीच कोड और डेटा साझा करने के लिए निम्न स्तर के तंत्र के रूप में वर्णित किया जा सकता है। इस प्रकार यह अन्य भाषा निर्माणों के लिए नींव तैयार करता है। विशेष रूप से भूमिका-उन्मुख प्रोग्रामिंग भाषाएँ डिलिगेशन का उपयोग करती रही हैं, लेकिन विशेष रूप से पुराने लोगों ने डिलिगेशन का उपयोग करने का दावा करते हुए तथ्यात्मक रूप से एकत्रीकरण ([[भूमिका उन्मुख प्रोग्रामिंग]]) का उपयोग किया। इसे धोखा नहीं माना जाना चाहिए, केवल डिलिगेशन का अर्थ है (जैसा ऊपर वर्णित है) कि निम्न स्तर के तंत्र के रूप में वर्णित किया जाना। | |||
हाल ही में | हाल ही में डिलिगेशन बांटने पर भी काम किया गया है, इसलिए खोज इंजन के ग्राहक (सस्ते होटल के कमरे ढूँढना) सर्वोत्तम हिट और सामान्य पुन: प्रयोज्य कार्यक्षमता साझा करने के लिए डिलिगेशन का उपयोग करके एक साझा इकाई का उपयोग कर सकते हैं। | ||
2003 में अर्न्स्ट और लॉरेंज द्वारा [[पहलू आधारित प्रोग्रामिंग]] सलाह संकल्प के लिए | 2003 में अर्न्स्ट और लॉरेंज द्वारा [[पहलू आधारित प्रोग्रामिंग|आस्पेक्ट ओरिएंटेड प्रोग्रामिंग]] सलाह संकल्प के लिए डिलिगेशन का भी सुझाव दिया गया है। | ||
== यह भी देखें == | == यह भी देखें == | ||
* [[प्रतिनिधिमंडल पैटर्न]] | * [[प्रतिनिधिमंडल पैटर्न|डिलिगेशन पैटर्न]] | ||
* [[एडेप्टर पैटर्न]] | * [[एडेप्टर पैटर्न]] | ||
* [[हुकिंग]] | * [[हुकिंग]] | ||
* [[जारी]] | * [[जारी]] | ||
* [[कार्यान्वयन विरासत]] | * [[कार्यान्वयन विरासत|कार्यान्वयन इन्हेरिटेंस]] | ||
* [[वंशानुक्रम शब्दार्थ]] | * [[वंशानुक्रम शब्दार्थ|इन्हेरिटेंस शब्दार्थ]] | ||
* [[सिज़ोफ्रेनिया (वस्तु-उन्मुख प्रोग्रामिंग)]] | * [[सिज़ोफ्रेनिया (वस्तु-उन्मुख प्रोग्रामिंग)|सिज़ोफ्रेनिया (ऑब्जेक्ट-उन्मुख प्रोग्रामिंग)]] | ||
* [[आभासी विरासत]] | * [[आभासी विरासत|आभासी इन्हेरिटेंस]] | ||
* [[आवरण समारोह]] | * [[आवरण समारोह|आवरण फलन]] | ||
अंतर करना: | अंतर करना: | ||
* [[प्रतिनिधि (सीएलआई)]] | * [[प्रतिनिधि (सीएलआई)|डिलिगेशन (सीएलआई)]] | ||
* [[प्रतिनिधिमंडल (प्रोग्रामिंग)]] | * [[प्रतिनिधिमंडल (प्रोग्रामिंग)|डिलिगेशन (प्रोग्रामिंग)]] | ||
* [[वस्तु एकत्रीकरण]] | * [[वस्तु एकत्रीकरण|ऑब्जेक्ट एकत्रीकरण]] | ||
* [[अग्रेषण (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)]] | * [[अग्रेषण (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)|फॉरवार्डिंग (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)]] | ||
[[Category:All articles with unsourced statements]] | [[Category:All articles with unsourced statements]] | ||
Line 176: | Line 176: | ||
* [https://web.archive.org/web/20070916214628/http://www.codeproject.com/cpp/CppDelegateImplementation.asp A new way to implement Delegate in C++] | * [https://web.archive.org/web/20070916214628/http://www.codeproject.com/cpp/CppDelegateImplementation.asp A new way to implement Delegate in C++] | ||
* [https://web.archive.org/web/20070701084227/http://www.codeproject.com/cpp/FastDelegate.asp Fast delegates in C++] | * [https://web.archive.org/web/20070701084227/http://www.codeproject.com/cpp/FastDelegate.asp Fast delegates in C++] | ||
* [http://perfectjpattern.sourceforge.net/delegates.html PerfectJPattern Open Source Project], Provides a reusable implementation of Delegates in | * [http://perfectjpattern.sourceforge.net/delegates.html PerfectJPattern Open Source Project], Provides a reusable implementation of Delegates in जावा | ||
<!--Categories-->[[Category: ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग]] [[Category: प्रोटोटाइप-आधारित प्रोग्रामिंग]] | <!--Categories-->[[Category: ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग]] [[Category: प्रोटोटाइप-आधारित प्रोग्रामिंग]] |
Revision as of 10:40, 26 May 2023
ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग में, डिलिगेशन एक अन्य मूल ऑब्जेक्ट (प्रेषक) के संदर्भ में एक ऑब्जेक्ट (कंप्यूटर विज्ञान) (रिसीवर) के एक अवयव संपत्ति (प्रोग्रामिंग) या प्रणाली (कंप्यूटर प्रोग्रामिंग)) का मूल्यांकन करने के लिए संदर्भित करता है। डिलिगेशन स्पष्ट रूप से किया जा सकता है, भेजने वाली ऑब्जेक्ट को प्राप्त करने वाली ऑब्जेक्ट को पास करके, जो किसी ऑब्जेक्ट उन्मुख भाषा में किया जा सकता है; या निहित रूप से, भाषा के अवयव लुकअप नियमों द्वारा, जिसके लिए सुविधा के लिए भाषा समर्थन की आवश्यकता होती है। वर्ग आधारित प्रोग्रामिंग में इन्हेरिटेंस (ऑब्जेक्ट-उन्मुख प्रोग्रामिंग) के अनुरूप प्रोटोटाइप-आधारित प्रोग्रामिंग में व्यवहार के पुन: उपयोग के लिए अंतर्निहित डिलिगेशन मौलिक प्रणाली है। भाषा के स्तर पर डिलिगेशन का समर्थन करने वाली सबसे प्रसिद्ध भाषाएँ स्व (प्रोग्रामिंग भाषा) हैं, जो कि अपरिवर्तनीय ऑब्जेक्ट पैरेंट स्लॉट (कंप्यूटर आर्किटेक्चर) की अपनी धारणा के माध्यम से डिलिगेशन की धारणा को सम्मिलित करती हैं, जो स्वयं कॉल और जावास्क्रिप्ट पर प्रणाली खोज में उपयोग की जाती हैं; विस्तृत जानकारी के लिए जावास्क्रिप्ट डिलिगेशन देखें।
'डिलिगेशन' शब्द का उपयोग ऑब्जेक्टों के बीच विभिन्न अन्य संबंधों के लिए भी शिथिल रूप से किया जाता है; अधिक जानका के लिए डिलिगेशन (प्रोग्रामिंग) देखें। बार-बार भ्रमित होने वाली अवधारणाएं बस किसी अन्य ऑब्जेक्ट का उपयोग कर रही हैं, जिसे अधिक सटीक रूप से कंसल्टेशन या ऑब्जेक्ट एकत्रीकरण के रूप में संदर्भित किया जाता है; और किसी अन्य ऑब्जेक्ट पर संबंधित अवयव का मूल्यांकन करके एक ऑब्जेक्ट पर एक अवयव का मूल्यांकन करना, विशेष रूप से प्राप्त ऑब्जेक्ट के संदर्भ में, जिसे अधिक सटीक रूप से फॉरवार्डिंग (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) के रूप में जाना जाता है, (जब एक रैपर ऑब्जेक्ट नहीं होता है) लपेटी हुई ऑब्जेक्ट को पास न करें)।[1][2][lower-alpha 1] डिलिगेशन पैटर्न डेलिगेशन को लागू करने के लिए एक सॉफ्टवेयर डिजाइन पैटर्न है, हालांकि इस शब्द का उपयोग कंसल्टेशन या फॉरवार्डिंग के लिए भी शिथिल रूप से किया जाता है।
अवलोकन
तथाकथित स्व कॉल भेजने के लिए प्रणाली लुकअप नियमों का उपयोग करने वाली प्रोग्रामिंग भाषा सुविधा के रूप में डिलिगेशन की भावना को हेनरी लिबरमैन ने अपने 1986 के पेपर यूजिंग प्रोटोटाइप ऑब्जेक्ट्स टू इम्प्लीमेंट शेयर्ड बिहेवियर इन ऑब्जेक्ट-ओरिएंटेड सिस्टम्स में परिभाषित किया था।
डिलिगेशन डायनेमिक बाइंडिंग (कंप्यूटर साइंस) पर निर्भर है, क्योंकि इसके लिए आवश्यक है कि एक दी गई प्रणाली कॉल रनटाइम पर कोड के विभिन्न खंडों को लागू कर सके।[citation needed]. प्रोग्राम घटकों के व्यवहार को अनुकूलित करने के साधन के रूप में इसका उपयोग मैक-ओएस (और इसके पूर्ववर्ती नेक्स्टस्टेप) में किया जाता है।[3] यह विंडोज़ को प्रबंधित करने के लिए एकल ओएस-प्रदत्त वर्ग का उपयोग करने जैसे कार्यान्वयन को सक्षम करता है, क्योंकि वर्ग एक डिलिगेशन लेता है जो प्रोग्राम-विशिष्ट है और आवश्यकतानुसार डिफ़ॉल्ट व्यवहार को ओवरराइड कर सकता है। उदाहरण के लिए, जब उपयोगकर्ता क्लोज बॉक्स पर क्लिक करता है, तो विंडो प्रबंधक डिलिगेशन को एक विंडोशोल्डक्लोज कॉल भेजता है, और डिलिगेशन विंडो के बंद होने में देरी कर सकता है, यदि विंडो की सामग्री द्वारा सुरक्षित किये गए डेटा का डिलिगेशनत्व नहीं किया जाता है।
डिलिगेशन की विशेषता स्वयं के देर से बाध्यकारी होने के रूप में हो सकती है (और फॉरवार्डिंग (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) से अलग) :[4]
... messages sent to the
self
(orthis
) variable in the parent will "come back" to the object that originally received the message.
वह यह है कि सेल्फ
प्राप्त करने वाली ऑब्जेक्ट में एक प्रणाली में परिभाषा समय पर उस ऑब्जेक्ट के लिए स्थिर रूप से बाध्य नहीं है (जैसे संकलन समय या जब फलन किसी ऑब्जेक्ट से जुड़ा होता है), बल्कि मूल्यांकन समय पर, यह मूल ऑब्जेक्ट के लिए बाध्य होता है।
यह तर्क दिया गया है कि प्रोग्राम कोड को अधिक पठनीय और समझने योग्य बनाने के लिए कुछ प्रकरणों में डिलिगेशन को इनहेरिटेंस (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) के लिए प्राथमिकता दी जा सकती है।[5] स्पष्ट डिलिगेशन काफी व्यापक होने के अतिरिक्त, अपेक्षाकृत कुछ प्रमुख प्रोग्रामिंग भाषाएं इन्हेरिटेंस के वैकल्पिक मॉडल के रूप में डिलिगेशन को लागू करती हैं। डिलिगेशन और इन्हेरिटेंस के बीच सटीक संबंध जटिल है; कुछ लेखक उन्हें समतुल्य मानते हैं, या एक को दूसरे का विशेष प्रकरण मानते हैं।[6]
डिलिगेशन के लिए भाषा समर्थन
प्रणाली लुकअप नियमों के माध्यम से डिलिगेशन का समर्थन करने वाली भाषाओं में, प्रणाली प्रेषण को इन्हेरिटेंस में वर्चुअल प्रणालीयों के लिए परिभाषित किया गया है: यह सदैव सबसे विशिष्ट प्रणाली है जिसे प्रणाली लुकअप के समय चुना जाता है। इसलिए यह मूल रिसीवर इकाई है जो प्रणाली लुकअप की शुरुआत है, भले ही यह किसी अन्य ऑब्जेक्ट पर नियंत्रण पारित कर दिया गया हो (डिलिगेशनत्व लिंक के माध्यम से, ऑब्जेक्ट संदर्भ नहीं)।
डिलिगेशन का यह लाभ है कि यह रन टाइम पर हो सकता है और किसी प्रकार की संस्थाओं के केवल एक सबसेट को प्रभावित कर सकता है और रन टाइम पर हटाया भी जा सकता है। इन्हेरिटेंस, इसके विपरीत, सामान्यतः उदाहरणों के अतिरिक्त प्रकार को लक्षित करता है, और संकलन समय तक ही सीमित है। दूसरी ओर, इन्हेरिटेंस को स्थिर रूप से टाइप-चेक किया जा सकता है, जबकि डिलिगेशन सामान्यतः जेनरिक के बिना नहीं हो सकता है (हालांकि डिलिगेशन का प्रतिबंधित संस्करण स्थिर रूप से टाइप-सुरक्षित हो सकता है)[7]). डिलिगेशन को विशिष्ट ऑब्जेक्टों के लिए रन-टाइम इनहेरिटेंस कहा जा सकता है।
यहाँ C शार्प (प्रोग्रामिंग भाषा) | C#/जावा (प्रोग्रामिंग भाषा) जैसी भाषा में एक स्यूडोकोड उदाहरण दिया गया है:
class A {
void foo() {
// "this" also known under the names "current", "me" and "self" in other languages
this.bar();
}
void bar() {
print("a.bar");
}
};
class B {
private delegate A a; // delegation link
public B(A a) {
this.a = a;
}
void foo() {
a.foo(); // call foo() on the a-instance
}
void bar() {
print("b.bar");
}
};
a = new A();
b = new B(a); // establish delegation between two objects
कॉलिंग b.foo()
के परिणामस्वरूप b.bar मुद्रित होगा, चूँकि this
मूल रिसीवर ऑब्जेक्ट को संदर्भित करता है, b
, के संदर्भ में a
. परिणामी अस्पष्टता this
को ऑब्जेक्ट सिज़ोफ्रेनिया कहा जाता है।
निहित अनुवाद this
एक स्पष्ट पैरामीटर में, कॉल (in B
, साथ a
एक डिलिगेशन) a.foo()
में अनुवाद करता है, A.foo(b)
, के प्रकार का उपयोग करना a
प्रणाली संकल्प के लिए, लेकिन डिलिगेशन ऑब्जेक्ट b
के लिए this
तर्क कहा जाता है।
इन्हेरिटेंस का उपयोग करते हुए, अनुरूप कोड (बड़े अक्षरों का उपयोग करके यह जोर देने के लिए कि संकल्प वर्गों पर आधारित है, ऑब्जेक्टों पर नहीं) है:
class A {
void foo() {
this.bar();
}
void bar() {
print("A.bar");
}
};
class B extends A {
public B() {}
void foo() {
super.foo(); // call foo() of the superclass (A)
}
void bar() {
print("B.bar");
}
};
b = new B();
कॉलिंग b.foo()
का परिणाम b.bar होगा। इस प्रकरण में, this
असंदिग्ध है: एक ही ऑब्जेक्ट है, b
, और this.bar()
उपवर्ग पर प्रणाली को हल करता है।
सामान्य रूप से प्रोग्रामिंग लैंग्वेज एक भाषा अवधारणा के रूप में डेलिगेशन के इस असामान्य रूप का समर्थन नहीं करती हैं, लेकिन कुछ अपवाद हैं।[citation needed].
ड्युअल इन्हेरिटेंस
यदि भाषा डिलिगेशन और इन्हेरिटेंस दोनों का समर्थन करती है, तो एक ही समय में दोनों प्रणालियों का उपयोग करके ड्युअल इन्हेरिटेंस कर सकते हैं
class C extends A {
delegationlink D d;
}
यह प्रणाली लुकअप के लिए अतिरिक्त नियमों की मांग करता है, क्योंकि अब संभावित रूप से दो प्रणालीयां हैं जिन्हें सबसे विशिष्ट (दो लुकअप पथों के कारण) के रूप में दर्शाया जा सकता है।
संबंधित क्षेत्र
डिलिगेशन को संस्थाओं के बीच कोड और डेटा साझा करने के लिए निम्न स्तर के तंत्र के रूप में वर्णित किया जा सकता है। इस प्रकार यह अन्य भाषा निर्माणों के लिए नींव तैयार करता है। विशेष रूप से भूमिका-उन्मुख प्रोग्रामिंग भाषाएँ डिलिगेशन का उपयोग करती रही हैं, लेकिन विशेष रूप से पुराने लोगों ने डिलिगेशन का उपयोग करने का दावा करते हुए तथ्यात्मक रूप से एकत्रीकरण (भूमिका उन्मुख प्रोग्रामिंग) का उपयोग किया। इसे धोखा नहीं माना जाना चाहिए, केवल डिलिगेशन का अर्थ है (जैसा ऊपर वर्णित है) कि निम्न स्तर के तंत्र के रूप में वर्णित किया जाना।
हाल ही में डिलिगेशन बांटने पर भी काम किया गया है, इसलिए खोज इंजन के ग्राहक (सस्ते होटल के कमरे ढूँढना) सर्वोत्तम हिट और सामान्य पुन: प्रयोज्य कार्यक्षमता साझा करने के लिए डिलिगेशन का उपयोग करके एक साझा इकाई का उपयोग कर सकते हैं।
2003 में अर्न्स्ट और लॉरेंज द्वारा आस्पेक्ट ओरिएंटेड प्रोग्रामिंग सलाह संकल्प के लिए डिलिगेशन का भी सुझाव दिया गया है।
यह भी देखें
- डिलिगेशन पैटर्न
- एडेप्टर पैटर्न
- हुकिंग
- जारी
- कार्यान्वयन इन्हेरिटेंस
- इन्हेरिटेंस शब्दार्थ
- सिज़ोफ्रेनिया (ऑब्जेक्ट-उन्मुख प्रोग्रामिंग)
- आभासी इन्हेरिटेंस
- आवरण फलन
अंतर करना:
- डिलिगेशन (सीएलआई)
- डिलिगेशन (प्रोग्रामिंग)
- ऑब्जेक्ट एकत्रीकरण
- फॉरवार्डिंग (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)
टिप्पणियाँ
- ↑ Beck 1997 uses the terms "simple delegation" for when the receiving object does not have access to the sending object, and "self delegation" for when the receiving object does have access to the sending object; in modern language these are "forwarding" and "delegation", as used in this article.
संदर्भ
- ↑ Gamma et al. 1995, "Delegation", pp. 20–21.
- ↑ Beck 1997, "Delegation", pp. 64–69.
- ↑ Apple (2009-08-20). "Cocoa Fundamentals Guide: Delegates and Data Sources". Apple Developer Connection. Retrieved 2009-09-11.
- ↑ "Intersecting Classes and Prototypes". Perspectives of Systems Informatics: 5th International Andrei Ershov Memorial Conference, PSI 2003, Akademgorodok, Novosibirsk, Russia, July 9-12, 2003, Revised Papers. p. 38.
- ↑ [1]Trygve Reenskaug, Dept. of Informatics, University of Oslo, "The Case for Readable Code" (2007)
- ↑ Stein, Lynn Andrea. प्रतिनिधिमंडल विरासत है. OOPSLA '87 Conference proceedings on Object-oriented programming systems, languages and applications. pp. 138–146. doi:10.1145/38807.38820.
- ↑ Günter Kniesel (1999-11-19). "Type-Safe Delegation for Run-Time Component Adaptation". ECOOP' 99 — Object-Oriented Programming. Lecture Notes in Computer Science. Vol. 1628. Springer. pp. 351–366. CiteSeerX 10.1.1.33.7584. doi:10.1007/3-540-48743-3_16. ISBN 978-3-540-66156-6. Archived from the original on 2015-03-04. Retrieved 2015-03-04.
यह पेपर विशुद्ध रूप से अग्रेषण-आधारित वस्तु संरचना के पूरक के रूप में वस्तु-आधारित विरासत (जिसे प्रतिनिधिमंडल के रूप में भी जाना जाता है) का प्रस्ताव करता है। यह एक क्लास-आधारित ऑब्जेक्ट मॉडल में प्रतिनिधिमंडल का एक प्रकार का सुरक्षित एकीकरण प्रस्तुत करता है और दिखाता है कि यह अग्रेषण-आधारित घटक इंटरैक्शन द्वारा सामना की जाने वाली समस्याओं को कैसे दूर करता है, यह कैसे घटकों की स्वतंत्र विस्तारशीलता और अप्रत्याशित, गतिशील घटक अनुकूलन का समर्थन करता है।
{{cite book}}
: CS1 maint: bot: original URL status unknown (link)
- Lieberman, Henry (1986). "Using prototypical objects to implement shared behavior in object-oriented systems". Conference proceedings on Object-oriented programming systems, languages and applications. pp. 214–223. CiteSeerX 10.1.1.48.69. doi:10.1145/960112.28718.
{{cite book}}
:|journal=
ignored (help)CS1 maint: location missing publisher (link) - Lynn Andrea Stein, Henry Liberman, David Ungar: A shared view of sharing: The Treaty of Orlando. In: Won Kim, Frederick H. Lochovsky (Eds.): Object-Oriented Concepts, Databases, and Applications ACM Press, New York 1989, ch. 3, pp. 31–48 ISBN 0-201-14410-7 (online at Citeseer)
- Gamma, Erich; Helm, Richard; Johnson, Ralph; Vlissides, John (1995). Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley. ISBN 978-0-201-63361-0.
- Malenfant, J.: On the Semantic Diversity of Delegation-Based Programming Languages, Proceedings of the OOPSLA95, New York: ACM 1995, pp. 215–230.
- Beck, Kent (1997). Smalltalk Best Practice Patterns. Prentice Hall. ISBN 978-0134769042.
- Kasper Bilsted Graversen: The nature of roles---A taxonomic analysis of roles as a language construct. Ph.D. Thesis 2006, (Online at IT University of Copenhagen)
बाहरी संबंध
- A new way to implement Delegate in C++
- Fast delegates in C++
- PerfectJPattern Open Source Project, Provides a reusable implementation of Delegates in जावा