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