对LSP原则理解

1.LSP原则定义

里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

2.LSP原则含义

子类必须完全实现父类的方法
子类可以有自己的个性
覆盖或实现父类的方法时输入参数可以被放大
覆盖或实现父类的方法时输出结果可以被缩小

3.逆变与协变

逆变与协变用来描述类型转换(type transformation)后的继承关系,其定义:如果AA、BB表示类型,f(⋅)f(⋅)表示类型转换,≤≤表示继承关系(比如,A≤BA≤B表示AA是由BB派生出来的子类);

f(⋅)是逆变(contravariant)的,当A≤BA≤B时有f(B)≤f(A)f(B)≤f(A)成立;

f(⋅)是协变(covariant)的,当A≤BA≤B时有f(A)≤f(B)成立f(A)≤f(B)成立;

f(⋅)是不变(invariant)的,当A≤BA≤B时上述两个式子均不成立,即f(A)f(A)与f(B)f(B)相互之间没有继承关系。

4.LSP是子类型关系的一个特殊定义,称为(强)行为子类型化。在编程语言中,LSP依赖于以下限制:

前置条件不能强化
后置条件不能弱化
不变量要保持或增强
子类型方法参数:逆变
子类型方法的返回值:协变
异常类型:协变

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
面向对象程序设计原则(SOLID原则)是一组指导面向对象程序设计的基本准则,旨在使代码更易于理解、维护和扩展。以下是我对每个原则理解: 1. 单一职责原则 (SRP) 每个类或模块应该只有一个责任。这意味着一个类应该只有一个改变的原因,这样可以使它更容易维护和测试。如果一个类有多个职责,那么当其中一个职责发生改变时,会影响到其他职责。 2. 开放封闭原则 (OCP) 软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。这意味着我们应该尽量避免修改已有的代码,而是通过扩展代码来实现新的功能。这样可以减少代码的风险和不稳定性,同时也能更好地支持软件的演化。 3. 里氏替换原则 (LSP) 子类应该可以替换它们的父类并且不会影响程序的正确性。这意味着子类必须与父类保持一致的行为和约束。这样可以确保代码的可重用性和可扩展性。 4. 接口隔离原则 (ISP) 客户端不应该依赖于它不需要使用的接口。这意味着我们应该尽量将接口拆分成更小的部分,只提供客户端需要的接口。这样可以减少代码的依赖性和复杂性。 5. 依赖倒置原则 (DIP) 高层模块不应该依赖于低层模块,它们应该都依赖于抽象。这意味着我们应该尽量使用抽象类或接口来实现依赖关系,而不是直接依赖于具体实现。这样可以减少代码的耦合性和提高代码的灵活性。 这些原则可以帮助我们编写高质量、可维护和可扩展的面向对象程序。它们不是硬性规定,而是提供了一些指导性的准则,需要根据具体的场景和需求进行适当的调整和应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值