gpt4 book ai didi

solid-principles - Liskov 替换原理示例

转载 作者:行者123 更新时间:2023-12-01 00:46:49 28 4
gpt4 key购买 nike

LSP 是 SOLID 中最难正确理解的。

LSP 声明程序中的对象应该可以用它们的子类型的实例替换,而不会改变程序的正确性。

因此,如果我们有这个典型的矩形 - 正方形示例:

rect = new Rectangle();

rect.width = 10;
rect.height = 20;

然后我们尝试测试它:
assert 10 == rect.width
assert 20 == rect.height

一切都很好,但是当我们尝试说正方形也是矩形时,我们使用:
rect = new Square();

Square 实际上具有相同的高度和宽度,这会使测试失败。

那么我们如何解决这个问题呢?在这种情况下,我们为 Square 和 Rectangle 分离类以避免 LSP 问题?

最佳答案

在这个特定的例子中,解决方案是不让 Square源自 Rectangle ,因为虽然我们通常说继承是一种"is"关系,但您应该将其视为一种“行为类似”的关系。因此,尽管在数学上,SquareRectangle , Square肯定不会行为举止 Rectangle (正如您在上面的代码中所证明的那样)。

相反,让它们都从同一个基类派生:

public abstract class Shape { }

public class Square : Shape {
public int Size;
}

public class Rectangle : Scape {
public int Height;
public int Weight;
}

关于solid-principles - Liskov 替换原理示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33801214/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com