==========================================================================================================
里氏替换原则(Liskov Substitution Principle:LSP)
1、解释
中文解释:如果对每一个类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有的对象o1都替换成o2时,程序P的行为不发生
任何变化,那么类型S是类型T的子类型。(所有引用基类的地方必须能透明的使用其子类的对象)
英文解释: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 where o1 is substituted for o2 then S is a subtype of T。(Functions that use pointers or references to base classes
must be able to use object of derived classes without knowing it)
自己理解:里氏替换原则是由于继承机制带来的,产生于子父类之间。该原则是对继承机制的进一步严格规范和要求:子类对象必须能无条件的完全替代父类
对象。而且不会影响程序的变化。(其实,说白了,在编程中大家都用过,就是用子类来代替父类或者接口,但是如果你不按照一定的要求做,替代后程序的执行结果
可能与你替代之前出现差异,为了不出现差异,你在写子类时就必须遵守一定的规则或者条件,这些规则加在一起就组成了”里氏替换原则“,下面一一说明)
2、实用范围
所有需要使用继承机制的地方。
3、里氏替换原则对继承机制定义的规范:
①、子类必须完全实现父类的方法(在类定义时无论是属性还是方法参数尽量使用父类或接口类型,在使用类创建的对象时传入对应的实现类对象或者子类对象。如果子类不能完整的实现父类的方法,或者父类的某些方法在子类中已经发生“畸变”,则建议断开父子继承关系,转而采用依赖、聚集、组合等关系代替继承)。
·
②、子类可以自由扩展(拥有自己的个性,也即有自己的属性和方法),子类对象可以代替父类,但是父类对象不能代替子类对象。
③、子类覆盖或者实现父类的方法时输入参数可以被放大(子类中的方法输入参数可以和父类方法的输入参数同类型,或者是父类方法输入参数的父类型。保证如果子类与父类方法构成重载时传入子类对象调用的方法仍是父类的方法,如果子类重写了父类的方法,则传入子类对象调用的方法是子类的方法)。
④、覆写或实现父类的方法时输出结果(返回值)可以被缩小(子类覆写或实现的方法的返回值必须与父类对应方法的返回值同类型或者是父类对应方法的返回值类型的子类)。
==========================================================================================================
分享到:
相关推荐
http://blog.csdn.net/xingjiarong/article/details/50081857
里氏替换原则有如下特点: 代码共享,减少创建类的工作量 提高代码的重用性 提高代码的可扩展性 提高产品代码的开放性 继承侵入性 只要继承,必须拥有父类的内容 降低代码的灵活性,子类必须拥有...
设计模式6大原则:里氏置换原则
里氏替换原则的定义有: 如果对每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有的对象o1都替换成o2时,程序P的行为没有变化,那么类型T2是类型T1的子类型。 定义很完备,但也不太好...
面向对象设计原则:面向对象设计原则、开闭原则、里氏替换原则、里氏替换原则、里氏替换原则
详细介绍了设计模式六大原则,配有示例代码和图片,有开闭原则,单一职责原则,里氏替换原则,依赖倒置原则,接口隔离原则,迪米特法则等等。
里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能...
主要介绍了Java的设计模式中里氏替换原则的意义,文中举例来说明里氏替换原则中强调的继承特性方面可能带来的问题,需要的朋友可以参考下
5.3.3 里氏替换原则 5.4 小结 第6章 服务层 6.1 服务层介绍 6.1.1 SOA 6.1.2 SOA的4项信条 6.1.3 Facade设计模式 6.2 应用Messaging模式 6.2.1 Document Message和 Request-Response模式 6.2.2 ...
主要介绍了PHP面向对象五大原则之里氏替换原则(LSP),较为详细的分析了里氏替换原则(LSP)的概念、原理并结合实例形式分析了php里氏替换原则(LSP)的简单使用方法,需要的朋友可以参考下
php 设计模式六大原则 单一职责原则 里氏替换原则 依赖倒置原则 接口隔离原则 迪米特法则 开闭原则 word版
设计模式原则:单一职责原则,里氏替换,依赖倒转,接口隔离,开放关闭等等。
设计模式六大原则(1):...设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒置原则 设计模式六大原则(4):接口隔离原则 设计模式六大原则(5):迪米特法则 设计模式六大原则(6):开闭原则
设计模式六大原则(1):...设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒置原则 设计模式六大原则(4):接口隔离原则 设计模式六大原则(5):迪米特法则 设计模式六大原则(6):开闭原则
详细介绍设计模式的六大原则,有不足之处希望大家多指教。参考《设计模式之禅》
1) 内容包括: 设计模式七大原则(单一职责、接口隔离、依赖倒转、里氏替换、开闭原则、迪米特法则、合成复用)、UML类图(类的依赖、泛化和实现、类的关联、聚合和组合) 23种设计模式包括:创建型模式:单例模式(8种...
策略模式[STRATEGY PATTERN] 代理模式[PROXY PATTERN] 单例模式[SINGLETON PATTERN] 多例模式[MULTITION PATTERN] ...六大设计原则:单一职责原则,里氏替换原则,依赖倒置原则,接口隔离原则,迪米特法则,开闭原则。
例如:随着计算机的不断发展,程序学习这门技术也越来越重要,很多人都开启了...面向对象设计原则一共有七个:开闭原则、里氏替换原则、依赖倒转原则、单一职责原则、接口隔离原则、组合/聚合复用原则、迪米特法则。
里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能...