इनहेरिटेंस सबटाइपिंग से कैसे भिन्न होता है?


15

प्रोग्रामिंग भाषा के परिप्रेक्ष्य में, सबटिप करने से क्या मतलब है? मैंने सुना है कि "वंशानुक्रम उपशीर्षक नहीं है"। फिर वंशानुक्रम और उपप्रकार के बीच अंतर क्या हैं?


6
मुझे आश्चर्य है कि जब यह सवाल (और इसे अन्य लोगों की तरह) नए cs.SE साइट पर पुनर्निर्देशित किया जा सकता है जब यह सार्वजनिक बीटा में प्रवेश करता है?
सुरेश वेंकट

1
सैद्धांतिक कंप्यूटर विज्ञान (TCS) में अनुसंधान-स्तर के प्रश्नों के लिए एक Q & A साइट cstheory में आपका स्वागत है। आपका प्रश्न TCS में एक शोध-स्तरीय प्रश्न प्रतीत नहीं होता है। कृपया इसके बारे में अधिक जानकारी के लिए अक्सर पूछे जाने वाले प्रश्न और उन साइटों के लिए सुझाव देखें जो आपके प्रश्न का स्वागत कर सकती हैं। अंत में, यदि आपका प्रश्न दायरे से बाहर होने के लिए बंद है, और आप मानते हैं कि आप प्रश्न को शोध-स्तर का प्रश्न बना सकते हैं, तो कृपया ऐसा करने के लिए स्वतंत्र महसूस करें। समापन स्थायी नहीं है और प्रश्नों को फिर से खोल दिया जा सकता है, अधिक जानकारी के लिए एफएक्यू की जांच करें ।
केव

3
@UdayReddy: पहली बार उत्तर दिए जाने पर कोई प्रश्न तुच्छ नहीं था, लेकिन हमें आधुनिक दृष्टिकोण से निर्णय लेना चाहिए। आप के रूप में एक ही तर्क होगा कि दिज्क्स्ट्रा के एल्गोरिथ्म के बारे में सवाल ऑन-टॉपिक है क्योंकि पहला पेपर इसके बारे में बात करता है और कुछ नहीं।
त्सुकोशी इतो

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

3
किसी भी मामले में, ओपी को कुक एट अल। एक ही नाम के पेपर को इंगित करना काफी आसान है: Citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.102.8635
एंड्रियास रॉसबर्ग

जवाबों:


18

[मैंने ऑब्जेक्ट-ओरिएंटेड टाइप सिस्टम के मुद्दों के बारे में गहराई से नहीं सोचा है, लेकिन मैं कहूंगा कि चर्चा को प्राप्त करने के लिए मुझे क्या पता है।]

ABABAB

AB

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

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

साधारण मामलों में, फ़ील्ड जोड़ना ठीक काम करता है। सुपरक्लास का प्रकार उपवर्ग के प्रकार से कम क्षेत्रों की अपेक्षा करता है। इसलिए, यदि आप एक उपवर्ग के उदाहरण में प्लग करते हैं, जहां सेपरक्लास का एक उदाहरण अपेक्षित है, तो प्रोग्राम केवल प्रदान किए गए अतिरिक्त फ़ील्ड्स को अनदेखा करेगा और कुछ भी गलत नहीं होगा।

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

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


1
यह शायद यह भी ध्यान देने योग्य है कि वहाँ वास्तविक भाषाएं हैं जो विरासत में मिली चीजों को सफलतापूर्वक घटाने से बची हैं, उदाहरण के लिए Ocaml अपने ऑब्जेक्ट सिस्टम में।
एंड्रियास रॉसबर्ग

@AndreasRossberg वास्तव में, OCaml मेरे फ्रेम में नहीं था जब मैंने वह उत्तर लिखा था। मुझे लगता है कि OCaml में मामूली सबमिशनिंग नहीं है। इसलिए, इनमें से कुछ मुद्दे नहीं उठेंगे। लेकिन संभावना है कि प्रकार गलती से मेल खा सकते हैं भले ही व्यवहार नहीं करता है, और प्रकार प्रणाली उस तरह की गलतियों को पकड़ने में मदद करने में सक्षम नहीं होगी।
उदय रेड्डी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.