तदर्थ बहुरूपता

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

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

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

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

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

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

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

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

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

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

यह भी देखें

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