सबटाइपिंग

From Vigyanwiki

प्रोग्रामिंग लैंग्वेज थ्योरी में, सबटाइपिंग (सबटाइपिंग पोलिमोर्फ़िज्म या इन्क्लूसिव पोलिमोर्फ़िज्म) पोलिमोर्फ़िज्म (कंप्यूटर विज्ञान) का रूप है जिसमें सबटाइप डेटा टाइप होता है जो सब्स्टिट्युटबिलिटी के नोशन द्वारा किसी अन्य डेटाटाइप (सुपरटाइप) से संबंधित है, जिसका अर्थ है कि प्रोग्राम एलिमेंट्स, सामान्यतः सबरूटीन्स या फंक्शन, जो सुपरटाइप के एलिमेंट्स पर ऑपरेट करने के लिए लिखे गए हैं, वे सबटाइप के एलिमेंट्स पर भी ऑपरेट कर सकते हैं। यदि S, T का सबटाइप है, तो सबटाइपिंग बाइनरी रिलेशन ( S <: T,  ST,[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.

उदाहरण के लिए: फेलिना नामक बिल्ली प्रजातियों की उपप्रजाति है, जो फेलिडे परिवार का भाग है। जीनस फेलिस, जिससे घरेलू बिल्ली प्रजाति फेलिस कैटस संबंधित है, उस उप-परिवार का भाग है।