डिलिगेशन (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)

ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग में, प्रतिनिधिमंडल एक अन्य मूल वस्तु (प्रेषक) के संदर्भ में एक  वस्तु (कंप्यूटर विज्ञान)  (रिसीवर) के एक सदस्य (संपत्ति (प्रोग्रामिंग) या विधि (कंप्यूटर प्रोग्रामिंग)) का मूल्यांकन करने के लिए संदर्भित करता है। प्रत्यायोजन स्पष्ट रूप से किया जा सकता है, भेजने वाली वस्तु को प्राप्त करने वाली वस्तु को पास करके, जो किसी वस्तु उन्मुख भाषा में किया जा सकता है; या निहित रूप से, भाषा के सदस्य लुकअप नियमों द्वारा, जिसके लिए सुविधा के लिए भाषा समर्थन की आवश्यकता होती है। वर्ग आधारित प्रोग्रामिंग में  वंशानुक्रम (वस्तु-उन्मुख प्रोग्रामिंग)  के अनुरूप प्रोटोटाइप-आधारित प्रोग्रामिंग में व्यवहार के पुन: उपयोग के लिए अंतर्निहित प्रतिनिधिमंडल मौलिक विधि है। भाषा के स्तर पर प्रत्यायोजन का समर्थन करने वाली सबसे प्रसिद्ध भाषाएँ स्व (प्रोग्रामिंग भाषा) हैं, जो कि अपरिवर्तनीय ऑब्जेक्ट पैरेंट स्लॉट (कंप्यूटर आर्किटेक्चर) की अपनी धारणा के माध्यम से प्रतिनिधिमंडल की धारणा को शामिल करती हैं, जो स्वयं कॉल और जावास्क्रिप्ट पर विधि खोज में उपयोग की जाती हैं; JavaScript#Delegative देखें।

'प्रतिनिधिमंडल' शब्द का उपयोग वस्तुओं के बीच विभिन्न अन्य संबंधों के लिए भी शिथिल रूप से किया जाता है; अधिक के लिए प्रतिनिधिमंडल (प्रोग्रामिंग) देखें। बार-बार भ्रमित होने वाली अवधारणाएं बस किसी अन्य वस्तु का उपयोग कर रही हैं, जिसे अधिक सटीक रूप से परामर्श या ऑब्जेक्ट एकत्रीकरण के रूप में संदर्भित किया जाता है; और किसी अन्य वस्तु पर संबंधित सदस्य का मूल्यांकन करके एक वस्तु पर एक सदस्य का मूल्यांकन करना, विशेष रूप से प्राप्त वस्तु के संदर्भ में, जिसे अधिक सटीक रूप से  अग्रेषण (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)  के रूप में जाना जाता है (जब एक रैपर ऑब्जेक्ट नहीं होता है) लपेटी हुई वस्तु को पास न करें)। प्रतिनिधिमंडल पैटर्न  डेलिगेशन को लागू करने के लिए एक सॉफ्टवेयर डिजाइन पैटर्न है, हालांकि इस शब्द का उपयोग परामर्श या अग्रेषण के लिए भी शिथिल रूप से किया जाता है।

सिंहावलोकन
तथाकथित स्व कॉल भेजने के लिए विधि लुकअप नियमों का उपयोग करने वाली प्रोग्रामिंग भाषा सुविधा के रूप में प्रतिनिधिमंडल की भावना को हेनरी लिबरमैन ने अपने 1986 के पेपर यूजिंग प्रोटोटाइप ऑब्जेक्ट्स टू इम्प्लीमेंट शेयर्ड बिहेवियर इन ऑब्जेक्ट-ओरिएंटेड सिस्टम्स में परिभाषित किया था।

प्रतिनिधिमंडल डायनेमिक बाइंडिंग (कंप्यूटर साइंस) पर निर्भर है, क्योंकि इसके लिए आवश्यक है कि एक दी गई विधि कॉल रनटाइम पर कोड के विभिन्न खंडों को लागू कर सके।. प्रोग्राम घटकों के व्यवहार को अनुकूलित करने के साधन के रूप में इसका उपयोग macOS (और इसके पूर्ववर्ती NeXTStep) में किया जाता है। यह विंडोज़ को प्रबंधित करने के लिए एकल OS-प्रदत्त वर्ग का उपयोग करने जैसे कार्यान्वयन को सक्षम करता है, क्योंकि वर्ग एक प्रतिनिधि लेता है जो प्रोग्राम-विशिष्ट है और आवश्यकतानुसार डिफ़ॉल्ट व्यवहार को ओवरराइड कर सकता है। उदाहरण के लिए, जब उपयोगकर्ता क्लोज बॉक्स पर क्लिक करता है, तो विंडो प्रबंधक प्रतिनिधि को एक विंडोशोल्डक्लोज: कॉल भेजता है, और प्रतिनिधि विंडो के बंद होने में देरी कर सकता है, अगर विंडो की सामग्री द्वारा सहेजे गए डेटा का प्रतिनिधित्व नहीं किया जाता है।

प्रतिनिधिमंडल की विशेषता हो सकती है (और अग्रेषण (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) से अलग) स्वयं के देर से बाध्यकारी के रूप में: "... messages sent to the self (or this) variable in the parent will "come back" to the object that originally received the message."

वह यह है कि self प्राप्त करने वाली वस्तु में एक विधि परिभाषा में परिभाषा समय पर उस वस्तु के लिए स्थिर रूप से बाध्य नहीं है (जैसे संकलन समय या जब फ़ंक्शन किसी वस्तु से जुड़ा होता है), बल्कि मूल्यांकन समय पर, यह मूल वस्तु के लिए बाध्य होता है।

यह तर्क दिया गया है कि प्रोग्राम कोड को अधिक पठनीय और समझने योग्य बनाने के लिए कुछ मामलों में प्रतिनिधिमंडल को इनहेरिटेंस (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) के लिए प्राथमिकता दी जा सकती है। स्पष्ट प्रतिनिधिमंडल काफी व्यापक होने के बावजूद, अपेक्षाकृत कुछ प्रमुख प्रोग्रामिंग भाषाएं विरासत के वैकल्पिक मॉडल के रूप में प्रतिनिधिमंडल को लागू करती हैं। प्रतिनिधिमंडल और विरासत के बीच सटीक संबंध जटिल है; कुछ लेखक उन्हें समतुल्य मानते हैं, या एक को दूसरे का विशेष मामला मानते हैं।

प्रतिनिधिमंडल के लिए भाषा समर्थन
विधि लुकअप नियमों के माध्यम से प्रतिनिधिमंडल का समर्थन करने वाली भाषाओं में, विधि प्रेषण को विरासत में वर्चुअल विधियों के लिए परिभाषित किया गया है: यह हमेशा सबसे विशिष्ट विधि है जिसे विधि लुकअप के दौरान चुना जाता है। इसलिए यह मूल रिसीवर इकाई है जो विधि लुकअप की शुरुआत है, भले ही यह किसी अन्य ऑब्जेक्ट पर नियंत्रण पारित कर दिया गया हो (प्रतिनिधित्व लिंक के माध्यम से, ऑब्जेक्ट संदर्भ नहीं)।

प्रत्यायोजन का यह लाभ है कि यह रन टाइम पर हो सकता है और किसी प्रकार की संस्थाओं के केवल एक सबसेट को प्रभावित कर सकता है और रन टाइम पर हटाया भी जा सकता है। विरासत, इसके विपरीत, आमतौर पर उदाहरणों के बजाय प्रकार को लक्षित करता है, और संकलन समय तक ही सीमित है। दूसरी ओर, वंशानुक्रम को स्थिर रूप से टाइप-चेक किया जा सकता है, जबकि प्रतिनिधिमंडल आम तौर पर जेनरिक के बिना नहीं हो सकता है (हालांकि प्रतिनिधिमंडल का प्रतिबंधित संस्करण स्थिर रूप से टाइप-सुरक्षित हो सकता है) ). प्रतिनिधिमंडल को विशिष्ट वस्तुओं के लिए रन-टाइम इनहेरिटेंस कहा जा सकता है।

यहाँ C Sharp (प्रोग्रामिंग भाषा) | C#/Java (प्रोग्रामिंग भाषा) जैसी भाषा में एक स्यूडोकोड उदाहरण दिया गया है:

कॉलिंग b.foo के परिणामस्वरूप b.bar मुद्रित होगा, चूँकि this मूल रिसीवर ऑब्जेक्ट को संदर्भित करता है, b, के संदर्भ में a. परिणामी अस्पष्टता this को वस्तु सिज़ोफ्रेनिया कहा जाता है।

निहित अनुवाद this एक स्पष्ट पैरामीटर में, कॉल (in B, साथ a एक प्रतिनिधि) a.foo में अनुवाद करता है A.foo(b), के प्रकार का उपयोग करना a विधि संकल्प के लिए, लेकिन प्रतिनिधि वस्तु b के लिए this तर्क।

वंशानुक्रम का उपयोग करते हुए, अनुरूप कोड (बड़े अक्षरों का उपयोग करके यह जोर देने के लिए कि संकल्प वर्गों पर आधारित है, वस्तुओं पर नहीं) है:

कॉलिंग b.foo का परिणाम बी.बार होगा। इस मामले में, this असंदिग्ध है: एक ही वस्तु है, b, और this.bar उपवर्ग पर विधि को हल करता है।

सामान्य रूप से प्रोग्रामिंग लैंग्वेज एक भाषा अवधारणा के रूप में डेलिगेशन के इस असामान्य रूप का समर्थन नहीं करती हैं, लेकिन कुछ अपवाद हैं.

दोहरी विरासत
यदि भाषा प्रतिनिधिमंडल और विरासत दोनों का समर्थन करती है, तो एक ही समय में दोनों तंत्रों का उपयोग करके दोहरी विरासत कर सकते हैं

यह विधि लुकअप के लिए अतिरिक्त नियमों की मांग करता है, क्योंकि अब संभावित रूप से दो विधियां हैं जिन्हें सबसे विशिष्ट (दो लुकअप पथों के कारण) के रूप में दर्शाया जा सकता है।

संबंधित क्षेत्र
प्रत्यायोजन को संस्थाओं के बीच कोड और डेटा साझा करने के लिए निम्न स्तर के तंत्र के रूप में वर्णित किया जा सकता है। इस प्रकार यह अन्य भाषा निर्माणों के लिए नींव तैयार करता है। विशेष रूप से भूमिका-उन्मुख प्रोग्रामिंग भाषाएँ प्रतिनिधिमंडल का उपयोग करती रही हैं, लेकिन विशेष रूप से पुराने लोगों ने प्रतिनिधिमंडल का उपयोग करने का दावा करते हुए तथ्यात्मक रूप से एकत्रीकरण (भूमिका उन्मुख प्रोग्रामिंग) का उपयोग किया। इसे धोखा नहीं माना जाना चाहिए, केवल प्रतिनिधिमंडल का क्या अर्थ है (जैसा ऊपर वर्णित है) की बहुवचन परिभाषाएं।

हाल ही में प्रतिनिधिमंडल बांटने पर भी काम किया गया है, इसलिए उदा। एक खोज इंजन के ग्राहक (सस्ते होटल के कमरे ढूँढना) सर्वोत्तम हिट और सामान्य पुन: प्रयोज्य कार्यक्षमता साझा करने के लिए प्रतिनिधिमंडल का उपयोग करके एक साझा इकाई का उपयोग कर सकते हैं।

2003 में अर्न्स्ट और लॉरेंज द्वारा पहलू आधारित प्रोग्रामिंग सलाह संकल्प के लिए प्रतिनिधिमंडल का भी सुझाव दिया गया है।

यह भी देखें

 * प्रतिनिधिमंडल पैटर्न
 * एडेप्टर पैटर्न
 * हुकिंग
 * जारी
 * कार्यान्वयन विरासत
 * वंशानुक्रम शब्दार्थ
 * सिज़ोफ्रेनिया (वस्तु-उन्मुख प्रोग्रामिंग)
 * आभासी विरासत
 * आवरण समारोह

अंतर करना:
 * प्रतिनिधि (सीएलआई)
 * प्रतिनिधिमंडल (प्रोग्रामिंग)
 * वस्तु एकत्रीकरण
 * अग्रेषण (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)

संदर्भ

 * 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)
 * Malenfant, J.: On the Semantic Diversity of Delegation-Based Programming Languages, Proceedings of the OOPSLA95, New York: ACM 1995, pp. 215–230.
 * 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)
 * Malenfant, J.: On the Semantic Diversity of Delegation-Based Programming Languages, Proceedings of the OOPSLA95, New York: ACM 1995, pp. 215–230.
 * 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)
 * 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 Java