1、 (违反里氏替换原则的反例子 )现需要完成一个两数相减的功能,由类Subtraction来负责;需要增加一个新的功能:完成两数相加,然后再与 10求和,由类 Add来负责,所以类 Add继承类 S 您所在的位置:网站首页 如何在excel中求和再减一个数 1、 (违反里氏替换原则的反例子 )现需要完成一个两数相减的功能,由类Subtraction来负责;需要增加一个新的功能:完成两数相加,然后再与 10求和,由类 Add来负责,所以类 Add继承类 S

1、 (违反里氏替换原则的反例子 )现需要完成一个两数相减的功能,由类Subtraction来负责;需要增加一个新的功能:完成两数相加,然后再与 10求和,由类 Add来负责,所以类 Add继承类 S

2023-03-20 15:10| 来源: 网络整理| 查看: 265

1、 (违反里氏替换原则的反例子 )现需要完成一个两数相减的功能,由类Subtraction来负责;需要增加一个新的功能:完成两数相加,然后再与 10求和,由类 Add来负责,所以类 Add继承类 Subtraction后。调试运行此示例,分析程序运行得到错误结果的原因。

在这个例子中,Add类继承了Subtraction类,但是它的新增功能addAndSumTo10并没有对原有函数进行扩展或重载,而是直接调用了Subtraction类中的函数,破坏了原有类的封装性和稳定性。这样的设计不仅违反了里氏替换原则,而且可能导致程序出现错误结果,因为在调用addAndSumTo10函数时,实际上是调用了Subtraction类中的subtract函数,并将其结果加上了10,而不是两数相加再加10。因此,需要对Add类进行重新设计,或者将新增功能实现为一个新的独立函数,而不是直接调用原有函数。

2、分析程序:正方形不少长方形。在数学领域里,正方形毫无疑问是长方形,它是一个长宽相等的长方形。所以,我们开发的一个与几何图形相关的软件系统中,让正方形继承自长方形是顺利成章的事情。现在,我们截取该系统的一个代码片段进行分析://长方形类 Rectangle:class Rectangle { double length; double width; public double getLength() { return length; } public void setLength(double height) { this.length = length; } public double getWidth() { return width; } public void setWidth(double width) { this.width = width; } }//正方形类 Square:class Square extends Rectangle { public void setWidth(double width) { super.setLength(width); super.setWidth(width); } public void setLength(double length) { super.setLength(length); super.setWidth(length); } }由于正方形的度和宽度必须相等,所以在方法 setLength和 setWidth中,对长度和宽度赋值相同。类 TestRectangle是我们的软件系统中的一个组件,它有一个 resize方法要用到基类 Rectangle,resize方法的功能是模拟长方形宽度逐步增长的效果://测试类 TestRectangle:class TestRectangle { public void resize(Rectangle objRect) { while(objRect.getWidth() return a - b; } }

class Add extends Subtraction { public int addAndSumTo10(int a, int b) { return super.subtract(a, b) + 10; } }

在这个例子中,Add类继承了Subtraction类,但是其新增的功能addAndSumTo10并没有符合里氏替换原则,因为它并没有对原有函数进行扩展或重载,而是直接调用了Subtraction类中的函数,破坏了原有类的封装性和稳定性。

2、正方形不少长方形:

这个例子虽然看起来符合“正方形是长方形”的逻辑,但是在程序实现上出现了问题。因为长方形和正方形在尺寸和特性上有所不同,所以在代码中直接让正方形继承长方形会导致难以维护和扩展的代码。在这个例子中,如果想要对正方形类进行修改或扩展,可能会影响到长方形的使用,产生不必要的风险。因此,更好的做法是将正方形和长方形视为两个独立的类,各自实现对应的特性和方法,避免继承带来的复杂性和不确定性。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有