सबटाइपिंग: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
{{short description|Form of type polymorphism}} | {{short description|Form of type polymorphism}} | ||
{{Polymorphism}} | {{Polymorphism}} | ||
[[प्रोग्रामिंग भाषा सिद्धांत]] में, सबटाइपिंग (सबटाइपिंग | [[प्रोग्रामिंग भाषा सिद्धांत|प्रोग्रामिंग लैंग्वेज थ्योरी]] में, सबटाइपिंग (सबटाइपिंग पोलिमोर्फ़िज्म या इन्क्लूसिव पोलिमोर्फ़िज्म) [[बहुरूपता (कंप्यूटर विज्ञान)|पोलिमोर्फ़िज्म (कंप्यूटर विज्ञान)]] का रूप है जिसमें सबटाइप [[डेटा प्रकार|डेटा टाइप]] होता है जो [[प्रतिस्थापन|सब्स्टिट्युटबिलिटी]] के नोशन द्वारा किसी अन्य डेटाटाइप (सुपरटाइप) से संबंधित है, जिसका अर्थ है कि प्रोग्राम एलिमेंट्स, सामान्यतः [[सबरूटीन्स]] या फंक्शन, जो सुपरटाइप के एलिमेंट्स पर ऑपरेट करने के लिए लिखे गए हैं, वे सबटाइप के एलिमेंट्स पर भी ऑपरेट कर सकते हैं। यदि S, T का सबटाइप है, तो सबटाइपिंग बाइनरी रिलेशन ( {{math|1=''S'' <: ''T''}}, {{math|1=''S'' ⊑ ''T''}},<ref>Copestake, Ann. Implementing typed feature structure grammars. Vol. 110. Stanford: CSLI publications, 2002.</ref> या {{math|1=''S'' ≤: ''T''}} के रूप में लिखा गया है) का तात्पर्य है कि टाइप S के किसी भी शब्द को किसी भी कॉन्टेक्स्ट में सुरक्षित रूप से प्रयोग किया जा सकता है जहां टाइप T एक्सपेक्टेड होता है। यहां सबटाइपिंग का सेमैंटिक्स विशेष रूप से इस तथ्य पर निर्भर करता है कि सुरक्षित रूप से कैसे उपयोग किया जाए और किसी भी कॉन्टेक्स्ट को किसी फॉर्मल लैंग्वेज या [[प्रोग्रामिंग भाषा|प्रोग्रामिंग लैंग्वेज]] द्वारा डिफाइन किया जाता है। प्रोग्रामिंग लैंग्वेज का [[प्रकार प्रणाली|टाइप सिस्टम]] अनिवार्य रूप से अपने सबटाइपिंग रिलेशन को डिफाइन करता है, जो [[पहचान संबंध|ट्रिविअल]] हो सकता है, लैंग्वेज को कन्वर्शन मैकेनिज्म को सपोर्ट नहीं करना चाहिए। | ||
सबटाइपिंग संबंध के कारण, शब्द कई प्रकार का हो सकता है। सबटाइपिंग इसलिए | सबटाइपिंग संबंध के कारण, शब्द कई प्रकार का हो सकता है। सबटाइपिंग इसलिए पोलिमोर्फ़िज्म का रूप है। [[ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग]] में 'पॉलीमॉर्फिज्म' शब्द का प्रयोग सामान्यतः केवल इस सबटाइपिंग पॉलीमॉर्फिज्म को संदर्भित करने के लिए किया जाता है, जबकि [[पैरामीट्रिक बहुरूपता|पैरामीट्रिक पोलिमोर्फ़िज्म]] की प्रौद्योगिकी को [[सामान्य प्रोग्रामिंग]] माना जाता है। | ||
[[कार्यात्मक प्रोग्रामिंग भाषाएं]] प्रायः [[रिकॉर्ड (कंप्यूटर विज्ञान)]] के सबटाइपिंग की अनुमति देती हैं। परिणामतः, केवल टाइप किए गए लैम्ब्डा गणना को रिकॉर्ड प्रकारों के साथ विस्तारित करना सबसे सरल सैद्धांतिक समुच्चयिंग है जिसमें सबटाइपिंग की उपयोगी धारणा को परिभाषित और अध्ययन किया जा सकता है।<ref>Cardelli, Luca. A semantics of multiple inheritance. In G. Kahn, D. MacQueen, and G. Plotkin, editors, Semantics of Data Types, volume 173 of Lecture Notes in Computer Science, pages 51–67. Springer-Verlag, 1984. Full version in Information and Computation, 76(2/3):138–164, 1988.</ref> क्योंकि परिणामी कलन शब्दों को कई प्रकार की अनुमति देता है, यह अब साधारण प्रकार का सिद्धांत नहीं है। कार्यात्मक प्रोग्रामिंग भाषाओं के पश्चात से, परिभाषा के अनुसार, फ़ंक्शन शाब्दिक का समर्थन करता है, जिसे रिकॉर्ड में भी संग्रहीत किया जा सकता है, सबटाइपिंग के साथ रिकॉर्ड प्रकार ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग की कुछ विशेषताएं प्रदान करते हैं। संभवतः कार्य ात्मक प्रोग्रामिंग भाषाएं सामान्यतः प्रतिबंधित, पैरामीट्रिक | [[कार्यात्मक प्रोग्रामिंग भाषाएं]] प्रायः [[रिकॉर्ड (कंप्यूटर विज्ञान)]] के सबटाइपिंग की अनुमति देती हैं। परिणामतः, केवल टाइप किए गए लैम्ब्डा गणना को रिकॉर्ड प्रकारों के साथ विस्तारित करना सबसे सरल सैद्धांतिक समुच्चयिंग है जिसमें सबटाइपिंग की उपयोगी धारणा को परिभाषित और अध्ययन किया जा सकता है।<ref>Cardelli, Luca. A semantics of multiple inheritance. In G. Kahn, D. MacQueen, and G. Plotkin, editors, Semantics of Data Types, volume 173 of Lecture Notes in Computer Science, pages 51–67. Springer-Verlag, 1984. Full version in Information and Computation, 76(2/3):138–164, 1988.</ref> क्योंकि परिणामी कलन शब्दों को कई प्रकार की अनुमति देता है, यह अब साधारण प्रकार का सिद्धांत नहीं है। कार्यात्मक प्रोग्रामिंग भाषाओं के पश्चात से, परिभाषा के अनुसार, फ़ंक्शन शाब्दिक का समर्थन करता है, जिसे रिकॉर्ड में भी संग्रहीत किया जा सकता है, सबटाइपिंग के साथ रिकॉर्ड प्रकार ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग की कुछ विशेषताएं प्रदान करते हैं। संभवतः कार्य ात्मक प्रोग्रामिंग भाषाएं सामान्यतः प्रतिबंधित, पैरामीट्रिक पोलिमोर्फ़िज्म का रूप भी प्रदान करती हैं। सैद्धांतिक समुच्चयिंग में, दो विशेषताओं का सम्बन्ध का अध्ययन करना वांछनीय है; सामान्य सैद्धांतिक समुच्चयिंग प्रणाली F<sub><:</sub> है | ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग के सैद्धांतिक गुणों को कैप्चर करने का प्रयास करने वाली विभिन्न गणनाएं प्रणाली F<sub><:</sub> से प्राप्त की जा सकती हैंI | ||
सबटाइपिंग की अवधारणा [[सम्मोहन]] और पवित्रता की भाषाई धारणाओं से संबंधित है। यह गणितीय तर्क में [[परिबद्ध परिमाणीकरण]] की अवधारणा से भी संबंधित है ([[आदेश-क्रमबद्ध तर्क]] देखें)। सबटाइपिंग को वस्तु-उन्मुख भाषाओं (वर्ग या वस्तु) [[वंशानुक्रम (कंप्यूटर विज्ञान)]] की धारणा के साथ भ्रमित नहीं होना चाहिए | सबटाइपिंग प्रकारों (ऑब्जेक्ट-ओरिएंटेड पार्लेंस में इंटरफेस) के मध्य संबंध है, जबकि वंशानुक्रम | सबटाइपिंग की अवधारणा [[सम्मोहन]] और पवित्रता की भाषाई धारणाओं से संबंधित है। यह गणितीय तर्क में [[परिबद्ध परिमाणीकरण]] की अवधारणा से भी संबंधित है ([[आदेश-क्रमबद्ध तर्क]] देखें)। सबटाइपिंग को वस्तु-उन्मुख भाषाओं (वर्ग या वस्तु) [[वंशानुक्रम (कंप्यूटर विज्ञान)]] की धारणा के साथ भ्रमित नहीं होना चाहिए | सबटाइपिंग प्रकारों (ऑब्जेक्ट-ओरिएंटेड पार्लेंस में इंटरफेस) के मध्य संबंध है, जबकि वंशानुक्रम लैंग्वेज सुविधा से उपजी कार्य समन्वय के मध्य ऐसा संबंध है जो नई वस्तुओं को उपस्तिथ वस्तुओं से बनाने की अनुमति देता है। कई ऑब्जेक्ट-ओरिएंटेड भाषाओं में, सबटाइपिंग को इंटरफ़ेस इनहेरिटेंस कहा जाता है, उत्तराधिकार के साथ कार्य समन्वय उत्तराधिकार के रूप में जाना जाता है। | ||
== उत्पत्ति == | == उत्पत्ति == | ||
प्रोग्रामिंग भाषाओं में सबटाइपिंग की धारणा 1960 के दशक की है; इसे [[शुरुआत|प्रारंभ]] में डेरिवेटिव्स में प्रस्तावित किया गया था। सबटाइपिंग का प्रथम औपचारिक उपचार 1980 में जॉन सी. रेनॉल्ड्स द्वारा दिया गया था, जिन्होंने [[निहित रूपांतरण]] को औपचारिक बनाने के लिए [[श्रेणी सिद्धांत]] और [[लुका कार्डेली]] (1985) का उपयोग किया था।<ref>Pierce, ch. 15 notes</ref> | प्रोग्रामिंग भाषाओं में सबटाइपिंग की धारणा 1960 के दशक की है; इसे [[शुरुआत|प्रारंभ]] में डेरिवेटिव्स में प्रस्तावित किया गया था। सबटाइपिंग का प्रथम औपचारिक उपचार 1980 में जॉन सी. रेनॉल्ड्स द्वारा दिया गया था, जिन्होंने [[निहित रूपांतरण]] को औपचारिक बनाने के लिए [[श्रेणी सिद्धांत]] और [[लुका कार्डेली]] (1985) का उपयोग किया था।<ref>Pierce, ch. 15 notes</ref> | ||
ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग की मुख्य धारा अपनाने के साथ सबटाइपिंग की अवधारणा ने दृश्यता (और कुछ हलकों में | ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग की मुख्य धारा अपनाने के साथ सबटाइपिंग की अवधारणा ने दृश्यता (और कुछ हलकों में पोलिमोर्फ़िज्म के साथ समानार्थक शब्द) प्राप्त की है। इस संदर्भ में, [[बारबरा लिस्कोव]] के पश्चात सुरक्षित प्रतिस्थापन के सिद्धांत को प्रायः [[लिस्कोव प्रतिस्थापन सिद्धांत]] कहा जाता है, जिसने इसे 1987 में ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग पर सम्मेलन में [[मुख्य भाषण]] में लोकप्रिय बनाया था। क्योंकि इसे परिवर्तनशील वस्तुओं पर विचार करना चाहिए, लिस्कोव और [[जेनेट विंग]] द्वारा परिभाषित सबटाइपिंग की आदर्श धारणा, जिसे [[व्यवहार उपप्रकार|व्यवहार सबटाइपिंग]] कहा जाता है, किसी चेकर में प्रारम्भ किए जा सकने वाले कार्यों की तुलना में अधिक सरल है। (देखना {{section link||फंक्शन के प्रकार}} विवरण के लिए नीचे।) | ||
== उदाहरण == | == उदाहरण == | ||
[[Image:Inheritance.svg|thumb|right|350px|सबटाइपिंगों का उदाहरण: जहां पक्षी सुपरटाइप है और अन्य सभी सबटाइपिंग हैं जैसा कि [[एकीकृत मॉडलिंग भाषा]]<nowiki> नोटेशन में तीर द्वारा दर्शाया गया है |</nowiki>]]आरेख में सबटाइपिंगों का सरल व्यावहारिक उदाहरण दिखाया गया है। इस प्रकार के पक्षी के तीन सबटाइपिंग बतख, कोयल और शुतुरमुर्ग होते हैं। संकल्पनात्मक रूप से, इनमें से प्रत्येक मूल प्रकार के पक्षी का ऐसा प्रकार है जो कई पक्षी विशेषताओं को प्राप्त करता है किन्तुकुछ विशिष्ट अंतर हैं। इस आरेख में यूनिफाइड मॉडलिंग | [[Image:Inheritance.svg|thumb|right|350px|सबटाइपिंगों का उदाहरण: जहां पक्षी सुपरटाइप है और अन्य सभी सबटाइपिंग हैं जैसा कि [[एकीकृत मॉडलिंग भाषा|एकीकृत मॉडलिंग लैंग्वेज]]<nowiki> नोटेशन में तीर द्वारा दर्शाया गया है |</nowiki>]]आरेख में सबटाइपिंगों का सरल व्यावहारिक उदाहरण दिखाया गया है। इस प्रकार के पक्षी के तीन सबटाइपिंग बतख, कोयल और शुतुरमुर्ग होते हैं। संकल्पनात्मक रूप से, इनमें से प्रत्येक मूल प्रकार के पक्षी का ऐसा प्रकार है जो कई पक्षी विशेषताओं को प्राप्त करता है किन्तुकुछ विशिष्ट अंतर हैं। इस आरेख में यूनिफाइड मॉडलिंग लैंग्वेज नोटेशन का उपयोग किया जाता है, जिसमें ओपन-हेडेड एरो सुपरटाइप और उसके सबटाइपिंगों के मध्य संबंध की दिशा और प्रकार दिखाते हैं। | ||
अधिक व्यावहारिक उदाहरण के रूप में, ऐसी | अधिक व्यावहारिक उदाहरण के रूप में, ऐसी लैंग्वेज जहां भी फ़्लोटिंग पॉइंट मानों की अपेक्षा की जाती है, पूर्णांक मानों का उपयोग करने की अनुमति दे सकती है (<code>Integer</code> <: <code>Float</code>), या यह सामान्य प्रकार <samp>Number</samp> को पूर्णांकों और वास्तविक के सामान्य सुपरटाइप के रूप में परिभाषित कर सकता है। इसका दूसरा विषय भी हमारे निकट है<code>Integer</code> <: <code>Number</code> और <code>Float</code> <: <code>Number</code>, किन्तु <code>Integer</code> और <code>Float</code> एक दूसरे के सबटाइपिंग नहीं हैं। | ||
प्रोग्रामर इसके बिना संभव होने की तुलना में सबटाइपिंग [[अमूर्त सिद्धांत (प्रोग्रामिंग)]] का लाभ उठा सकते हैं। निम्नलिखित उदाहरण पर विचार करें: | प्रोग्रामर इसके बिना संभव होने की तुलना में सबटाइपिंग [[अमूर्त सिद्धांत (प्रोग्रामिंग)]] का लाभ उठा सकते हैं। निम्नलिखित उदाहरण पर विचार करें: | ||
Line 28: | Line 28: | ||
return x | return x | ||
end | end | ||
यदि पूर्णांक और वास्तविक दोनों <code>Number</code>के सबटाइपिंग हैं और किसी इच्छानुसार संख्या के साथ तुलना के ऑपरेटर को दोनों प्रकारों के लिए परिभाषित किया गया है, फिर इस फ़ंक्शन को किसी भी प्रकार के मान पास किए जा सकते हैं। चूँकि, इस प्रकार के ऑपरेटर को प्रारम्भ करने की संभावना संख्या प्रकार को अत्यधिक बाधित करती है (उदाहरण के लिए, कोई जटिल संख्या के साथ पूर्णांक की तुलना नहीं कर सकता है) और वास्तव में केवल पूर्णांक के साथ और वास्तविक के साथ की तुलना करना समझ में आता है। इस फ़ंक्शन को पुनर्लेखन करना जिससे यह केवल उसी प्रकार के 'x' और 'y' को स्वीकार करे, जिसके लिए बाध्य | यदि पूर्णांक और वास्तविक दोनों <code>Number</code>के सबटाइपिंग हैं और किसी इच्छानुसार संख्या के साथ तुलना के ऑपरेटर को दोनों प्रकारों के लिए परिभाषित किया गया है, फिर इस फ़ंक्शन को किसी भी प्रकार के मान पास किए जा सकते हैं। चूँकि, इस प्रकार के ऑपरेटर को प्रारम्भ करने की संभावना संख्या प्रकार को अत्यधिक बाधित करती है (उदाहरण के लिए, कोई जटिल संख्या के साथ पूर्णांक की तुलना नहीं कर सकता है) और वास्तव में केवल पूर्णांक के साथ और वास्तविक के साथ की तुलना करना समझ में आता है। इस फ़ंक्शन को पुनर्लेखन करना जिससे यह केवल उसी प्रकार के 'x' और 'y' को स्वीकार करे, जिसके लिए बाध्य पोलिमोर्फ़िज्म की आवश्यकता होती है। | ||
== सबमिशन == | == सबमिशन == | ||
Line 34: | Line 34: | ||
टाइप सिद्धांत में सबसम्प्शन की अवधारणा<ref>Benjamin C. Pierce, ''Types and Programming Languages'', MIT Press, 2002, 15.1 "Subsumption", p. 181-182</ref> परिभाषित या मूल्यांकन करने के लिए प्रयोग किया जाता है कि क्या प्रकार S, प्रकार T का सबटाइपिंग है| | टाइप सिद्धांत में सबसम्प्शन की अवधारणा<ref>Benjamin C. Pierce, ''Types and Programming Languages'', MIT Press, 2002, 15.1 "Subsumption", p. 181-182</ref> परिभाषित या मूल्यांकन करने के लिए प्रयोग किया जाता है कि क्या प्रकार S, प्रकार T का सबटाइपिंग है| | ||
टाइप मूल्यों का समुच्चय है। समुच्चय के सभी मूल्यों को सूचीबद्ध करके 'व्यापक रूप से' वर्णित किया जा सकता है, या संभावित मूल्यों के डोमेन पर विधेय द्वारा समुच्चय की सदस्यता बताते हुए इसे 'आशयपूर्वक' वर्णित किया जा सकता है। सामान्य प्रोग्रामिंग | टाइप मूल्यों का समुच्चय है। समुच्चय के सभी मूल्यों को सूचीबद्ध करके 'व्यापक रूप से' वर्णित किया जा सकता है, या संभावित मूल्यों के डोमेन पर विधेय द्वारा समुच्चय की सदस्यता बताते हुए इसे 'आशयपूर्वक' वर्णित किया जा सकता है। सामान्य प्रोग्रामिंग लैंग्वेज में गणना टाइप्स को सूचीबद्ध मान द्वारा व्यापक रूप से परिभाषित किया जाता है। [[उपयोगकर्ता-परिभाषित प्रकार]] जैसे रिकॉर्ड (संरचनाएं, इंटरफेस) या कक्षाएं स्पष्ट प्रकार की घोषणा या उपस्तिथ मूल्य का उपयोग करके परिभाषित की जाती हैं, जो कॉपी या विस्तारित किए जाने वाले प्रोटोटाइप के रूप में जानकारी को एन्कोड करती है। | ||
उपधारणा की अवधारणा पर वर्णन करते हुए, विशेष प्रकार के मूल्यों के समुच्चय को गणितीय इटैलिक T में उसका नाम लिखकर प्रदर्शित किया जाता है | उसी प्रकार, जिसे डोमेन पर विधेय के रूप में देखा जाता है, उसका नाम बोल्ड '''T''' में लिखकर प्रदर्शित किया जाता है। पारंपरिक प्रतीक <: का अर्थ सबटाइपिंग है, और :> का अर्थ सुपरटाइप है। | उपधारणा की अवधारणा पर वर्णन करते हुए, विशेष प्रकार के मूल्यों के समुच्चय को गणितीय इटैलिक T में उसका नाम लिखकर प्रदर्शित किया जाता है | उसी प्रकार, जिसे डोमेन पर विधेय के रूप में देखा जाता है, उसका नाम बोल्ड '''T''' में लिखकर प्रदर्शित किया जाता है। पारंपरिक प्रतीक <: का अर्थ सबटाइपिंग है, और :> का अर्थ सुपरटाइप है। | ||
Line 62: | Line 62: | ||
यदि T, S (T:> S) को समाहित करता है तो प्रक्रिया, कार्य या अभिव्यक्ति को मान दिया जाता है <math>s \in S</math> ऑपरेंड के रूप में (पैरामीटर मान या शब्द) इसलिए उस मान पर टाइप T में से किस के रूप में कार्य करने में सक्षम होगा, क्योंकि <math>s \in T</math> है | उपरोक्त उदाहरण में, हम आशा कर सकते हैं कि उप-परिवार का कार्य सभी तीन प्रकारों 'फेलिडे', 'फेलिना' और 'फेलिस' के मूल्यों पर प्रारम्भ होगा। | यदि T, S (T:> S) को समाहित करता है तो प्रक्रिया, कार्य या अभिव्यक्ति को मान दिया जाता है <math>s \in S</math> ऑपरेंड के रूप में (पैरामीटर मान या शब्द) इसलिए उस मान पर टाइप T में से किस के रूप में कार्य करने में सक्षम होगा, क्योंकि <math>s \in T</math> है | उपरोक्त उदाहरण में, हम आशा कर सकते हैं कि उप-परिवार का कार्य सभी तीन प्रकारों 'फेलिडे', 'फेलिना' और 'फेलिस' के मूल्यों पर प्रारम्भ होगा। | ||
== सबटाइपिंग | == सबटाइपिंग स्कीम्स == | ||
प्रकार सिद्धांतकार [[नाममात्र प्रकार प्रणाली]] के मध्य अंतर करते हैं, जिसमें केवल निश्चित विधि से घोषित आपस के सबटाइपिंग हो सकते हैं, और [[संरचनात्मक प्रकार प्रणाली]], जिसमें दो प्रकार की संरचना निर्धारित करती है कि वो दूसरे का सबटाइपिंग है या नहीं है। ऊपर वर्णित वर्ग-आधारित ऑब्जेक्ट-ओरिएंटेड सबटाइपिंग नाममात्र है; किसी वस्तु-उन्मुख | प्रकार सिद्धांतकार [[नाममात्र प्रकार प्रणाली]] के मध्य अंतर करते हैं, जिसमें केवल निश्चित विधि से घोषित आपस के सबटाइपिंग हो सकते हैं, और [[संरचनात्मक प्रकार प्रणाली]], जिसमें दो प्रकार की संरचना निर्धारित करती है कि वो दूसरे का सबटाइपिंग है या नहीं है। ऊपर वर्णित वर्ग-आधारित ऑब्जेक्ट-ओरिएंटेड सबटाइपिंग नाममात्र है; किसी वस्तु-उन्मुख लैंग्वेज के लिए संरचनात्मक सबटाइपिंग नियम यह कह सकता है कि यदि प्रकार A की वस्तुएं उन सभी संदेशों को संभाल सकती हैं जो B प्रकार की वस्तुएं संभाल सकती हैं (अर्थात, यदि वे सभी समान विधि को परिभाषित करते हैं, तो A, B का सबटाइपिंग है, दूसरे से वंशानुक्रम हो या नहीं। यह तथाकथित ''[[बतख टाइपिंग|डक टाइपिंग]]'' गतिशील रूप से टाइप की गई वस्तु-उन्मुख भाषाओं में सरल है। वस्तु प्रकार के अतिरिक्त अन्य प्रकार के लिए ध्वनि संरचनात्मक सबटाइपिंग नियम भी सर्वविदित हैं। सबटाइपिंग के साथ प्रोग्रामिंग भाषाओं के कार्यसमन्वय दो सामान्य वर्गों में सम्मलित हैं: समावेशी कार्यसमन्वय, जिसमें टाइप A के किसी भी मूल्य का प्रतिनिधित्व भी टाइप B पर समान मान का प्रतिनिधित्व करता है | यदि A <: बB, और उत्तम रूप से कार्यसमन्वय, जिसमें टाइप A का मान स्वचालित रूप से प्रकार B में परिवर्तित किया जा सकता है। वस्तु-उन्मुख लैंग्वेज में उप-वर्गीकरण द्वारा प्रेरित सबटाइपिंग सामान्यतः समावेशी होता है; पूर्णांक और फ़्लोटिंग-पॉइंट नंबरों से संबंधित सबटाइपिंग संबंध, जो भिन्न-भिन्न प्रतिनिधित्व करते हैं, सामान्यतः उत्तम रूप के होते हैं। | ||
सबटाइपिंग संबंध को परिभाषित करने वाली लगभग सभी प्रकार की प्रणालियों में, यह कर्मकर्त्ता (अर्थ A <: A किसी भी प्रकार A के लिए) और सकर्मक (अर्थात् यदि A <: B और B <: C तो A <: C) है। यह इस प्रकार[[पूर्व आदेश]] बनाता है। | सबटाइपिंग संबंध को परिभाषित करने वाली लगभग सभी प्रकार की प्रणालियों में, यह कर्मकर्त्ता (अर्थ A <: A किसी भी प्रकार A के लिए) और सकर्मक (अर्थात् यदि A <: B और B <: C तो A <: C) है। यह इस प्रकार[[पूर्व आदेश]] बनाता है। | ||
== रिकॉर्ड | == रिकॉर्ड टाइप्स == | ||
=== | === विड्थ और डेप्थ सबटाइपिंग === | ||
रिकॉर्ड के प्रकार (कंप्यूटर विज्ञान) चौड़ाई और गहराई सबटाइपिंग की अवधारणाओं को उत्पन्न करते हैं। ये नए प्रकार के रिकॉर्ड को प्राप्त करने के दो भिन्न -भिन्न विधि को व्यक्त करते हैं जो मूल रिकॉर्ड प्रकार के समान संचालन की अनुमति देता है। | रिकॉर्ड के प्रकार (कंप्यूटर विज्ञान) चौड़ाई और गहराई सबटाइपिंग की अवधारणाओं को उत्पन्न करते हैं। ये नए प्रकार के रिकॉर्ड को प्राप्त करने के दो भिन्न -भिन्न विधि को व्यक्त करते हैं जो मूल रिकॉर्ड प्रकार के समान संचालन की अनुमति देता है। | ||
Line 80: | Line 80: | ||
दूसरी विधि, जिसे डेप्थ सबटाइपिंग कहा जाता है, विभिन्न क्षेत्रों को उनके सबटाइपिंगों से परिवर्तित कर देती है अर्थात्, सबटाइपिंग के क्षेत्र सुपरटाइप के क्षेत्रों के लिए सबटाइपिंग हैं। चूँकि सुपरटाइप में किसी फ़ील्ड के लिए समर्थित कोई भी ऑपरेशन उसके सबटाइपिंग के लिए समर्थित है, रिकॉर्ड सुपरटाइप पर संभव कोई भी ऑपरेशन रिकॉर्ड सबटाइपिंग द्वारा समर्थित है। गहराई सबटाइपिंग केवल अपरिवर्तनीय रिकॉर्ड के लिए समझ में आता है: उदाहरण के लिए, आप कोई वास्तविक बिंदु (दो वास्तविक क्षेत्रों के साथ रिकॉर्ड) के 'x' फ़ील्ड को 1.5 असाइन कर सकते हैं, किन्तु आप 'x' फ़ील्ड के समान नहीं कर सकते पूर्णांक बिंदु (जो, चूँकि, वास्तविक बिंदु प्रकार का गहरा सबटाइपिंग है) क्योंकि 1.5 पूर्णांक नहीं है ([[सहप्रसरण और प्रतिप्रसरण (कंप्यूटर विज्ञान)]] देखें)। | दूसरी विधि, जिसे डेप्थ सबटाइपिंग कहा जाता है, विभिन्न क्षेत्रों को उनके सबटाइपिंगों से परिवर्तित कर देती है अर्थात्, सबटाइपिंग के क्षेत्र सुपरटाइप के क्षेत्रों के लिए सबटाइपिंग हैं। चूँकि सुपरटाइप में किसी फ़ील्ड के लिए समर्थित कोई भी ऑपरेशन उसके सबटाइपिंग के लिए समर्थित है, रिकॉर्ड सुपरटाइप पर संभव कोई भी ऑपरेशन रिकॉर्ड सबटाइपिंग द्वारा समर्थित है। गहराई सबटाइपिंग केवल अपरिवर्तनीय रिकॉर्ड के लिए समझ में आता है: उदाहरण के लिए, आप कोई वास्तविक बिंदु (दो वास्तविक क्षेत्रों के साथ रिकॉर्ड) के 'x' फ़ील्ड को 1.5 असाइन कर सकते हैं, किन्तु आप 'x' फ़ील्ड के समान नहीं कर सकते पूर्णांक बिंदु (जो, चूँकि, वास्तविक बिंदु प्रकार का गहरा सबटाइपिंग है) क्योंकि 1.5 पूर्णांक नहीं है ([[सहप्रसरण और प्रतिप्रसरण (कंप्यूटर विज्ञान)]] देखें)। | ||
अभिलेखों की सबटाइपिंग को प्रणाली F<sub><:</sub> में परिभाषित किया जा सकता है जो रिकॉर्ड प्रकारों के सबटाइपिंग के साथ पैरामीट्रिक | अभिलेखों की सबटाइपिंग को प्रणाली F<sub><:</sub> में परिभाषित किया जा सकता है जो रिकॉर्ड प्रकारों के सबटाइपिंग के साथ पैरामीट्रिक पोलिमोर्फ़िज्म को जोड़ती है और कई कार्यात्मक प्रोग्रामिंग भाषाओं के लिए सैद्धांतिक आधार है जो दोनों सुविधाओं का समर्थन करती हैं। | ||
कुछ प्रणालियाँ लेबल किए गए असंयुक्त संघ प्रकारों (जैसे [[बीजगणितीय डेटा प्रकार]]) के सबटाइपिंग का भी समर्थन करती हैं। चौड़ाई सबटाइपिंग का नियम विपरीत है, चौड़ाई सबटाइपिंग में दिखाई देने वाला प्रत्येक टैग चौड़ाई सुपरटाइप में दिखाई देना चाहिए। | कुछ प्रणालियाँ लेबल किए गए असंयुक्त संघ प्रकारों (जैसे [[बीजगणितीय डेटा प्रकार]]) के सबटाइपिंग का भी समर्थन करती हैं। चौड़ाई सबटाइपिंग का नियम विपरीत है, चौड़ाई सबटाइपिंग में दिखाई देने वाला प्रत्येक टैग चौड़ाई सुपरटाइप में दिखाई देना चाहिए। | ||
== फंक्शन | == फंक्शन टाइप्स == | ||
यदि {{math|1=''T''<sub>1</sub> → ''T''<sub>2</sub>}} कोई फ़ंक्शन प्रकार है, तो इसका उप प्रकार कोई फ़ंक्शन प्रकार है {{math|1=''S''<sub>1</sub> → ''S''<sub>2</sub>}} उस संपत्ति के साथ {{math|1=''T''<sub>1</sub> <: ''S''<sub>1</sub>}} और {{math|1=''S''<sub>2</sub> <: ''T''<sub>2</sub>.}} निम्नलिखित [[टाइपिंग नियम]] का उपयोग करके इसे संक्षेप में प्रस्तुत किया जा सकता है: | यदि {{math|1=''T''<sub>1</sub> → ''T''<sub>2</sub>}} कोई फ़ंक्शन प्रकार है, तो इसका उप प्रकार कोई फ़ंक्शन प्रकार है {{math|1=''S''<sub>1</sub> → ''S''<sub>2</sub>}} उस संपत्ति के साथ {{math|1=''T''<sub>1</sub> <: ''S''<sub>1</sub>}} और {{math|1=''S''<sub>2</sub> <: ''T''<sub>2</sub>.}} निम्नलिखित [[टाइपिंग नियम]] का उपयोग करके इसे संक्षेप में प्रस्तुत किया जा सकता है: | ||
Line 92: | Line 92: | ||
{S_1 \rightarrow S_2 \leq: T_1 \rightarrow T_2} | {S_1 \rightarrow S_2 \leq: T_1 \rightarrow T_2} | ||
</math> | </math> | ||
पैरामीटर प्रकार {{math|1=''S''<sub>1</sub> → ''S''<sub>2</sub>}} सह-प्रसरण और प्रति-प्रसरण (कंप्यूटर विज्ञान) कहा जाता है क्योंकि इसके लिए सबटाइपिंग संबंध विपरीत होता है, जबकि वापसी का प्रकार सह-प्रसरण और प्रति-प्रसरण (कंप्यूटर विज्ञान) है। अनौपचारिक रूप से, यह विपरीत होता है क्योंकि परिष्कृत प्रकार उन प्रकारों में अधिक उदार होता है जिन्हें वह स्वीकार करता है और जिस प्रकार से लौटता है उसमें अधिक रूढ़िवादी होता है। [[स्काला (प्रोग्रामिंग भाषा)]] में यही वास्तव में कार्य करता है: एन-आरी फ़ंक्शन आंतरिक रूप से वह वर्ग है जो इनहेरिट करता है| <math>\mathtt{ Function_N({-A_1}, {-A_2}, \dots, {-A_n}, {+B})}</math> [[विशेषता (कंप्यूटर प्रोग्रामिंग)]] (जिसे [[जावा (प्रोग्रामिंग भाषा)]] जैसी भाषाओं में सामान्य [[अप्लिकेशन प्रोग्रामिंग अंतरफलक]] के रूप में देखा जा सकता है), जहां <math>\mathtt{A_1, A_2, \dots, A_n}</math> पैरामीटर प्रकार हैं, और <math>\mathtt{B}</math> इसका वापसी प्रकार है;− प्रकार से पूर्वका का अर्थ है कि प्रकार प्रतिपरिवर्ती है जबकि + का अर्थ सहपरिवर्ती है। | पैरामीटर प्रकार {{math|1=''S''<sub>1</sub> → ''S''<sub>2</sub>}} सह-प्रसरण और प्रति-प्रसरण (कंप्यूटर विज्ञान) कहा जाता है क्योंकि इसके लिए सबटाइपिंग संबंध विपरीत होता है, जबकि वापसी का प्रकार सह-प्रसरण और प्रति-प्रसरण (कंप्यूटर विज्ञान) है। अनौपचारिक रूप से, यह विपरीत होता है क्योंकि परिष्कृत प्रकार उन प्रकारों में अधिक उदार होता है जिन्हें वह स्वीकार करता है और जिस प्रकार से लौटता है उसमें अधिक रूढ़िवादी होता है। [[स्काला (प्रोग्रामिंग भाषा)|स्काला (प्रोग्रामिंग लैंग्वेज)]] में यही वास्तव में कार्य करता है: एन-आरी फ़ंक्शन आंतरिक रूप से वह वर्ग है जो इनहेरिट करता है| <math>\mathtt{ Function_N({-A_1}, {-A_2}, \dots, {-A_n}, {+B})}</math> [[विशेषता (कंप्यूटर प्रोग्रामिंग)]] (जिसे [[जावा (प्रोग्रामिंग भाषा)|जावा (प्रोग्रामिंग लैंग्वेज)]] जैसी भाषाओं में सामान्य [[अप्लिकेशन प्रोग्रामिंग अंतरफलक]] के रूप में देखा जा सकता है), जहां <math>\mathtt{A_1, A_2, \dots, A_n}</math> पैरामीटर प्रकार हैं, और <math>\mathtt{B}</math> इसका वापसी प्रकार है;− प्रकार से पूर्वका का अर्थ है कि प्रकार प्रतिपरिवर्ती है जबकि + का अर्थ सहपरिवर्ती है। | ||
अधिकांश ऑब्जेक्ट-ओरिएंटेड भाषाओं के प्रकार साइड इफेक्ट की अनुमति देने वाली भाषाओं में, सबटाइपिंग सरलता गारंटी देने के लिए पर्याप्त नहीं है कि किसी फ़ंक्शन को दूसरे के संदर्भ में सुरक्षित रूप से उपयोग किया जा सकता है। इस क्षेत्र में लिस्कोव का कार्य व्यवहार सबटाइपिंग पर केंद्रित है, जो इस लेख में वर्णन की गई प्रकार प्रणाली सुरक्षा के अतिरिक्त यह भी आवश्यक है कि सबटाइपिंग अनुबंध द्वारा कुछ डिजाइन में सुपरटेप द्वारा गारंटीकृत सभी [[अपरिवर्तनीय (कंप्यूटर विज्ञान)]] को संरक्षित करें।<ref name="LSP">Barbara Liskov, Jeannette Wing, ''[http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.39.1223 A behavioral notion of subtyping]'', ACM Transactions on Programming Languages and Systems, Volume 16, Issue 6 (November 1994), pp. 1811–1841. An updated version appeared as CMU technical report: {{cite web|url=http://reports-archive.adm.cs.cmu.edu/anon/1999/CMU-CS-99-156.ps|title=Behavioral Subtyping Using Invariants and Constraints|last=Liskov|first=Barbara|author-link=Barbara Liskov|author2=Wing, Jeannette |author-link2=Jeannette Wing |date=July 1999|format=[[PostScript|PS]]|access-date=2006-10-05}}</ref> सबटाइपिंग की यह परिभाषा सरलता [[अनिर्णीत समस्या]] है, इसलिए इसे किसी प्रकार के चेकर द्वारा सत्यापित नहीं किया जा सकता है। | अधिकांश ऑब्जेक्ट-ओरिएंटेड भाषाओं के प्रकार साइड इफेक्ट की अनुमति देने वाली भाषाओं में, सबटाइपिंग सरलता गारंटी देने के लिए पर्याप्त नहीं है कि किसी फ़ंक्शन को दूसरे के संदर्भ में सुरक्षित रूप से उपयोग किया जा सकता है। इस क्षेत्र में लिस्कोव का कार्य व्यवहार सबटाइपिंग पर केंद्रित है, जो इस लेख में वर्णन की गई प्रकार प्रणाली सुरक्षा के अतिरिक्त यह भी आवश्यक है कि सबटाइपिंग अनुबंध द्वारा कुछ डिजाइन में सुपरटेप द्वारा गारंटीकृत सभी [[अपरिवर्तनीय (कंप्यूटर विज्ञान)]] को संरक्षित करें।<ref name="LSP">Barbara Liskov, Jeannette Wing, ''[http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.39.1223 A behavioral notion of subtyping]'', ACM Transactions on Programming Languages and Systems, Volume 16, Issue 6 (November 1994), pp. 1811–1841. An updated version appeared as CMU technical report: {{cite web|url=http://reports-archive.adm.cs.cmu.edu/anon/1999/CMU-CS-99-156.ps|title=Behavioral Subtyping Using Invariants and Constraints|last=Liskov|first=Barbara|author-link=Barbara Liskov|author2=Wing, Jeannette |author-link2=Jeannette Wing |date=July 1999|format=[[PostScript|PS]]|access-date=2006-10-05}}</ref> सबटाइपिंग की यह परिभाषा सरलता [[अनिर्णीत समस्या]] है, इसलिए इसे किसी प्रकार के चेकर द्वारा सत्यापित नहीं किया जा सकता है। | ||
Line 98: | Line 98: | ||
[[अपरिवर्तनीय वस्तु|अपरिवर्तनीय वस्तुओं]] का सबटाइपिंग पैरामीटर मानों और वापसी मूल्यों के उपचार के समान है। केवल-लिखने का संदर्भ (या सिंक) प्रतिपरिवर्ती हैं, जैसे पैरामीटर मान; केवल-लिखने का संदर्भ (या स्रोत) प्रतिपरिवर्ती हैं, जैसे प्रतिलाभ की मात्रा परिवर्तनीय संदर्भ जो स्रोत और सिंक दोनों के रूप में कार्य करते हैं, वे अपरिवर्तनीय हैं। | [[अपरिवर्तनीय वस्तु|अपरिवर्तनीय वस्तुओं]] का सबटाइपिंग पैरामीटर मानों और वापसी मूल्यों के उपचार के समान है। केवल-लिखने का संदर्भ (या सिंक) प्रतिपरिवर्ती हैं, जैसे पैरामीटर मान; केवल-लिखने का संदर्भ (या स्रोत) प्रतिपरिवर्ती हैं, जैसे प्रतिलाभ की मात्रा परिवर्तनीय संदर्भ जो स्रोत और सिंक दोनों के रूप में कार्य करते हैं, वे अपरिवर्तनीय हैं। | ||
== | == इनहेरिटेंस के साथ संबंध == | ||
सबटाइपिंग और वंशानुक्रम स्वतंत्र (ऑर्थोगोनल) संबंध हैं। वे संयोग कर सकते हैं, किन्तु कोई भी दूसरे का विशेष विषय नहीं है। दूसरे शब्दों में, दो प्रकार S और T के मध्य, सबटाइपिंग और वंशानुक्रम के सभी संयोजन संभव हैं: | सबटाइपिंग और वंशानुक्रम स्वतंत्र (ऑर्थोगोनल) संबंध हैं। वे संयोग कर सकते हैं, किन्तु कोई भी दूसरे का विशेष विषय नहीं है। दूसरे शब्दों में, दो प्रकार S और T के मध्य, सबटाइपिंग और वंशानुक्रम के सभी संयोजन संभव हैं: | ||
Line 112: | Line 112: | ||
सबटाइपिंग और वंशानुक्रम तब संगत होते हैं जब सभी उत्तराधिकार में मिले क्षेत्र और व्युत्पन्न प्रकार के विधि में ऐसे प्रकार होते हैं जो संबंधित क्षेत्रों के सबटाइपिंग होते हैं और उत्तराधिकार में मिले प्रकार के विधि होते हैं।{{sfn|Cook|Hill|Canning|1990}} | सबटाइपिंग और वंशानुक्रम तब संगत होते हैं जब सभी उत्तराधिकार में मिले क्षेत्र और व्युत्पन्न प्रकार के विधि में ऐसे प्रकार होते हैं जो संबंधित क्षेत्रों के सबटाइपिंग होते हैं और उत्तराधिकार में मिले प्रकार के विधि होते हैं।{{sfn|Cook|Hill|Canning|1990}} | ||
== केर्सिओन्स == | |||
== | |||
बलपूर्वक सबटाइपिंग प्रणालियों में, सबटाइपिंगों को सबटाइपिंग से सुपरटाइप में अंतर्निहित [[प्रकार रूपांतरण]] कार्यों द्वारा परिभाषित किया जाता है। प्रत्येक सबटाइपिंग संबंध (S <: T) के लिए, बलपूर्वक कार्य बल: S → T प्रदान किया जाता है, और प्रकार S के किसी भी वस्तु को बल के रूप में माना जाता है <sub>''S'' → ''T''</sub>(s) टाइप T का है। किसी बलपूर्वक फ़ंक्शन को रचना द्वारा परिभाषित किया जा सकता है, यदि S <: T और T <: U तो s को यौगिक बलपूर्वक के अंतर्गत टाइप U की वस्तु के रूप में माना जा सकता है <sub>''T'' → ''U''</sub> ∘ बलपूर्वक <sub>''S'' → ''T''</sub> इसी प्रकार से अपने आप में बलपूर्वक <sub>''T'' → ''T''</sub> [[पहचान समारोह|पहचान फंक्शन]] ''id''<sub>T</sub> है। | बलपूर्वक सबटाइपिंग प्रणालियों में, सबटाइपिंगों को सबटाइपिंग से सुपरटाइप में अंतर्निहित [[प्रकार रूपांतरण]] कार्यों द्वारा परिभाषित किया जाता है। प्रत्येक सबटाइपिंग संबंध (S <: T) के लिए, बलपूर्वक कार्य बल: S → T प्रदान किया जाता है, और प्रकार S के किसी भी वस्तु को बल के रूप में माना जाता है <sub>''S'' → ''T''</sub>(s) टाइप T का है। किसी बलपूर्वक फ़ंक्शन को रचना द्वारा परिभाषित किया जा सकता है, यदि S <: T और T <: U तो s को यौगिक बलपूर्वक के अंतर्गत टाइप U की वस्तु के रूप में माना जा सकता है <sub>''T'' → ''U''</sub> ∘ बलपूर्वक <sub>''S'' → ''T''</sub> इसी प्रकार से अपने आप में बलपूर्वक <sub>''T'' → ''T''</sub> [[पहचान समारोह|पहचान फंक्शन]] ''id''<sub>T</sub> है। | ||
Revision as of 00:45, 9 September 2023
Polymorphism |
---|
Ad hoc polymorphism |
Parametric polymorphism |
Subtyping |
प्रोग्रामिंग लैंग्वेज थ्योरी में, सबटाइपिंग (सबटाइपिंग पोलिमोर्फ़िज्म या इन्क्लूसिव पोलिमोर्फ़िज्म) पोलिमोर्फ़िज्म (कंप्यूटर विज्ञान) का रूप है जिसमें सबटाइप डेटा टाइप होता है जो सब्स्टिट्युटबिलिटी के नोशन द्वारा किसी अन्य डेटाटाइप (सुपरटाइप) से संबंधित है, जिसका अर्थ है कि प्रोग्राम एलिमेंट्स, सामान्यतः सबरूटीन्स या फंक्शन, जो सुपरटाइप के एलिमेंट्स पर ऑपरेट करने के लिए लिखे गए हैं, वे सबटाइप के एलिमेंट्स पर भी ऑपरेट कर सकते हैं। यदि S, T का सबटाइप है, तो सबटाइपिंग बाइनरी रिलेशन ( S <: T, S ⊑ T,[1] या S ≤: T के रूप में लिखा गया है) का तात्पर्य है कि टाइप S के किसी भी शब्द को किसी भी कॉन्टेक्स्ट में सुरक्षित रूप से प्रयोग किया जा सकता है जहां टाइप T एक्सपेक्टेड होता है। यहां सबटाइपिंग का सेमैंटिक्स विशेष रूप से इस तथ्य पर निर्भर करता है कि सुरक्षित रूप से कैसे उपयोग किया जाए और किसी भी कॉन्टेक्स्ट को किसी फॉर्मल लैंग्वेज या प्रोग्रामिंग लैंग्वेज द्वारा डिफाइन किया जाता है। प्रोग्रामिंग लैंग्वेज का टाइप सिस्टम अनिवार्य रूप से अपने सबटाइपिंग रिलेशन को डिफाइन करता है, जो ट्रिविअल हो सकता है, लैंग्वेज को कन्वर्शन मैकेनिज्म को सपोर्ट नहीं करना चाहिए।
सबटाइपिंग संबंध के कारण, शब्द कई प्रकार का हो सकता है। सबटाइपिंग इसलिए पोलिमोर्फ़िज्म का रूप है। ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग में 'पॉलीमॉर्फिज्म' शब्द का प्रयोग सामान्यतः केवल इस सबटाइपिंग पॉलीमॉर्फिज्म को संदर्भित करने के लिए किया जाता है, जबकि पैरामीट्रिक पोलिमोर्फ़िज्म की प्रौद्योगिकी को सामान्य प्रोग्रामिंग माना जाता है।
कार्यात्मक प्रोग्रामिंग भाषाएं प्रायः रिकॉर्ड (कंप्यूटर विज्ञान) के सबटाइपिंग की अनुमति देती हैं। परिणामतः, केवल टाइप किए गए लैम्ब्डा गणना को रिकॉर्ड प्रकारों के साथ विस्तारित करना सबसे सरल सैद्धांतिक समुच्चयिंग है जिसमें सबटाइपिंग की उपयोगी धारणा को परिभाषित और अध्ययन किया जा सकता है।[2] क्योंकि परिणामी कलन शब्दों को कई प्रकार की अनुमति देता है, यह अब साधारण प्रकार का सिद्धांत नहीं है। कार्यात्मक प्रोग्रामिंग भाषाओं के पश्चात से, परिभाषा के अनुसार, फ़ंक्शन शाब्दिक का समर्थन करता है, जिसे रिकॉर्ड में भी संग्रहीत किया जा सकता है, सबटाइपिंग के साथ रिकॉर्ड प्रकार ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग की कुछ विशेषताएं प्रदान करते हैं। संभवतः कार्य ात्मक प्रोग्रामिंग भाषाएं सामान्यतः प्रतिबंधित, पैरामीट्रिक पोलिमोर्फ़िज्म का रूप भी प्रदान करती हैं। सैद्धांतिक समुच्चयिंग में, दो विशेषताओं का सम्बन्ध का अध्ययन करना वांछनीय है; सामान्य सैद्धांतिक समुच्चयिंग प्रणाली F<: है | ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग के सैद्धांतिक गुणों को कैप्चर करने का प्रयास करने वाली विभिन्न गणनाएं प्रणाली F<: से प्राप्त की जा सकती हैंI
सबटाइपिंग की अवधारणा सम्मोहन और पवित्रता की भाषाई धारणाओं से संबंधित है। यह गणितीय तर्क में परिबद्ध परिमाणीकरण की अवधारणा से भी संबंधित है (आदेश-क्रमबद्ध तर्क देखें)। सबटाइपिंग को वस्तु-उन्मुख भाषाओं (वर्ग या वस्तु) वंशानुक्रम (कंप्यूटर विज्ञान) की धारणा के साथ भ्रमित नहीं होना चाहिए | सबटाइपिंग प्रकारों (ऑब्जेक्ट-ओरिएंटेड पार्लेंस में इंटरफेस) के मध्य संबंध है, जबकि वंशानुक्रम लैंग्वेज सुविधा से उपजी कार्य समन्वय के मध्य ऐसा संबंध है जो नई वस्तुओं को उपस्तिथ वस्तुओं से बनाने की अनुमति देता है। कई ऑब्जेक्ट-ओरिएंटेड भाषाओं में, सबटाइपिंग को इंटरफ़ेस इनहेरिटेंस कहा जाता है, उत्तराधिकार के साथ कार्य समन्वय उत्तराधिकार के रूप में जाना जाता है।
उत्पत्ति
प्रोग्रामिंग भाषाओं में सबटाइपिंग की धारणा 1960 के दशक की है; इसे प्रारंभ में डेरिवेटिव्स में प्रस्तावित किया गया था। सबटाइपिंग का प्रथम औपचारिक उपचार 1980 में जॉन सी. रेनॉल्ड्स द्वारा दिया गया था, जिन्होंने निहित रूपांतरण को औपचारिक बनाने के लिए श्रेणी सिद्धांत और लुका कार्डेली (1985) का उपयोग किया था।[3]
ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग की मुख्य धारा अपनाने के साथ सबटाइपिंग की अवधारणा ने दृश्यता (और कुछ हलकों में पोलिमोर्फ़िज्म के साथ समानार्थक शब्द) प्राप्त की है। इस संदर्भ में, बारबरा लिस्कोव के पश्चात सुरक्षित प्रतिस्थापन के सिद्धांत को प्रायः लिस्कोव प्रतिस्थापन सिद्धांत कहा जाता है, जिसने इसे 1987 में ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग पर सम्मेलन में मुख्य भाषण में लोकप्रिय बनाया था। क्योंकि इसे परिवर्तनशील वस्तुओं पर विचार करना चाहिए, लिस्कोव और जेनेट विंग द्वारा परिभाषित सबटाइपिंग की आदर्श धारणा, जिसे व्यवहार सबटाइपिंग कहा जाता है, किसी चेकर में प्रारम्भ किए जा सकने वाले कार्यों की तुलना में अधिक सरल है। (देखना § फंक्शन के प्रकार विवरण के लिए नीचे।)
उदाहरण
आरेख में सबटाइपिंगों का सरल व्यावहारिक उदाहरण दिखाया गया है। इस प्रकार के पक्षी के तीन सबटाइपिंग बतख, कोयल और शुतुरमुर्ग होते हैं। संकल्पनात्मक रूप से, इनमें से प्रत्येक मूल प्रकार के पक्षी का ऐसा प्रकार है जो कई पक्षी विशेषताओं को प्राप्त करता है किन्तुकुछ विशिष्ट अंतर हैं। इस आरेख में यूनिफाइड मॉडलिंग लैंग्वेज नोटेशन का उपयोग किया जाता है, जिसमें ओपन-हेडेड एरो सुपरटाइप और उसके सबटाइपिंगों के मध्य संबंध की दिशा और प्रकार दिखाते हैं।
अधिक व्यावहारिक उदाहरण के रूप में, ऐसी लैंग्वेज जहां भी फ़्लोटिंग पॉइंट मानों की अपेक्षा की जाती है, पूर्णांक मानों का उपयोग करने की अनुमति दे सकती है (Integer
<: Float
), या यह सामान्य प्रकार Number को पूर्णांकों और वास्तविक के सामान्य सुपरटाइप के रूप में परिभाषित कर सकता है। इसका दूसरा विषय भी हमारे निकट हैInteger
<: Number
और Float
<: Number
, किन्तु Integer
और Float
एक दूसरे के सबटाइपिंग नहीं हैं।
प्रोग्रामर इसके बिना संभव होने की तुलना में सबटाइपिंग अमूर्त सिद्धांत (प्रोग्रामिंग) का लाभ उठा सकते हैं। निम्नलिखित उदाहरण पर विचार करें:
function max (x as Number, y as Number) is
if x < y then
return y else return x end
यदि पूर्णांक और वास्तविक दोनों Number
के सबटाइपिंग हैं और किसी इच्छानुसार संख्या के साथ तुलना के ऑपरेटर को दोनों प्रकारों के लिए परिभाषित किया गया है, फिर इस फ़ंक्शन को किसी भी प्रकार के मान पास किए जा सकते हैं। चूँकि, इस प्रकार के ऑपरेटर को प्रारम्भ करने की संभावना संख्या प्रकार को अत्यधिक बाधित करती है (उदाहरण के लिए, कोई जटिल संख्या के साथ पूर्णांक की तुलना नहीं कर सकता है) और वास्तव में केवल पूर्णांक के साथ और वास्तविक के साथ की तुलना करना समझ में आता है। इस फ़ंक्शन को पुनर्लेखन करना जिससे यह केवल उसी प्रकार के 'x' और 'y' को स्वीकार करे, जिसके लिए बाध्य पोलिमोर्फ़िज्म की आवश्यकता होती है।
सबमिशन
टाइप सिद्धांत में सबसम्प्शन की अवधारणा[4] परिभाषित या मूल्यांकन करने के लिए प्रयोग किया जाता है कि क्या प्रकार S, प्रकार T का सबटाइपिंग है|
टाइप मूल्यों का समुच्चय है। समुच्चय के सभी मूल्यों को सूचीबद्ध करके 'व्यापक रूप से' वर्णित किया जा सकता है, या संभावित मूल्यों के डोमेन पर विधेय द्वारा समुच्चय की सदस्यता बताते हुए इसे 'आशयपूर्वक' वर्णित किया जा सकता है। सामान्य प्रोग्रामिंग लैंग्वेज में गणना टाइप्स को सूचीबद्ध मान द्वारा व्यापक रूप से परिभाषित किया जाता है। उपयोगकर्ता-परिभाषित प्रकार जैसे रिकॉर्ड (संरचनाएं, इंटरफेस) या कक्षाएं स्पष्ट प्रकार की घोषणा या उपस्तिथ मूल्य का उपयोग करके परिभाषित की जाती हैं, जो कॉपी या विस्तारित किए जाने वाले प्रोटोटाइप के रूप में जानकारी को एन्कोड करती है।
उपधारणा की अवधारणा पर वर्णन करते हुए, विशेष प्रकार के मूल्यों के समुच्चय को गणितीय इटैलिक T में उसका नाम लिखकर प्रदर्शित किया जाता है | उसी प्रकार, जिसे डोमेन पर विधेय के रूप में देखा जाता है, उसका नाम बोल्ड T में लिखकर प्रदर्शित किया जाता है। पारंपरिक प्रतीक <: का अर्थ सबटाइपिंग है, और :> का अर्थ सुपरटाइप है।
- विशेष प्रकार T, S को ग्रहण करता है यदि मान T का समुच्चय जिसे वह परिभाषित करता है, समुच्चय S का सुपरसेट है, जिससे S का प्रत्येक सदस्य T का सदस्य भी हो।
- विशेष प्रकार में कई प्रकार सम्मिलित किये जाते है: S के सुपरटाइप्स पर S प्रतिच्छेद करते हैं|
- यदि S<:T(और इसलिए S ⊆ T ), फिर T, वह विधेय जो समुच्चय T को परिचालित करता है, विधेय S (समान डोमेन पर) का भाग होना चाहिए जो S को परिभाषित करता है |
- यदि S, T को समाहित करता है, और T, S को ग्रहण करता है, तो दो प्रकार समान होते हैं (चूँकि वे एक ही प्रकार के नहीं हो सकते हैं यदि प्रकार प्रणाली नाम से प्रकारों को भिन्न करती है)।
सूचना विशिष्टता के संदर्भ में, सबटाइपिंग को इसके किसी भी सुपरटाइप की तुलना में अधिक विशिष्ट माना जाता है, क्योंकि यह उनमें से प्रत्येक के रूप में अल्प से अल्प उतनी ही जानकारी रखता है। इसके अधिक सामान्य सुपरटाइप की तुलना में यह सबटाइपिंग की प्रयोज्यता, या 'प्रासंगिकता' (उन स्थितियों की संख्या जहां इसे स्वीकार या प्रस्तावित किया जा सकता है) को बढ़ा सकता है। इस अधिक विस्तृत जानकारी के होने का हानि यह है कि यह सम्मिलित विकल्पों का प्रतिनिधित्व करता है जो सबटाइपिंग के 'प्रचलन' को अल्प करता है (उन स्थितियों की संख्या जो इसे उत्पन्न या उत्पन्न करने में सक्षम हैं)।
सदस्यता के संदर्भ में, समुच्चय-बिल्डर नोटेशन का उपयोग करके टाइप परिभाषाओं को व्यक्त किया जा सकता है, जो समुच्चय को परिभाषित करने के लिए विधेय का उपयोग करता है। विधेय को डोमेन पर परिभाषित किया जा सकता है (संभावित मानों का समुच्चय) D, विधेय आंशिक कार्य हैं जो मूल्यों की तुलना चयन मानदंड से करते हैं। उदाहरण के लिए कोई पूर्णांक मान 100 से अधिक या 200 से अल्प के बराबर है? यदि कोई मान मापदंड से मेल खाता है तो फ़ंक्शन मान प्रदान करता है। यदि नहीं, तो मान का चयन नहीं किया जाता है और कुछ भी वापस नहीं किया जाता है। (सूची की समझ कई प्रोग्रामिंग भाषाओं में उपयोग किए जाने वाले इस प्रारूप का रूप है।)
यदि दो विधेय हैं, जो टाइप T के लिए चयन मानदंड प्रारम्भ करता है, और जो प्रकार S के लिए अतिरिक्त मानदंड प्रारम्भ करता है, फिर दो प्रकार के समुच्चय परिभाषित किए जा सकते हैं:
विधेय साथ लगाया जाता है यौगिक विधेय S परिभाषित करने के भाग के रूप में S दो विधेय संयुक्त हैं, इसलिए दोनों का चयन करने के लिए मूल्य के लिए सत्य होना चाहिए। विधेय विधेय T को ग्रहण करता है, इसलिए S <: T.
उदाहरण के लिए: फेलिना नामक बिल्ली प्रजातियों की उपप्रजाति है, जो फेलिडे परिवार का भाग है। जीनस फेलिस, जिससे घरेलू बिल्ली प्रजाति फेलिस कैटस संबंधित है, उस उप-परिवार का भाग है।
पूर्व विधेय के अनुरूप मूल्यों के डोमेन पर दूसरे विधेय के अनुप्रयोग के माध्यम से विधेय के संयोजन को यहाँ व्यक्त किया गया है। प्रकार के रूप में देखा, Felis <: Felinae <: Felidae.
यदि T, S (T:> S) को समाहित करता है तो प्रक्रिया, कार्य या अभिव्यक्ति को मान दिया जाता है ऑपरेंड के रूप में (पैरामीटर मान या शब्द) इसलिए उस मान पर टाइप T में से किस के रूप में कार्य करने में सक्षम होगा, क्योंकि है | उपरोक्त उदाहरण में, हम आशा कर सकते हैं कि उप-परिवार का कार्य सभी तीन प्रकारों 'फेलिडे', 'फेलिना' और 'फेलिस' के मूल्यों पर प्रारम्भ होगा।
सबटाइपिंग स्कीम्स
प्रकार सिद्धांतकार नाममात्र प्रकार प्रणाली के मध्य अंतर करते हैं, जिसमें केवल निश्चित विधि से घोषित आपस के सबटाइपिंग हो सकते हैं, और संरचनात्मक प्रकार प्रणाली, जिसमें दो प्रकार की संरचना निर्धारित करती है कि वो दूसरे का सबटाइपिंग है या नहीं है। ऊपर वर्णित वर्ग-आधारित ऑब्जेक्ट-ओरिएंटेड सबटाइपिंग नाममात्र है; किसी वस्तु-उन्मुख लैंग्वेज के लिए संरचनात्मक सबटाइपिंग नियम यह कह सकता है कि यदि प्रकार A की वस्तुएं उन सभी संदेशों को संभाल सकती हैं जो B प्रकार की वस्तुएं संभाल सकती हैं (अर्थात, यदि वे सभी समान विधि को परिभाषित करते हैं, तो A, B का सबटाइपिंग है, दूसरे से वंशानुक्रम हो या नहीं। यह तथाकथित डक टाइपिंग गतिशील रूप से टाइप की गई वस्तु-उन्मुख भाषाओं में सरल है। वस्तु प्रकार के अतिरिक्त अन्य प्रकार के लिए ध्वनि संरचनात्मक सबटाइपिंग नियम भी सर्वविदित हैं। सबटाइपिंग के साथ प्रोग्रामिंग भाषाओं के कार्यसमन्वय दो सामान्य वर्गों में सम्मलित हैं: समावेशी कार्यसमन्वय, जिसमें टाइप A के किसी भी मूल्य का प्रतिनिधित्व भी टाइप B पर समान मान का प्रतिनिधित्व करता है | यदि A <: बB, और उत्तम रूप से कार्यसमन्वय, जिसमें टाइप A का मान स्वचालित रूप से प्रकार B में परिवर्तित किया जा सकता है। वस्तु-उन्मुख लैंग्वेज में उप-वर्गीकरण द्वारा प्रेरित सबटाइपिंग सामान्यतः समावेशी होता है; पूर्णांक और फ़्लोटिंग-पॉइंट नंबरों से संबंधित सबटाइपिंग संबंध, जो भिन्न-भिन्न प्रतिनिधित्व करते हैं, सामान्यतः उत्तम रूप के होते हैं।
सबटाइपिंग संबंध को परिभाषित करने वाली लगभग सभी प्रकार की प्रणालियों में, यह कर्मकर्त्ता (अर्थ A <: A किसी भी प्रकार A के लिए) और सकर्मक (अर्थात् यदि A <: B और B <: C तो A <: C) है। यह इस प्रकारपूर्व आदेश बनाता है।
रिकॉर्ड टाइप्स
विड्थ और डेप्थ सबटाइपिंग
रिकॉर्ड के प्रकार (कंप्यूटर विज्ञान) चौड़ाई और गहराई सबटाइपिंग की अवधारणाओं को उत्पन्न करते हैं। ये नए प्रकार के रिकॉर्ड को प्राप्त करने के दो भिन्न -भिन्न विधि को व्यक्त करते हैं जो मूल रिकॉर्ड प्रकार के समान संचालन की अनुमति देता है।
याद रखें कि रिकॉर्ड (नामित) फ़ील्ड का कोई संग्रह है। चूंकि सबटाइपिंग ऐसा प्रकार है जो मूल प्रकार पर अनुमत सभी परिचालनों की अनुमति देता है, रिकॉर्ड सबटाइपिंग को फ़ील्ड पर उसी संचालन का समर्थन करना चाहिए जो मूल प्रकार समर्थित है।
इस प्रकार के समर्थन को प्राप्त करने की विधि, जिसे चौड़ाई सबटाइपिंग कहा जाता है, रिकॉर्ड में फ़ील्ड जोड़ता है। अधिक औपचारिक रूप से, प्रत्येक (नामित) क्षेत्र जो कि चौड़ाई सुपरटाइप में प्रदर्शित होता है, चौड़ाई सबटाइपिंग में दिखाई देगा। इस प्रकार, सुपरटाइप पर व्यवहार्य कोई भी ऑपरेशन सबटाइपिंग द्वारा समर्थित होगा।
दूसरी विधि, जिसे डेप्थ सबटाइपिंग कहा जाता है, विभिन्न क्षेत्रों को उनके सबटाइपिंगों से परिवर्तित कर देती है अर्थात्, सबटाइपिंग के क्षेत्र सुपरटाइप के क्षेत्रों के लिए सबटाइपिंग हैं। चूँकि सुपरटाइप में किसी फ़ील्ड के लिए समर्थित कोई भी ऑपरेशन उसके सबटाइपिंग के लिए समर्थित है, रिकॉर्ड सुपरटाइप पर संभव कोई भी ऑपरेशन रिकॉर्ड सबटाइपिंग द्वारा समर्थित है। गहराई सबटाइपिंग केवल अपरिवर्तनीय रिकॉर्ड के लिए समझ में आता है: उदाहरण के लिए, आप कोई वास्तविक बिंदु (दो वास्तविक क्षेत्रों के साथ रिकॉर्ड) के 'x' फ़ील्ड को 1.5 असाइन कर सकते हैं, किन्तु आप 'x' फ़ील्ड के समान नहीं कर सकते पूर्णांक बिंदु (जो, चूँकि, वास्तविक बिंदु प्रकार का गहरा सबटाइपिंग है) क्योंकि 1.5 पूर्णांक नहीं है (सहप्रसरण और प्रतिप्रसरण (कंप्यूटर विज्ञान) देखें)।
अभिलेखों की सबटाइपिंग को प्रणाली F<: में परिभाषित किया जा सकता है जो रिकॉर्ड प्रकारों के सबटाइपिंग के साथ पैरामीट्रिक पोलिमोर्फ़िज्म को जोड़ती है और कई कार्यात्मक प्रोग्रामिंग भाषाओं के लिए सैद्धांतिक आधार है जो दोनों सुविधाओं का समर्थन करती हैं।
कुछ प्रणालियाँ लेबल किए गए असंयुक्त संघ प्रकारों (जैसे बीजगणितीय डेटा प्रकार) के सबटाइपिंग का भी समर्थन करती हैं। चौड़ाई सबटाइपिंग का नियम विपरीत है, चौड़ाई सबटाइपिंग में दिखाई देने वाला प्रत्येक टैग चौड़ाई सुपरटाइप में दिखाई देना चाहिए।
फंक्शन टाइप्स
यदि T1 → T2 कोई फ़ंक्शन प्रकार है, तो इसका उप प्रकार कोई फ़ंक्शन प्रकार है S1 → S2 उस संपत्ति के साथ T1 <: S1 और S2 <: T2. निम्नलिखित टाइपिंग नियम का उपयोग करके इसे संक्षेप में प्रस्तुत किया जा सकता है:
अधिकांश ऑब्जेक्ट-ओरिएंटेड भाषाओं के प्रकार साइड इफेक्ट की अनुमति देने वाली भाषाओं में, सबटाइपिंग सरलता गारंटी देने के लिए पर्याप्त नहीं है कि किसी फ़ंक्शन को दूसरे के संदर्भ में सुरक्षित रूप से उपयोग किया जा सकता है। इस क्षेत्र में लिस्कोव का कार्य व्यवहार सबटाइपिंग पर केंद्रित है, जो इस लेख में वर्णन की गई प्रकार प्रणाली सुरक्षा के अतिरिक्त यह भी आवश्यक है कि सबटाइपिंग अनुबंध द्वारा कुछ डिजाइन में सुपरटेप द्वारा गारंटीकृत सभी अपरिवर्तनीय (कंप्यूटर विज्ञान) को संरक्षित करें।[5] सबटाइपिंग की यह परिभाषा सरलता अनिर्णीत समस्या है, इसलिए इसे किसी प्रकार के चेकर द्वारा सत्यापित नहीं किया जा सकता है।
अपरिवर्तनीय वस्तुओं का सबटाइपिंग पैरामीटर मानों और वापसी मूल्यों के उपचार के समान है। केवल-लिखने का संदर्भ (या सिंक) प्रतिपरिवर्ती हैं, जैसे पैरामीटर मान; केवल-लिखने का संदर्भ (या स्रोत) प्रतिपरिवर्ती हैं, जैसे प्रतिलाभ की मात्रा परिवर्तनीय संदर्भ जो स्रोत और सिंक दोनों के रूप में कार्य करते हैं, वे अपरिवर्तनीय हैं।
इनहेरिटेंस के साथ संबंध
सबटाइपिंग और वंशानुक्रम स्वतंत्र (ऑर्थोगोनल) संबंध हैं। वे संयोग कर सकते हैं, किन्तु कोई भी दूसरे का विशेष विषय नहीं है। दूसरे शब्दों में, दो प्रकार S और T के मध्य, सबटाइपिंग और वंशानुक्रम के सभी संयोजन संभव हैं:
- S न तो सबटाइपिंग है और न ही T का व्युत्पन्न प्रकार है।
- S सबटाइपिंग है किन्तु T का व्युत्पन्न प्रकार नहीं है।
- S सबटाइपिंग नहीं है, किन्तु T का व्युत्पन्न प्रकार है।
- S उप प्रकार और T का व्युत्पन्न प्रकार दोनों है।
प्रथम विषय स्वतंत्र प्रकारों द्वारा चित्रित किया गया है, जैसे Boolean
और Float
.
दूसरे विषय को मध्य के संबंध से चित्रित किया जा सकता है Int32
और Int64
.अधिकांश वस्तु उन्मुख प्रोग्रामिंग भाषाओं में, Int64
Int32
उत्तराधिकार से संबंधित नहीं हैं चूँकि Int32
को Int64
का सबटाइपिंग माना जा सकता है चूंकि किसी भी 32 बिट पूर्णांक मान 64 बिट पूर्णांक मान में प्रचारित किया जा सकता है।
तृतीय विषय कार्यों के सबटाइपिंग का परिणाम है। मान लें कि टाइप T का सुपर क्लास है जिसमें एकल प्रकार की वस्तु लौटाने वाली विधि m है (जैसे M का प्रकार T → T है, यह भी ध्यान दें कि m का प्रथम पैरामीटर यह/स्वयं है) और T से व्युत्पन्न वर्ग प्रकार S वंशानुक्रम से, S में m का प्रकार S → S है। S को T का सबटाइपिंग होने के लिए S में m का प्रकार T में m के प्रकार का सबटाइपिंग होना चाहिए , दूसरे शब्दों में: S → S ≤: T → T. फ़ंक्शन सबटाइपिंग नियम के बॉटम-अप एप्लिकेशन द्वारा, इसका अर्थ है: S ≤: T और T ≤: S, जो केवल तभी संभव है जब S और T समान हों। चूँकि वंशानुक्रम अप्रतिवर्ती संबंध है, S, T का सबटाइपिंग नहीं हो सकता।
सबटाइपिंग और वंशानुक्रम तब संगत होते हैं जब सभी उत्तराधिकार में मिले क्षेत्र और व्युत्पन्न प्रकार के विधि में ऐसे प्रकार होते हैं जो संबंधित क्षेत्रों के सबटाइपिंग होते हैं और उत्तराधिकार में मिले प्रकार के विधि होते हैं।[6]
केर्सिओन्स
बलपूर्वक सबटाइपिंग प्रणालियों में, सबटाइपिंगों को सबटाइपिंग से सुपरटाइप में अंतर्निहित प्रकार रूपांतरण कार्यों द्वारा परिभाषित किया जाता है। प्रत्येक सबटाइपिंग संबंध (S <: T) के लिए, बलपूर्वक कार्य बल: S → T प्रदान किया जाता है, और प्रकार S के किसी भी वस्तु को बल के रूप में माना जाता है S → T(s) टाइप T का है। किसी बलपूर्वक फ़ंक्शन को रचना द्वारा परिभाषित किया जा सकता है, यदि S <: T और T <: U तो s को यौगिक बलपूर्वक के अंतर्गत टाइप U की वस्तु के रूप में माना जा सकता है T → U ∘ बलपूर्वक S → T इसी प्रकार से अपने आप में बलपूर्वक T → T पहचान फंक्शन idT है।
रिकॉर्ड के लिए बलपूर्वक कार्य और संघ सबटाइपिंगों को भिन्न करना घटक के अनुसार परिभाषित किया जा सकता है; चौड़ाई-विस्तारित रिकॉर्ड के विषय में, प्रकार के बलपूर्वक केवल उन घटकों को त्याग देती है जो सुपरटेप में परिभाषित नहीं हैं। फ़ंक्शन प्रकारों के लिए प्रकार का दबाव f'(s) = बलपूर्वक द्वारा दिया जा सकता है f'(s) = coerceS2 → T2(f(coerceT1 → S1(t))), पैरामीटर मानों के सह-प्रसरण और प्रति-प्रसरण (कंप्यूटर विज्ञान) और वापसी मूल्यों के सहप्रसरण को दर्शाता है।
बलपूर्वक का कार्य विशिष्ट रूप से सबटाइपिंग और सुपर टाइप को देखते हुए निर्धारित किया जाता है। इस प्रकार, जब कई सबटाइपिंग संबंधों को परिभाषित किया जाता है, तो यह सुनिश्चित करने के लिए सावधानी करनी चाहिए कि सभी प्रकार के दबाव सुसंगत हैं। उदाहरण के लिए, यदि कोई पूर्णांक जैसे 2: इन्टिजर को फ्लोटिंग पॉइंट नंबर (जैसे, 2.0: फ्लोट) के लिए बलपूर्वक किया जा सकता है, तो यह 2.1: फ्लोट 2: इन्टिजर के लिए बलपूर्वक स्वीकार्य नहीं है, क्योंकि यौगिक बलपूर्वक float → float बलपूर्वक दिया गया int → float ∘ बलपूर्वक float → int तब पहचान बलपूर्वक आईडी से भिन्न float.होता है।
यह भी देखें
- सहप्रसरण और प्रतिप्रसरण (कंप्यूटर विज्ञान)
- वृत्त-दीर्घवृत्त समस्या (मूल्य-प्रकारों के समान आधार पर चर-प्रकारों को सबटाइपिंग करने के खतरों के लिए)
- कक्षा आधारित प्रोग्रामिंग
- शीर्ष प्रकार
- शोधन प्रकार
- व्यवहार सबटाइपिंग
टिप्पणियाँ
- ↑ Copestake, Ann. Implementing typed feature structure grammars. Vol. 110. Stanford: CSLI publications, 2002.
- ↑ Cardelli, Luca. A semantics of multiple inheritance. In G. Kahn, D. MacQueen, and G. Plotkin, editors, Semantics of Data Types, volume 173 of Lecture Notes in Computer Science, pages 51–67. Springer-Verlag, 1984. Full version in Information and Computation, 76(2/3):138–164, 1988.
- ↑ Pierce, ch. 15 notes
- ↑ Benjamin C. Pierce, Types and Programming Languages, MIT Press, 2002, 15.1 "Subsumption", p. 181-182
- ↑ Barbara Liskov, Jeannette Wing, A behavioral notion of subtyping, ACM Transactions on Programming Languages and Systems, Volume 16, Issue 6 (November 1994), pp. 1811–1841. An updated version appeared as CMU technical report: Liskov, Barbara; Wing, Jeannette (July 1999). "Behavioral Subtyping Using Invariants and Constraints" (PS). Retrieved 2006-10-05.
- ↑ Cook, Hill & Canning 1990.
संदर्भ
Textbooks
- Benjamin C. Pierce, Types and programming languages, MIT Press, 2002, ISBN 0-262-16209-1, chapter 15 (subtyping of record types), 19.3 (nominal vs. structural types and subtyping), and 23.2 (varieties of polymorphism)
- C. Szyperski, D. Gruntz, S. Murer, Component software: beyond object-oriented programming, 2nd ed., Pearson Education, 2002, ISBN 0-201-74572-0, pp. 93–95 (a high-level presentation aimed at programming language users)
Papers
- Reynolds, John C. Using category theory to design implicit conversions and generic operators. In N. D. Jones, editor, Proceedings of the Aarhus Workshop on Semantics-Directed Compiler Generation, number 94 in Lecture Notes in Computer Science. Springer-Verlag, January 1980. Also in Carl A. Gunter and John C. Mitchell, editors, Theoretical Aspects of Object-Oriented Programming: Types, Semantics, and Language Design (MIT Press, 1994).
अग्रिम पठन
- John C. Reynolds, Theories of programming languages, Cambridge University Press, 1998, ISBN 0-521-59414-6, chapter 16.
- Martín Abadi, Luca Cardelli, A theory of objects, Springer, 1996, ISBN 0-387-94775-2. Section 8.6 contrast the subtyping of records and objects.