तदर्थ बहुरूपता: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
 
(3 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Short description|Applying polymorphic functions to arguments of different types}}
{{Short description|Applying polymorphic functions to arguments of different types}}
{{Polymorphism}}
{{Polymorphism}}
[[प्रोग्रामिंग भाषा]]ओं में, तदर्थ बहुरूपता<ref>C. Strachey, [http://www.ics.uci.edu/~jajones/INF102-S18/readings/05_stratchey_1967.pdf Fundamental concepts in programming languages]. Lecture notes for International Summer School in Computer Programming, Copenhagen, August 1967</ref> प्रकार का [[बहुरूपता (कंप्यूटर विज्ञान)]] प्रकार का है जिसमें बहुरूपी कार्यों को विभिन्न प्रकार के तर्कों पर प्रयुक्त किया जा सकता है, क्योंकि बहुरूपी कार्य तर्क के प्रकार के आधार पर कई विशिष्ट और संभावित विषम कार्यान्वयनों को निरूपित कर सकता है, जिस पर यह प्रयुक्त होता है . इस प्रकार जब वस्तु-उन्मुख या प्रक्रियात्मक अवधारणाओं पर प्रयुक्त किया जाता है, तो इसे [[समारोह अधिभार|फ़ंक्शन ओवरलोडिंग]] या [[ऑपरेटर ओवरलोडिंग]] के रूप में भी जाना जाता है। इस संदर्भ में तदर्थ शब्द अपमानजनक होने का निश्चय नहीं है; अर्थात यह केवल इस तथ्य को संदर्भित करता है कि इस प्रकार का बहुरूपता [[प्रकार प्रणाली]] की मूलभूत विशेषता नहीं है। यह [[पैरामीट्रिक बहुरूपता]] के विपरीत है, जिसमें बहुरूपी कार्यों को बिना किसी विशिष्ट प्रकार के उल्लेख के लिखा जाता है, और इस प्रकार पारदर्शी विधियों से किसी भी प्रकार के एकल सार कार्यान्वयन को प्रयुक्त किया जा सकता है। यह वर्गीकरण 1967 में [[क्रिस्टोफर स्ट्रेची]] द्वारा उपस्थित किया गया था।  
[[प्रोग्रामिंग भाषा]]ओं में, तदर्थ बहुरूपता<ref>C. Strachey, [http://www.ics.uci.edu/~jajones/INF102-S18/readings/05_stratchey_1967.pdf Fundamental concepts in programming languages]. Lecture notes for International Summer School in Computer Programming, Copenhagen, August 1967</ref> प्रकार का [[बहुरूपता (कंप्यूटर विज्ञान)]] प्रकार का है जिसमें बहुरूपी कार्यों को विभिन्न प्रकार के तर्कों पर प्रयुक्त किया जा सकता है, क्योंकि बहुरूपी कार्य तर्क के प्रकार के आधार पर कई विशिष्ट और संभावित विषम कार्यान्वयनों को निरूपित कर सकता है, जिस पर यह प्रयुक्त होता है . इस प्रकार जब वस्तु-उन्मुख या प्रक्रियात्मक अवधारणाओं पर प्रयुक्त किया जाता है, तो इसे [[समारोह अधिभार|फ़ंक्शन ओवरलोडिंग]] या [[ऑपरेटर ओवरलोडिंग]] के रूप में भी जाना जाता है। इस संदर्भ में तदर्थ शब्द अपमानजनक होने का निश्चय नहीं है; अर्थात यह केवल इस तथ्य को संदर्भित करता है कि इस प्रकार का बहुरूपता [[प्रकार प्रणाली]] की मूलभूत विशेषता नहीं है। यह [[पैरामीट्रिक बहुरूपता]] के विपरीत है, जिसमें बहुरूपी कार्यों को बिना किसी विशिष्ट प्रकार के उल्लेख के लिखा जाता है, और इस प्रकार पारदर्शी विधियों से किसी भी प्रकार के एकल सार कार्यान्वयन को प्रयुक्त किया जा सकता है। यह वर्गीकरण 1967 में [[क्रिस्टोफर स्ट्रेची]] द्वारा उपस्थित किया गया था।  


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


[[ ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग | ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग]] भाषाओं में इस प्रकार का बहुरूपता समान है, इस प्रकार से कई [[ऑपरेटर (प्रोग्रामिंग)]] को फ़ंक्शन के समान विधियों से ओवरलोड करने की अनुमति देते हैं (ऑपरेटर ओवरलोडिंग देखें)। कुछ भाषाएँ जो गतिशील रूप से टाइप नहीं की जाती हैं और उनमें तदर्थ बहुरूपता (टाइप क्लास सहित) का अभाव होता है, जैसे कि लंबे समय तक कार्य करने वाले नाम होते हैं <code>print_int</code>, <code>print_string</code>, आदि। इस प्रकार से किसी के दृष्टिकोण के आधार पर लाभ (अधिक वर्णनात्मक) या हानि (अत्यधिक वर्बोज़) के रूप में देखा जा सकता है।
[[ ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग | ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग]] भाषाओं में इस प्रकार का बहुरूपता समान है, इस प्रकार से कई [[ऑपरेटर (प्रोग्रामिंग)]] को फ़ंक्शन के समान विधियों से ओवरलोड करने की अनुमति देते हैं (ऑपरेटर ओवरलोडिंग देखें)। कुछ भाषाएँ जो गतिशील रूप से टाइप नहीं की जाती हैं और उनमें तदर्थ बहुरूपता (टाइप क्लास सहित) का अभाव होता है, जैसे कि लंबे समय तक कार्य करने वाले नाम होते हैं <code>print_int</code>, <code>print_string</code>, आदि। इस प्रकार से किसी के दृष्टिकोण के आधार पर लाभ (अधिक वर्णनात्मक) या हानि (अत्यधिक वर्बोज़) के रूप में देखा जा सकता है।


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


चूंकि ओवरलोडिंग संकलन समय पर किया जाता है, तथा यह देर से बाध्यकारी के लिए विकल्प नहीं है जैसा कि [[उपप्रकार बहुरूपता]] में पाया जाता है।
चूंकि ओवरलोडिंग संकलन समय पर किया जाता है, तथा यह देर से बाध्यकारी के लिए विकल्प नहीं है जैसा कि [[उपप्रकार बहुरूपता]] में पाया जाता है।


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


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


इस प्रकार, सामान्य शब्दों में सामान्य वर्ग विधि और कन्स्ट्रक्टर ओवरलोडिंग को बहुरूपता नहीं माना जाता है, और वहां अधिक समान भाषाएं होती हैं जिनमें कक्षाएं नियमित वस्तुएं होती हैं। स्मालटाक में, उदाहरण के लिए, कक्षाएं नियमित वस्तुएं हैं I बदले में, इसका मतलब यह है कि कक्षाओं को भेजे गए संदेशों को अतिभारित किया जा सकता है, और उन वस्तुओं को बनाना भी संभव है जो कक्षाओं की तरह व्यवहार करते हैं, बिना उनकी कक्षाओं को कक्षाओं के पदानुक्रम से विरासत में मिला। ये प्रभावी विधियों में से हैं जिनका उपयोग स्मॉलटाक के शक्तिशाली [[प्रतिबिंब (कंप्यूटर विज्ञान)]] क्षमताओं का लाभ उठाने के लिए किया जा सकता है। [[ स्वयं (प्रोग्रामिंग भाषा) |सेल्फ (प्रोग्रामिंग भाषा)]] और न्यूजपीक (प्रोग्रामिंग लैंग्वेज) जैसी भाषाओं में भी इसी तरह की व्यवस्था संभव है।  
इस प्रकार, सामान्य शब्दों में सामान्य वर्ग विधि और कन्स्ट्रक्टर ओवरलोडिंग को बहुरूपता नहीं माना जाता है, और वहां अधिक समान भाषाएं होती हैं जिनमें कक्षाएं नियमित वस्तुएं होती हैं। स्मालटाक में, उदाहरण के लिए, कक्षाएं नियमित वस्तुएं हैं I बदले में, इसका मतलब यह है कि कक्षाओं को भेजे गए संदेशों को अतिभारित किया जा सकता है, और उन वस्तुओं को बनाना भी संभव है जो कक्षाओं की तरह व्यवहार करते हैं, बिना उनकी कक्षाओं को कक्षाओं के पदानुक्रम से विरासत में मिला। ये प्रभावी विधियों में से हैं जिनका उपयोग स्मॉलटाक के शक्तिशाली [[प्रतिबिंब (कंप्यूटर विज्ञान)]] क्षमताओं का लाभ उठाने के लिए किया जा सकता है। [[ स्वयं (प्रोग्रामिंग भाषा) |सेल्फ (प्रोग्रामिंग भाषा)]] और न्यूजपीक (प्रोग्रामिंग लैंग्वेज) जैसी भाषाओं में भी इसी तरह की व्यवस्था संभव है।  


== उदाहरण ==
== उदाहरण ==
Line 28: Line 28:
# <code>"bab" + "oon" = "baboon"</code>  
# <code>"bab" + "oon" = "baboon"</code>  
इन छह फ़ंक्शन कॉलों को संभालने के लिए, कोड के चार अलग-अलग टुकड़ों की आवश्यकता होती है (या तीन, यदि स्ट्रिंग्स को वर्णों की सूची माना जाता है):  
इन छह फ़ंक्शन कॉलों को संभालने के लिए, कोड के चार अलग-अलग टुकड़ों की आवश्यकता होती है (या तीन, यदि स्ट्रिंग्स को वर्णों की सूची माना जाता है):  
* इस प्रकार पहले स्तिथियों में, [[पूर्णांक (कंप्यूटर विज्ञान)]] जोड़ को प्रयुक्त किया जाना चाहिए।  
* इस प्रकार पहले स्तिथियों में, [[पूर्णांक (कंप्यूटर विज्ञान)]] जोड़ को प्रयुक्त किया जाना चाहिए।  
* इस प्रकार दूसरे और तीसरे स्तिथियों में, [[तैरनेवाला स्थल]] | फ़्लोटिंग-पॉइंट जोड़ को प्रयुक्त किया जाना चाहिए (तीसरे स्तिथियों में [[ पदोन्नति टाइप करें |पदोन्नति टाइप करें]] , या टाइप बलपूर्वक के साथ)।  
* इस प्रकार दूसरे और तीसरे स्तिथियों में, [[तैरनेवाला स्थल]] | फ़्लोटिंग-पॉइंट जोड़ को प्रयुक्त किया जाना चाहिए (तीसरे स्तिथियों में [[ पदोन्नति टाइप करें |पदोन्नति टाइप करें]] , या टाइप बलपूर्वक के साथ)।
* चौथे और पांचवें स्तिथियों में, [[सूची (कंप्यूटिंग)]] संयोजन प्रयुक्त किया जाना चाहिए।  
* चौथे और पांचवें स्तिथियों में, [[सूची (कंप्यूटिंग)]] संयोजन प्रयुक्त किया जाना चाहिए।  
* अंतिम स्तिथियों में, [[शाब्दिक स्ट्रिंग]] संघनन प्रयुक्त किया जाना चाहिए।  
* अंतिम स्तिथियों में, [[शाब्दिक स्ट्रिंग]] संघनन प्रयुक्त किया जाना चाहिए।  
इस प्रकार, नाम <code>+</code> वास्तव में तीन या चार पूरी तरह से अलग कार्यों को संदर्भित करता है। यह [[ओवरलोडिंग (प्रोग्रामिंग)]] या अधिक विशेष रूप से, ऑपरेटर ओवरलोडिंग का उदाहरण है।  
इस प्रकार, नाम <code>+</code> वास्तव में तीन या चार पूरी तरह से अलग कार्यों को संदर्भित करता है। यह [[ओवरलोडिंग (प्रोग्रामिंग)]] या अधिक विशेष रूप से, ऑपरेटर ओवरलोडिंग का उदाहरण है।  


पिछले स्तिथियों में प्रयुक्त स्ट्रिंग प्रकारों में अस्पष्टता पर ध्यान दें। विचार करना <code>"123" + "456"</code> जिसमें प्रोग्रामर स्वाभाविक रूप से समाकलन के बजाय जोड़ ग्रहण कर सकता है। वे उम्मीद कर सकते हैं <code>"579"</code> के बजाय <code>"123456"</code>. इसलिए ओवरलोडिंग ऑपरेशन के साथ-साथ अलग-अलग कार्यान्वयन के लिए अलग-अलग अर्थ या शब्दार्थ प्रदान कर सकता है।  
पिछले स्तिथियों में प्रयुक्त स्ट्रिंग प्रकारों में अस्पष्टता पर ध्यान दें। विचार करना <code>"123" + "456"</code> जिसमें प्रोग्रामर स्वाभाविक रूप से समाकलन के बजाय जोड़ ग्रहण कर सकता है। वे उम्मीद कर सकते हैं <code>"579"</code> के बजाय <code>"123456"</code>. इसलिए ओवरलोडिंग ऑपरेशन के साथ-साथ अलग-अलग कार्यान्वयन के लिए अलग-अलग अर्थ या शब्दार्थ प्रदान कर सकता है।  


== यह भी देखें ==
== यह भी देखें ==
Line 45: Line 45:
{{reflist}}
{{reflist}}


[[Category: बहुरूपता (कंप्यूटर विज्ञान)]] [[Category: प्रोग्रामिंग भाषा विषय]] [[Category: टाइप थ्योरी]]
[[Category: Machine Translated Page]]
[[Category:Created On 16/06/2023]]
[[Category:Created On 16/06/2023]]
[[Category:Lua-based templates]]
[[Category:Machine Translated Page]]
[[Category:Pages with script errors]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates that add a tracking category]]
[[Category:Templates that generate short descriptions]]
[[Category:Templates using TemplateData]]
[[Category:टाइप थ्योरी]]
[[Category:प्रोग्रामिंग भाषा विषय]]
[[Category:बहुरूपता (कंप्यूटर विज्ञान)]]

Latest revision as of 11:44, 2 July 2023

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

अर्ली बाइंडिंग

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

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

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

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

लेट बाइंडिंग

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

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

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

उदाहरण

एक ऑपरेटर की कल्पना करो + जिसका उपयोग निम्नलिखित विधियों से किया जा सकता है:

  1. 1 + 2 = 3
  2. 3.14 + 0.0015 = 3.1415
  3. 1 + 3.7 = 4.7
  4. [1, 2, 3] + [4, 5, 6] = [1, 2, 3, 4, 5, 6]
  5. [true, false] + [false, true] = [true, false, false, true]
  6. "bab" + "oon" = "baboon"

इन छह फ़ंक्शन कॉलों को संभालने के लिए, कोड के चार अलग-अलग टुकड़ों की आवश्यकता होती है (या तीन, यदि स्ट्रिंग्स को वर्णों की सूची माना जाता है):

इस प्रकार, नाम + वास्तव में तीन या चार पूरी तरह से अलग कार्यों को संदर्भित करता है। यह ओवरलोडिंग (प्रोग्रामिंग) या अधिक विशेष रूप से, ऑपरेटर ओवरलोडिंग का उदाहरण है।

पिछले स्तिथियों में प्रयुक्त स्ट्रिंग प्रकारों में अस्पष्टता पर ध्यान दें। विचार करना "123" + "456" जिसमें प्रोग्रामर स्वाभाविक रूप से समाकलन के बजाय जोड़ ग्रहण कर सकता है। वे उम्मीद कर सकते हैं "579" के बजाय "123456". इसलिए ओवरलोडिंग ऑपरेशन के साथ-साथ अलग-अलग कार्यान्वयन के लिए अलग-अलग अर्थ या शब्दार्थ प्रदान कर सकता है।

यह भी देखें

  • ऑपरेटर ओवरलोडिंग
  • वर्ग टाइप करें
  • बहुरूपता (कंप्यूटर विज्ञान) (अन्य प्रकार के बहुरूपता)
  • पैरामीट्रिक बहुरूपता

संदर्भ

  1. C. Strachey, Fundamental concepts in programming languages. Lecture notes for International Summer School in Computer Programming, Copenhagen, August 1967