एकाधिक प्रेषण

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

प्रेषण को समझना
कंप्यूटर सॉफ़्टवेयर के डेवलपर्स सामान्यतः स्रोत कोड को विभिन्न नाम वाले ब्लॉक में व्यवस्थित करते हैं। जिन्हें सबरूटीन्स प्रक्रियाओं उपप्रोग्राम प्रकार्य या पद्धति कहा जाता है और इस प्रकार प्रकार्य में कोड को कॉल करके निष्पादित किया जाता है और कोड शब्द का निष्पादित जो उसके नाम का संदर्भित करता है। यह अस्थायी रूप से कॉल किए गए प्रकार्य पर नियंत्रण स्थानांतरित करता है और इस प्रकार जब प्रकार्य का निष्पादन पूरा हो जाता है, तो नियंत्रण को सामान्यतः कॉल करने वाले के निर्देश पर वापस स्थानांतरित कर दिया जाता है, जो संदर्भ का अनुसरण करता है।

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

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

इसके विपरीत, एकाधिक प्रेषण वाली लैंग्वेज में, चयनित विधि केवल वह है जिसके तर्क प्रकार्य कॉल की संख्या और प्रकार से मेल खाते हैं। किसी विशेष कॉल में किए गए फंक्शन/विधि के स्वामित्व वाले कोई विशेष तर्क नहीं है.।

सामान्य लिस्प ऑब्जेक्ट प्रणाली (सीएलओएस) एकाधिक प्रेषण का एक प्रारंभिक और प्रसिद्ध उदाहरण है। एकाधिक प्रेषण के उपयोग का एक और उल्लेखनीय उदाहरण जूलिया प्रोग्रामिंग लैंग्वेज के रूप में है।

एकाधिक प्रेषण को  फंक्शन ओवरलोडिंग से भिन्न  किया जाना चाहिए, जिसमें स्टेटिक टाइपिंग सूचना, जैसे किसी शब्द की घोषित या अनुमानित प्रकार या सबटाइपिंग वाली लैंग्वेज  में आधार प्रकार का उपयोग निर्धारित करने के लिए किया जाता है कि दी गई कॉल साइट पर कौन सी संभावनाओं का प्रयोग किया जाएगा और यह निर्धारण प्रोग्राम निष्पादन प्रारंभ होने से पूर्व या दूसरे समय में संकलित या संपर्क समय में किया जाता है और उसके बाद किसी दिए गए परिनियोजन या प्रोग्राम  को चलाने के लिए अपरिवर्तनीय होता है। कई लैंग्वेज जैसे C++ मजबूत फंक्शन ओवरलोडिंग को प्रस्तुत करती हैं लेकिन गतिशील  एकाधिक प्रेषण  को प्रस्तुत  नहीं करती हैं और इस प्रकार C++ केवल वर्चुअल फ़ंक्शंस के उपयोग के माध्यम से गतिशील  सिंगल प्रेषण  की अनुमति देता है।

डेटा प्रकार
उन लैंग्वेज के साथ काम करते समय जो कंपाइलिंग समय पर डेटा प्रकारों में डिस्क्रिमिनेशन कर सकती हैं, तब विकल्पों में से चयन हो सकता है। जिससे कि कंपाइलिंग समय चयन के लिए ऐसे वैकल्पिक कार्यों को बनाने का कार्य सामान्यतः फंक्शन ओवरलोडिंग के रूप में जाना जाता है।

प्रोग्रामिंग लैंग्वेज में लेट बन्डिंग होते है, जो रन टाइम तक डेटा प्रकार की पहचान को रोकते हैं, जिससे कि वैकल्पिक कार्यों के बीच चयन होना चाहिए, जो गतिशील रूप से निर्धारित प्रकार के प्रकार्य तर्कों पर आधारित होते है। ऐसे कार्य जिनके वैकल्पिक कार्यान्वयन इस विधि से चुने जाते हैं, उन्हें सामान्यतः मल्टीमेथ्स के रूप में संदर्भित किया जाता है।

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

विषय
गतिशील प्रेषण के साथ कई ज्ञात समस्याएं सिंगल और मल्टीपल दोनों के रूप में होती है। जबकि इनमें से कई विषय एकल-प्रेषण के लिए हल किए गए हैं, जो कि ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग लैंग्वेज में दशकों से एक मानक विशेषता के रूप में रही है, लेकिन इन विषय को कई प्रेषण  की स्थिति में और भी जटिल हो जाते हैं।

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

तथाकथित अभिव्यक्ति समस्या मूल पैकेज में स्रोत को संशोधित किए बिना मूल पैकेज में परिभाषित व्यवहार फ़ंक्शंस या डेटाटाइप्स को विस्तारित करने के लिए एक पैकेज में कोड की क्षमता से संबंधित होती है और इस प्रकार पारंपरिक एकल-प्रेषण ओओ लैंग्वेज नए डेटा प्रकारों को जोड़ने के लिए ट्रिवीअल बनाती हैं लेकिन नए कार्यों को पारंपरिक कार्यात्मक लैंग्वेज के विपरीत प्रभाव पड़ता है और एकाधिक प्रेषण यदि सही ढंग से कार्यान्वित किया जाता है, जिससे कि दोनों की अनुमति मिलती है और निम्नलिखित गुण होने के लिए एकाधिक प्रेषण के कार्यान्वयन के लिए यह वांछनीय होता है,


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

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

संभावित रेसोलुशन के रूप में सम्मलित हैं,


 * किसी भी अस्पष्ट कॉल को त्रुटि के रूप में माना जा सकता है। इसे संकलन समय पर या अन्यथा परिनियोजन से पहले कैप्चर किया जाता है, लेकिन रनटाइम तक पता नहीं लगाया जा सकता है और रनटाइम त्रुटि उत्पन्न हो सकती है।।
 * तर्कों को क्रमबद्ध करना उदाहरण के रूप में सबसे विशिष्ट तर्क की स्थिति का चयन किया जाता है और बाद के तर्कों को एम्बिगुइटी समाधान के लिए नहीं माना जाता है जब तक कि पहला तर्क समस्या को हल करने के लिए अपर्याप्त नहीं होता है।
 * एक दिशा या किसी अन्य में एम्बिगुइटी को हल करने के लिए अन्य नियमों का निर्माण किया जाता है और इस प्रकार कभी-कभी ऐसे नियम अनैतिक और आश्चर्यजनक रूप में हो सकते हैं। उदाहरण के लिए, सी ++ में स्थिर अधिभार संकल्प के नियमों के रूप में होता है, जो वास्तव में मेल खाता है, जिससे कि एक प्रकार से बेहतर मिलान माना जाता है जो आधार प्रकार संदर्भ या सामान्य टेम्पलेट पैरामीटर से मेल खाता है। चूंकि, यदि एकमात्र संभावित मिलान या तो आधार प्रकार या सामान्य पैरामीटर के माध्यम से होता है, तो सामान्य पैरामीटर को आधार प्रकार से अधिक पसंद किया जाता है, एक नियम जो कभी-कभी आश्चर्यजनक व्यवहार उत्पन्न करता है।

एफिशिएंसी
प्रोग्रामिंग लैंग्वेज सहित एकल-प्रेषण का कुशल कार्यान्वयन, जो भिन्न -भिन्न ऑब्जेक्ट कोड के लिए संकलित किया जाता है और निम्न-स्तर के गैर लैंग्वेज लिंकर से जोड़ा जाता है, जिसमें गतिशील रूप से प्रोग्राम लोड/स्टार्ट समय पर होते है, जिससे कि यहां तक के अनुप्रयोग कोड की दिशा में गतिशील रूप से सम्मलित है। कोड सर्वविदित C++ और अन्य प्रारंभिक OO लैंग्वेज में विकसित व्यवहार्य विधि लगभग स्थिर विधि कॉल के रूप में तेज़ होती है, जहाँ प्रत्येक वर्ग में उस वर्ग के आभासी कार्यों के अनुरूप प्रकार्य पॉइंटर्स की एक सरणी होती है। जिसके गैर-अनुकूलित स्थिति में भी O(1) ओवरहेड और केवल एक अतिरिक्त मेमोरी लुकअप की आवश्यकता होती है। चूंकि, व्यवहार्य विधि प्रकार्य नाम का उपयोग करती है न कि तर्क प्रकार को इसकी लुकअप कुंजी के रूप में फ़ंक्शन और एकाधिक प्रेषण की स्थिति में स्केल नहीं करती है। यह कक्षाओं की विशेषताओं की विधि के ऑब्जेक्ट ओरिएंटेड प्रतिमान पर भी निर्भर करता है, न कि किसी विशेष डेटाटाइप से स्वतंत्र स्टैंडअलोन संस्थाओं पर निर्भर करता है।

बहु-प्रेषण का कुशल कार्यान्वयन एक सतत शोध समस्या के रूप में बनी हुई है।

अभ्यास में प्रयोग करें
यह अनुमान लगाने के लिए कि प्रैक्टिस में कितनी बार एकाधिक प्रेषण का उपयोग किया जाता है। मुस्चेविसी एट अल, गतिशील प्रेषण का उपयोग करने वाले प्रोग्राम का अध्ययन किया जाता है। उन्होंने छह भिन्न -भिन्न  लैंग्वेज में लिखे गए नौ अनुप्रयोगों का विश्लेषण किया है, जिनमें ज्यादातर कंपाइलर थे कॉमन लिस्प ऑब्जेक्ट प्रणाली डायलन (प्रोग्रामिंग लैंग्वेज),  सेसिल (प्रोग्रामिंग लैंग्वेज) , मल्टीजावा, डीजल और नाइस का विश्लेषण किया है। उनके परिणाम बताते हैं कि जेनेरिक फंक्शंस का 13–32% एक तर्क के गतिशील प्रकार का उपयोग करते हैं, जबकि उनमें से 2.7–6.5% गतिशील प्रकार के कई तर्कों का उपयोग करते हैं। शेष 65-93% सामान्य कार्यों में एक ठोस विधि ओवरराइडर के रूप में है और इसलिए उनके तर्कों के सक्रिय प्रकारों का उपयोग करने के लिए विचार नहीं किया जाता है। इसके अतिरिक्त, अध्ययन की रिपोर्ट है कि 2-20% सामान्य कार्यों में दो और 3-6% में तीन ठोस कार्य कार्यान्वयन के रूप में है और इस प्रकार अधिक ठोस ओवरराइडर्स वाले कार्यों के लिए संख्या तेजी से कमी आती है।

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

इन पत्रों के डेटा को निम्नलिखित तालिका में संक्षेपित किया गया है, जहाँ प्रेषण अनुपात  सामान्य कार्य प्रति विधियों की औसत संख्या के रूप में होता है; पसंद अनुपात   विधियों की संख्या के वर्ग का माध्य होता है और इस प्रकार बड़ी संख्या में विधियों के साथ कार्यों की आवृत्ति को अच्छे ढंग से मापने के लिए किया जाता है; और विशेषज्ञता की डिग्री   प्रति विधि प्रकार-विशिष्ट तर्कों की औसत संख्या के रूप में होती है, अर्थात उन तर्कों की संख्या जिन्हें प्रेषित किया जाता है।

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

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

C#
C शार्प प्रोग्रामिंग लैंग्वेज ने संस्करण 4 में गतिशील मल्टीमेथड्स के लिए समर्थन प्रस्तुत किया  है। अप्रैल 2010 में 'डायनामिक' कीवर्ड का उपयोग करते हुए। निम्न उदाहरण मल्टीमेथ्स को प्रदर्शित करता है। कई अन्य वैधानिक रूप से टाइप की गई लैंग्वेज की तरह C# भी स्टैटिक मेथड ओवरलोडिंग का समर्थन करता है। माइक्रोसॉफ्ट आशा करता है कि अधिकांश परिदृश्यों में डेवलपर्स गतिशील टाइपिंग पर स्थिर टाइपिंग का चयन करते है। 'डायनामिक' कीवर्ड कॉम ऑब्जेक्ट्स और डायनामिक रूप से टाइप की गई डॉट नेट लैंग्वेज के साथ इंटरऑपरेबिलिटी का समर्थन करता है।



नीचे दिया गया उदाहरण C# 9 और C# 10 में शुरू की गई फीचर का उपयोग करता है।

using static ColliderLibrary;

Console.WriteLine(Collide(new Asteroid(101), new Spaceship(300))); Console.WriteLine(Collide(new Asteroid(10), new Spaceship(10))); Console.WriteLine(Collide(new Spaceship(101), new Spaceship(10))); string Collide(SpaceObject x, SpaceObject y) => x.Size > 100 && y.Size > 100 ? "Big boom!" : CollideWith(x as dynamic, y as dynamic); // Dynamic dispatch to CollideWith method class ColliderLibrary {    public static string CollideWith(Asteroid x, Asteroid y) => "a/a"; public static string CollideWith(Asteroid x, Spaceship y) => "a/s"; public static string CollideWith(Spaceship x, Asteroid y) => "s/a"; public static string CollideWith(Spaceship x, Spaceship y) => "s/s"; } abstract record SpaceObject(int Size); record Asteroid(int Size) : SpaceObject(Size); record Spaceship(int Size) : SpaceObject(Size); Output: Big boom!

a/s s/s

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

सामान्य लिस्प
कॉमन लिस्प जैसी कई प्रेषण वाली लैंग्वेज  में, यह इस तरह दिख सकती है और इस प्रकार कॉमन लिस्प का उदाहरण दिखाया गया है

और इसी तरह अन्य विधि के लिए स्पष्ट परीक्षण और गतिशील कास्टिंग का उपयोग किया जाता है।

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

जूलिया
जूलिया प्रोग्रामिंग लैंग्वेज में बिल्ट-इन एकाधिक प्रेषण के रूप में होता है और यह लैंग्वेज डिजाइन के लिए केंद्रीय है। उपरोक्त उदाहरण का जूलिया संस्करण में ऐसा दिखाई देता है।

आउटपुट:

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

इसमें मल्टीमेथ्स और मल्टीसब दोनों होते है। चूँकि, अधिकांश ऑपरेटर सबरूटीन्स के रूप में होते हैं, इसमें कई प्रेषण ऑपरेटर्स भी होते हैं।

सामान्य प्रकार की बाधाओं के साथ-साथ, इसमें बाधाएँ भी होती हैं जो बहुत विशिष्ट सबरूटीन्स बनाने की अनुमति देती हैं।

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

जावास्क्रिप्ट में गतिशील रूप से टाइप किया गया संस्करण होता है।

टाइपस्क्रिप्ट में स्टेटिकली टाइप किया गया संस्करण होता है,

पाइथन
लाइब्रेरी (कंप्यूटिंग) एक्सटेंशन का उपयोग करके पायथन (प्रोग्रामिंग लैंग्वेज ) में एकाधिक प्रेषण जोड़ा जा सकता है। उदाहरण के लिए, मॉड्यूल multimethod.py का उपयोग करना और मॉड्यूल multimethods.py के साथ भी[एचटीटीपी://गनोसिस.कक्ष/डाउनलोड/गनोसिस/मैजिक/मुलतईमेथोडस.पी मल्टीमेथोड़स.पी], डेविड मर्ट्ज़, एट अल द्वारा कॉन्फ़िगर करने योग्य डिस्पैच रिज़ॉल्यूशन के साथ पायथन में एकाधिक प्रेषण।

कार्यात्मक रूप से, यह CLOS उदाहरण के समान है, लेकिन सिंटैक्स पारंपरिक पायथन है।

पायथन 2.4 पायथन सिंटैक्स और सिमेंटिक्स # डेकोरेटर्स का उपयोग करते हुए, गुइडो वैन रोसुम ने मल्टीमेथ्स का एक नमूना कार्यान्वयन तैयार किया एक सरलीकृत वाक्य रचना के साथ:

और फिर यह मल्टीमेथड डेकोरेटर को परिभाषित करता है।

PEAK-Rules पैकेज उपरोक्त उदाहरण के समान सिंटैक्स के साथ कई प्रेषण प्रदान करता है। इसे बाद में PyProtocols द्वारा बदल दिया गया। रेग पुस्तकालय भी एकाधिक और विधेय प्रेषण का समर्थन करता है। पायथन सिंटैक्स और शब्दार्थ # प्रकार्य एनोटेशन की शुरुआत के साथ, सरल सिंटैक्स के साथ कई प्रेषण संभव हैं। उदाहरण के लिए, प्लम-प्रेषण का इस्तेमाल करके,

सी
C में गतिशील प्रेषण  नहीं है, इसलिए इसे किसी न किसी रूप में मैन्युअल रूप से लागू किया जाना चाहिए। किसी वस्तु के उपप्रकार की पहचान करने के लिए अक्सर एक एनम का उपयोग किया जाता है। समारोह सूचक शाखा तालिका में इस मान को देखकर गतिशील प्रेषण किया जा सकता है। यहाँ C में एक सरल उदाहरण है:

सी ऑब्जेक्ट प्रणाली लाइब्रेरी के साथ, सी सीएलओएस के समान गतिशील प्रेषण का समर्थन करता है। यह पूरी तरह से एक्स्टेंसिबल है और इसे किसी भी विधि से मैन्युअल रूप से संभालने की आवश्यकता नहीं है। गतिशील  संदेश (विधियाँ) COS के प्रेषण र द्वारा भेजे जाते हैं, जो Objective-C की तुलना में तेज़ है। यहाँ सीओएस में एक उदाहरण है:

सी ++
, C++ मूल रूप से केवल एक प्रेषण का समर्थन करता है, चूंकि 2007 में Bjarne Stroustrup (और सहयोगियों) द्वारा बहु-विधियों (एकाधिक प्रेषण) को जोड़ने का प्रस्ताव दिया गया था। इस सीमा के आसपास काम करने के विधि समान हैं: आगंतुक पैटर्न, गतिशील  कास्ट या लाइब्रेरी का उपयोग करें:

या पॉइंटर-टू-मेथड लुकअप टेबल:

YOMM2 लाइब्रेरी ओपन मल्टीमेथड्स का तेज, ऑर्थोगोनल कार्यान्वयन प्रदान करता है।

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

स्मृति उपयोग को कम करते हुए, निरंतर समय में विधि कॉल को लागू करने के लिए पुस्तकालय तकनीकों के संयोजन (संपीड़ित प्रेषण तालिका, टक्कर मुक्त पूर्णांक हैश तालिका) का उपयोग करता है। जब एक आधुनिक ऑप्टिमाइज़िंग कंपाइलर का उपयोग किया जाता है, तो एक साधारण वर्चुअल सदस्य प्रकार्य को कॉल करने की तुलना में एक एकल आभासी तर्क के साथ एक खुली विधि को कॉल भेजने में केवल 15-30% अधिक समय लगता है।

क्षुद्रग्रह उदाहरण को निम्नानुसार लागू किया जा सकता है:

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

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

जावा
केवल एक प्रेषण वाली लैंग्वेज में, जैसे कि जावा (प्रोग्रामिंग लैंग्वेज ), एकाधिक प्रेषण को एकल प्रेषण के कई स्तरों के साथ अनुकरण किया जा सकता है:



चलने का समय  एक या दोनों स्तरों पर जाँचों का भी उपयोग किया जा सकता है।

प्राथमिक प्रतिमान

 * जूलिया (प्रोग्रामिंग लैंग्वेज )

सामान्य मल्टीमेथ्स का समर्थन

 * सी शार्प 4.0 | सी # 4.0
 * सेसिल (प्रोग्रामिंग लैंग्वेज )
 * क्लोजर
 * कॉमन लिस्प (कॉमन लिस्प ऑब्जेक्ट प्रणाली के माध्यम से)
 * डायलन (प्रोग्रामिंग लैंग्वेज )
 * अमृत (प्रोग्रामिंग लैंग्वेज )
 * किले (प्रोग्रामिंग लैंग्वेज )
 * ग्रूवी (प्रोग्रामिंग लैंग्वेज )
 * कमंद (प्रोग्रामिंग लैंग्वेज )
 * निम (प्रोग्रामिंग लैंग्वेज ), v0.19.x तक (v0.20.0 से कंपाइलर फ्लैग पास करना आवश्यक है)
 * राकू (प्रोग्रामिंग लैंग्वेज )
 * आर (प्रोग्रामिंग लैंग्वेज )
 * सही
 * तब
 * विजुअल बेसिक .नेट|वीबी.नेट लेट बाइंडिंग के माध्यम से, नेट डीएलआर के माध्यम से भी
 * वोल्फ्राम लैंग्वेज प्रतीकात्मक पैटर्न मिलान के माध्यम से
 * Xtend

एक्सटेंशन के माध्यम से

 * कोई भी .NET Framework|.NET लैंग्वेज (पुस्तकालय के माध्यम से MultiMethods.NET)
 * सी (प्रोग्रामिंग लैंग्वेज ) (पुस्तकालय के माध्यम से C ऑब्जेक्ट प्रणाली )
 * सी शार्प (प्रोग्रामिंग लैंग्वेज) | सी # (लाइब्रेरी के माध्यम से multimethod-sharp)
 * C++ (पुस्तकालय के माध्यम से yomm2, multimethods और omm )
 * डी (प्रोग्रामिंग लैंग्वेज ) (पुस्तकालय के माध्यम से openmethods)
 * कारक (प्रोग्रामिंग लैंग्वेज ) (मानक के माध्यम से बहुविध शब्दावली)
 * जावा (प्रोग्रामिंग लैंग्वेज ) (विस्तार MultiJava का प्रयोग करके)
 * जावास्क्रिप्ट (प्रोग्रामिंग लैंग्वेज ) (पैकेज के माध्यम से @arrows/multimethod)
 * पर्ल (मॉड्यूल के माध्यम से Class::Multimethods)
 * पायथन (प्रोग्रामिंग लैंग्वेज ) (के माध्यम से PEAK-Rules, telecommunity.com/ RuleDispatch, gnosis.magic.multimethods, [http:/ /sourceforge.net/projects/pymultimethods/ PyMultimethods],, या प्लम-प्रेषण )
 * रैकेट (प्रोग्रामिंग लैंग्वेज ) (के माध्यम से multimethod-lib)
 * रूबी (प्रोग्रामिंग लैंग्वेज ) (लाइब्रेरी के माध्यम से एकाधिक प्रेषण  लाइब्रेरी और मल्टीमेथोड पैकेज और [https:// rubygems.org/gems/vlx-multi/ Vlx-Multimethods पैकेज])
 * योजना (प्रोग्रामिंग लैंग्वेज ) (उदाहरण के माध्यम से TinyCLOS)
 * टाइपप्रति (पैकेज के माध्यम से @arrows/multimethod)

यह भी देखें

 * विधेय प्रेषण