加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

里氏代换原则(Liskov Substitution Principle)

发布时间:2020-12-14 05:31:36 所属栏目:百科 来源:网络整理
导读:作用 它指导我们如何正确地进行继承与派生,并合理地重用代码! 定义 子类型必须能够替换掉它们的父类型、并出现在父类能够出现的任何地方。 这个就是尽量用多态的方法编程,也就是 GRASP 模式中的多态。 如果对于每一个类型为T1的对象o1,都有类型为T2的对象

作用

它指导我们如何正确地进行继承与派生,并合理地重用代码!

定义

子类型必须能够替换掉它们的父类型、并出现在父类能够出现的任何地方。

这个就是尽量用多态的方法编程,也就是GRASP模式中的多态。

如果对于每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有变化,那么类型T2是类型T1的子类型。

换言之,一个软件实体如果使用的是一个基类的话,那么一定适用于其子类,而且它根本不能察觉出基类对象和子类对象的区别。

反过来代换不成立。

里氏替换原则要点:

1)? 对于LSP的违反也潜在的违反了OCP

2)? 正方形从长方形继承的例子微妙的违反了这种原则

3)? 在考虑一个特定的设计是否恰当时,不能孤立地来看这个解决方案,必须根据设计的使用者所做出的合理假设来审视它

4)? 对象的行为方式是软件真正所关注的问题,IS A 关系是就行为而言的

5)? 派生类只能使用相等或更弱的前置条件来替换原始的前置条件,只能使用相等或更强的前置条件来替换原始的后置条件。

6)? 完成的功能少于基类的派生类通常不能替换基类,也不符合LSP

7)? 派生类不应该抛出基类不能预计的异常,否则违反LSP

里氏代换原则分析

里氏代换原则可以通俗表述为:在软件中如果能够使用基类对象,那么一定能够使用其子类对象。把基类都替换成它的子类,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类的话,那么它不一定能够使用基类。

里氏代换原则是实现开闭原则的重要方式之一,由于使用基类对象的地方都可以使用子类对象,因此在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读