2013-02-06 19 views
6

the wikipedia article पर देखने के बाद मैं 'उप प्रकार' शब्द से अपरिचित हूं।जब लिस्कोव प्रतिस्थापन उपप्रकारों को संदर्भित करता है, तो क्या यह सी # के संदर्भ में व्युत्पन्न कक्षाओं के बारे में बात कर रहा है?

मैं Liskov प्रतिस्थापन ले लिया मतलब करने के लिए यदि आप एक विधि है कि एक Animal लेता है, तो आप किसी भी अनायास ही बिना किसी दुष्प्रभाव एक Cat या एक Animal जहां Cat : Animal में पारित करने के लिए सक्षम होना चाहिए।

क्या यह लिस्कोव प्रतिस्थापन का संदर्भ है?

+5

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

+3

इस प्रश्न को "रचनात्मक नहीं" के रूप में बंद करने का मतदान क्यों करें? – ken2k

+0

धन्यवाद, मुझे यकीन नहीं था कि क्या यह शायद एक दूसरे के स्थान पर int/double जैसे प्रकारों का उपयोग कर सकता है। यदि आप इसे उत्तर बॉक्स में डालते हैं, तो मैं इसे उत्तर के रूप में चिह्नित कर सकता हूं। – NibblyPig

उत्तर

3

बिल्कुल। कुछ भी जो पशु लेता है वह कुत्ते, बिल्ली, और उप-वर्ग (नस्लों, यदि आपको पसंद है) लेने में सक्षम होना चाहिए। विधियां संगत होंगी।

ध्यान दें कि उप-प्रकार में पूर्व शर्त को मजबूत नहीं किया जा सकता है, न ही पोस्टकंडीशन कमजोर हो सकते हैं। अन्यथा आप एक विशेष उप प्रकार में स्लॉट कर सकते हैं और यह तोड़ देगा क्योंकि आस-पास के कोड ने कुछ पूर्व शर्त लगाई थीं जो सबक्लास बर्दाश्त नहीं कर सका। अभ्यास में कार्यान्वित करना मुश्किल हो सकता है - अधिक जानकारी के लिए the circle/ellipse problem देखें।

+0

+1 पर एक बहुत ही उचित प्रश्न लगता है। क्योंकि दृढ़ता से टाइप की गई भाषा के संदर्भ में लिस्कोव के बारे में बात करते समय यह सब कुछ है। –

+0

यह दिलचस्प लगता है, इसे अभी पढ़ रहा है। मैं सोच रहा था कि आप सिद्धांत का उल्लंघन कैसे करते हैं, क्योंकि सी # दृढ़ता से टाइप किए जाने के कारण आप किसी भी संपत्ति का उपयोग नहीं कर सकते हैं जो गलती से मौजूद नहीं है। – NibblyPig

+0

तो क्या आप कहेंगे कि लिस्कोव सिद्धांत उस स्थिति में तोड़ा जा रहा है क्योंकि 'सर्कल' 'एलिप्स' का प्रकार नहीं है? और यह 'stretchX' द्वारा सिद्ध किया गया है 'सर्कल' पर वैध संचालन नहीं है? – NibblyPig

0

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