मेरा मानना है कि तर्क कुछ इस तरह है:
मान लीजिए कि आप एक विधि है कि एक आयत इसकी चौड़ाई स्वीकार करता है और समायोजित कर देता है करते हैं:
public void SetWidth(Rectangle rect, int width)
{
rect.Width = width;
}
यह पूरी तरह से उचित होना चाहिए, यह देखते हुए क्या एक आयत है , यह मानने के लिए कि यह परीक्षण पास होगा:
Rectangle rect = new Rectangle(50, 20); // width, height
SetWidth(rect, 100);
Assert.AreEqual(20, rect.Height);
... क्योंकि आयताकार की चौड़ाई बदलना इसकी ऊंचाई को प्रभावित नहीं करता है।
हालांकि, मान लीजिए कि आपने आयत से एक नई स्क्वायर क्लास ली है। परिभाषा के अनुसार, एक वर्ग की ऊंचाई और चौड़ाई हमेशा बराबर होती है। आइए फिर से परीक्षण की कोशिश करें:
Rectangle rect = new Square(20); // both width and height
SetWidth(rect, 100);
Assert.AreEqual(20, rect.Height);
वह परीक्षण विफल हो जाएगा, क्योंकि वर्ग की चौड़ाई 100 तक सेट करने से इसकी ऊंचाई भी बदल जाएगी।
इस प्रकार, लिस्कोव के प्रतिस्थापन सिद्धांत का उल्लंघन आयत से स्क्वायर प्राप्त करके किया जाता है।
"आइस-ए" नियम "असली दुनिया" (एक वर्ग निश्चित रूप से आयत का एक प्रकार है) में समझ में आता है, लेकिन हमेशा सॉफ्टवेयर डिजाइन की दुनिया में नहीं।
संपादित
आपके प्रश्न का उत्तर करने के लिए, सही डिजाइन शायद चौड़ाई या ऊंचाई के बारे में होना चाहिए कि दोनों आयत और वर्ग एक आम "बहुभुज" या "आकार" वर्ग है, जो किसी भी नियम लागू नहीं करता है से निकाले जाते हैं ।
दूसरा उदाहरण, क्या 50 के लिए जोर परीक्षण करना चाहिए? बीटीडब्लू, "असली दुनिया" में एक वर्ग या तो परिवर्तनीय नहीं है (एक पृष्ठ पर चित्रित होता है) या जब बल लागू होता है (यह रबड़ से बना होता है), वास्तविक दुनिया में आईओओ एक वस्तु कर सकता है गतिशील रूप से कुछ प्रकार बदलें जो हम प्रोग्रामिंग भाषाओं में बहुत अच्छी तरह से मॉडल नहीं करते हैं। – AnthonyWJones
ओह, दूसरे उदाहरण पर अच्छी तरह से देखा गया। परीक्षण सही है - ctor पैरामीटर गलत है। क्लिपबोर्ड विरासत बग! मैं इसे ठीक कर दूंगा। –