naturalCloud naturalCloud

记录精彩的程序人生

目录
里氏转换
/    

里氏转换

里氏转换概念

里式替换原则的英文翻译是:Liskov Substitution Principle,缩写为 LSP。这个原则最早是在 1986 年由 Barbara Liskov 提出

If S is a subtype of T, then objects of type T may be replaced with objects of type S, without breaking the program。

在 1996 年,Robert Martin 在他的 SOLID 原则中,重新描述了这个原则,英文原话是这样的:

Functions that use pointers of references to base classes must be able to use objects of derived classes without knowing it。

中文理解是 :
子类对象(object of subtype/derived class)能够替换程序(program)中父类对象(object of base/parent class)出现的任何地方,并且保证原来程序的逻辑行为(behavior)不变及正确性不被破坏。

核心理念

子类遵守父类的函数约定,按照协议设计

  • 函数功能
  • 函数入参出参 类型
  • 异常处理
  • 甚至包括注释

如何判断子类是否满足里氏原则

使用父类的单元测试测试子类,如有测试失败,则不满足

里氏转换的意义

  • 改进已有实现。例如程序最开始实现时采用了低效的排序算法,改进时使用 LSP 实现更高效的排序算法。
  • 指导程序开发。告诉我们如何组织类和子类(subtype),子类的方法(非私有方法)要符合 contract。三、改进抽象设计。如果一个子类中的实现违反了 LSP,那么是不是考虑抽象或者设计出了问题。

标题:里氏转换
作者:naturalCloud
地址:https://yunqiblog.cn/articles/2019/12/11/1576036903427.html