क्या Liskov प्रतिस्थापन सिद्धांत एक इंटरफ़ेस को लागू करने वाली कक्षाओं पर भी लागू होता है?


17

एलएसपी बताता है कि कक्षाओं को उनके आधार वर्गों के लिए प्रतिस्थापित किया जाना चाहिए, जिसका अर्थ है कि व्युत्पन्न और आधार कक्षाएं शब्दार्थ के बराबर होनी चाहिए।

लेकिन क्या एलएसपी एक इंटरफ़ेस लागू करने वाली कक्षाओं पर भी लागू होता है? दूसरे शब्दों में, यदि किसी वर्ग द्वारा कार्यान्वित किया गया एक इंटरफ़ेस विधि शब्दार्थ से भिन्न होता है, तो उपयोगकर्ता यह अपेक्षा करता है कि क्या इसे LSP का उल्लंघन माना जाएगा?


7
हाँ। वास्तव में एलएसपी के उल्लंघन के समान ही कारण और परिणाम हैं यदि यह एक इंटरफ़ेस है, एक सार वर्ग, एक पूर्ण वर्ग, कोई फर्क नहीं पड़ता। एलएसपी उपभोक्ताओं से आपके प्रकार का सामान्य तरीके से व्यवहार करने की अनुमति देने के लिए अपेक्षाओं को पूरा करने और पूरा करने के बारे में है।
जिमी हॉफ

5
द्वारा और बड़े (मैं मतभेदों को जानता हूं, लेकिन मैं यहां सामान्य कर रहा हूं), इंटरफेस कुछ हद तक शुद्ध अमूर्त वर्गों (सी ++ अवधि) के अनुरूप हैं और इसलिए लिस्कोव को इंटरफेस और उन वर्गों पर लागू करना चाहिए जो उन्हें लागू करते हैं।
जेसी सी। स्लीकर

3
एनबी एलएसपी का सूत्रीकरण मैं व्युत्पन्न और आधार वर्गों के बजाय उपप्रकारों के बोल से परिचित हूं। अच्छे कारण के साथ, मैं मानता हूं, क्योंकि कोई भी कारण वंशानुक्रम के लिए विशिष्ट नहीं है और किसी भी अन्य प्रकार के उपप्रकार के लिए भी लागू होता है।

जवाबों:


17

यदि एक वर्ग द्वारा लागू किया गया इंटरफ़ेस विधि शब्दार्थ से भिन्न है, तो उपयोगकर्ता इसे क्या होने की उम्मीद करता है, क्या इसे एलएसपी का उल्लंघन माना जाएगा?

यदि कार्यान्वयन इंटरफ़ेस के आवेगों और इसके तरीकों के पूर्व और बाद की स्थितियों के माध्यम से प्रलेखित व्यवहार से शब्दार्थ से भिन्न है, तो उत्तर "हां" है, यह एलएसपी का उल्लंघन होगा। सिद्धांत अमूर्त पक्ष और इसके कार्यान्वयन के लिए नियमों को स्थापित करता है, बिना अमूर्त पक्ष को एक वर्ग के रूप में प्रस्तुत करने की आवश्यकता होती है।

हालांकि, अगर हम इस बारे में बात करते हैं कि उपयोगकर्ता क्या अपेक्षा करते हैं , तो उत्तर "जरूरी नहीं" होगा: उपयोगकर्ता गलत अपेक्षाएं रखने के हकदार हैं।


"यदि कार्यान्वयन इंटरफ़ेस के आवेगों के माध्यम से प्रलेखित व्यवहार से शब्दार्थ रूप से भिन्न है" तो क्या आप "इंटरफ़ेस के अपरिवर्तनीयों" से क्या मतलब निकाल सकते हैं?
user1483278

3
@ user1483278 यहां प्रकार के आक्रमणकारियों के बारे में एक लेख है । लेख उन्हें "क्लास इनवेरिएंट्स" कहता है, लेकिन विवरण इंटरफेस पर भी लागू होता है। Invariants ऐसी स्थितियां हैं जो निर्माण पर स्थापित होती हैं, और एक उदाहरण के जीवन भर बनाए रखी जाती हैं। उदाहरण के लिए, यदि किसी इंटरफ़ेस में ऐसी संपत्ति है Nameजिसे सेट नहीं किया जा सकता है null, तो obj.Name != nullउसे उस इंटरफ़ेस का अपरिवर्तनीय कहा जाता है ।
dasblinkenlight

1
आमतौर पर जब अपरिवर्तनीयों पर चर्चा की जाती है, तो यह सत्यापित करने के लिए कोड का एक टुकड़ा लिखना संभव है कि वस्तु के पूरे जीवनकाल में अपरिवर्तनीय को बरकरार रखा जाता है। हालाँकि, यह आम तौर पर सीधे सादे अंग्रेजी में अपरिवर्तनीय का वर्णन करने के लिए अधिक सरल है।
रवांग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.