美文网首页
六大原则(三):里氏替换原则

六大原则(三):里氏替换原则

作者: bug喵喵 | 来源:发表于2021-01-19 11:46 被阅读0次

定义

里氏替换原则(Liskov Substitution Principle,LSP)有两个定义。第一个定义是:

If for each object o1 of type S there is an object o2 of type T such that for all programs P defined in terms of T, the behavior of P is unchanged when o1 is substituted for o2 then S is a subtype of T.(如果每一个类型S的对象o1,都有一个类型T的对象o2,在以T定义的所有程序P中将所有的对象o2都替换为o1,而程序P的行为没有发生变化,那么S是T的子类。)

第一个定义说的云里雾里的,其实意思就是说:在一个程序中,如果可以将一个类T的对象全部替换为另一个类S的对象,而程序的行为没有发生变化,那么S是T的子类。

里氏替换原则的第二个定义是:

Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.(所有引用基类的地方必须能透明地使用其子类对象。)

第二个定义明显要比第一个定义更容易理解。通俗地讲,就是任何一个使用父类的地方,你都可以把它替换成它的子类,而不会发生任何错误或异常。

大家可能会觉得很奇怪,为什么里氏替换原则会有两个定义呢?下面我们来分析一下。

如果我们有A和B两个条件:

A条件:在用类T的对象o1定义的程序P中,将o1全部替换为类S的对象o2,而程序P的行为没有发生变化;

B条件:类S是类T的子类。

根据里氏替换原则的第一个定义,A条件可以推导出B条件;根据里氏替换原则的第二个定义,B条件可以推导出A条件。所以,里氏替换原则其实就是:A条件和B条件互为充要条件。

意义

继承,是面向对象语言非常优秀的语言机制。里氏替换原则的意义,就是规范继承的用法,让我们最大限度地发挥继承的优点。

相关文章

  • 里氏替换原则

    个人博客原文:里氏替换原则 设计模式六大原则之二:里氏替换原则。 简介 姓名 :里氏替换原则 英文名 :Lisko...

  • 装饰器、简单工厂、工厂方法和抽象工厂模式

    设计模式的六大原则 单一职责原则(Single Responsibility Principle) 里氏替换原则(...

  • 设计模式

    设计模式六大原则[设计模式六大原则(1):单一职责原则][设计模式六大原则(2):里氏替换原则][设计模式六大原则...

  • 6大设计原则

    Python6大设计原则 阅读目录 内容总览 六大设计原则都有哪些 一、单一职责原则 二、里氏替换原则 三、依赖倒...

  • 设计模式-六大原则

    转载自 设计模式六大原则 目录:- 设计模式六大原则(1):单一职责原则- 设计模式六大原则(2):里氏替换原则-...

  • 设计模式六大原则

    目录: 设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒...

  • 设计模式6大原则

    目录: 设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒...

  • 设计原则之6大原则

    目录:设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒置...

  • Android设计模式—面向对象六大原则

    面向对象六大原则: 单一职责原则 开闭原则 里氏替换原则 依赖倒置原则 接口隔离原则 最少知识原则 单一职责原则 ...

  • 设计模式相关问题

    一、六大设计原则:单一职责原则 、开闭原则、接口隔离原则、依赖倒置原则、里氏替换原则、迪米特原则。1、单一职责原则...

网友评论

      本文标题:六大原则(三):里氏替换原则

      本文链接:https://www.haomeiwen.com/subject/moyqzktx.html