里氏代换原则
“里氏代换原则是Barbara Liskov女士在1988年发表的,具体数学定义比较复杂,你可以查相关资料,它的白话翻译就是一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,
而且它察觉不出父类对象和子类对象区别。也就是说,在软件里面,把父类都替换成它的了类,程序的行为没有变化,简单地说,子类型必须能够替换掉它们的父类型。”
里氏代换原则(LSP):子类型必须能名替换掉它们的父类型。
下面是大话设计模式的对话,我感觉很生动有趣。
“这好像是学继承时就要了解的概念,子类继承了父类,所以子类可以以父类的身份出现。”
“是的,我问你个问题,如果在面向对象设计时,一个鸟类,一个是企鹅类,如果鸟是可以飞的,那么企鹅是鸟吗?企鹅可以继承鸟这个类吗?”
“企鹅是一种特殊的鸟,尽管不能飞会晤它也是鸟呀,当然可以继承。”
“哈,你上当了。我说的面向对象设计时,那就意味着什么呢?子类拥有父类所有非private的行为和属性。”
鸟会飞企鹅不会飞。尽管在生物学分类上,企鹅是一种鸟,便在编程世界里,企鹅不能以父类-鸟的身份出现,因为前提说所有鸟都能飞,而企鹅飞不了,所以,企鹅不能继承鸟类。”
“哦,你的意思我明白了,我受了直觉的影响。小时候上课时老师一再强调,像鸵鸟、企鹅等不会飞的动物也是鸟类。”
“也正因为有了这个原则,使得继承利用成为了可能,只有当子类可以替换掉父类,软件单位功能不受到影响时,父类才能真正被利用,而子类也能够在父类的基础上增加新的行为。比方说,猫是继承动物类的,以动物的身份拥有吃、喝,跑、叫等为,可当某一天,我们需要狗、牛、羊也拥有类似的行为,由于它们都是继承于动物,所以除了更改实例化的地方,程序其他处不需要改变。”
“我的感觉,由于有里氏代换原则,才使得开放-封闭成为了可能。”小菜说。
“这样说是可以的,正是由于子类型的可替换性才使用父类型的模块在无需要修改的情况下就可以扩展。不然还谈什么扩展开放,修改关闭呢。再回过头来看依赖倒转原则,高层模块不应该依赖低层模块,两个都应该依赖抽象,对这句话你就会有更深入的理解了。”
“哦,我明白了,依赖合围其实就是谁也不要依靠谁,除了约定的接口,大家都可以灵活自如。还好,她没有问我如何修收音机,收音机里都是些电阻、三极管,电路等等东东,全都焊接在一起,我可不会修的。”小菜庆幸道。
相关推荐
里氏代换原则案例程序LSP.zip
这一个学习java的笔记,里面主要介绍java的里氏代换原则
android设计模式里氏代换原则_法海捉拿白蛇新解.pdf
里氏代换原则是由麻省理工学院(MIT)计算机科学实验室的Liskov女士,在1987年的OOPSLA大会上发表的一篇文章《Data Abstraction and Hierarchy》里面提出来的,主要阐述了有关继承的一些原则,也就是什么时候应该...
http://blog.csdn.net/xingjiarong/article/details/50081857
c++里氏替换原则说明1
NULL 博文链接:https://364232252.iteye.com/blog/2371188
主要为大家详细介绍了里氏代换原则的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
里氏代换原则(Liskov Substitution Principle) 里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的...
而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。—— From Baidu 百科 3、依赖倒转原则(Dependence Inversion Principle) 这个是开闭原则的基础,具体内容:真...
而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。—— From Baidu 百科 3、依赖倒转原则(Dependence Inversion Principle) 这个是开闭原则的基础,具体内容:真...
第7章 里氏代换原则 第8章 依赖倒转原则 第9章 接口隔离原则 第10章 合成、聚合复用原则 第11章 迪米特法则 第12章 简单工厂模式 第13章 工厂方法模式 第14章 抽象工厂模式 第15章 单例模式 第16章 .......
2、里氏代换原则 3、依赖转换原则 4、接口隔离原则 5、合成/聚合复用原则 6、最少知识原则 (二)设计模式 1)工厂模式(Factory) 2)抽象工厂模式(Abstract Factory) 3)建造者模式(Builder) 4)原型模式...
里氏代换原则(LSP):一个软件实体如果使用的是一个基类的话,那么一定适用于其子类。 依赖倒转原则(DIP):要依赖于抽象,不要依赖于具体。 接口隔离原则(ISP):使用多个专门的接口比使用单一的总接口要好。 合成/...
2、里氏代换原则 3、依赖倒转原则 4、接口隔离原则 5、迪米特法则 6、合成复用原则 使用了一个个的demo案例,以通俗易懂的生活案例解析软件开发设计原则,掌握开发细节。写出耦合度低、易于扩展、更容易维护的...
3.1开闭原则此原则是由Bertrand Meyer提出的 3.2里氏代换原则里氏代换原则是由Barbara Liskov提出的 3.3依赖倒转原则指在软件里面
插件开发符合设计模式的单一职责原则和里氏代换原则 插件即插即用,非常灵活,适用于动态扩展功能的应用程序、大型项目等 本代码是插件管理实现的一种方式,可以动态的加载不同配置的不同插件,支持接口扩展 ...
7:里氏代换原则;8:依懒倒转原则;9:接口隔离原则;10:合成/聚合复用原则;11:迪米特法原则;12:简单工厂模式;13:工厂方法模式;14:抽象工厂模式;15:单例模式;16:单例模式与MX记录;17:多例模式;18:序列健生成器与单例及...
详细介绍了: 单一职责原则 开闭原则 里氏代换原则 依赖倒转原则 接口隔离原则 合成复用原则 迪米特法则
软件体系结构七大设计原则,开闭原则 里氏代换原则 依赖倒转原则 迪米特法则 迪米特法则