`
hkme
  • 浏览: 140722 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

三 :LSP(里氏代换原则)

阅读更多

Liskov Substitution Principle , LSP

*******************************************************************************************

表述:

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

2.         换言之,一个软件实体如果使用的是一个基类的话,那么一定适用于其子类,而且它根本不能察觉出基类对象和子类对象的区别。只有衍生类替换基类的同时软件实体的功能没有发生变化,基类才能真正被复用。

3.         里氏代换原则由Barbar Liskov(芭芭拉.里氏)提出,是继承复用的基石。

4.         一个继承是否符合里氏代换原则,可以判断该继承是否合理(是否隐藏有缺陷)。

 

理解:

(1)   应当尽量从抽象类继承,而不从具体类继承。

一般而言,如果有两个具体类AB有继承关系,那么一个最简单的修改方案是建立一个抽象类C,然后让类AB成为抽象类C的子类。即如果有一个由继承关系形成的等级结构的话,那么在等级结构的树形图上面所有的树叶节点都应当是具体类,而所有的树枝节点都应当是抽象类或者接口。

 

 

 

总结:

1.     为了保持LSP,所有子类必须符合使用基类的client所期望的行为。

2.     一个子类型不得具有比基类型(base type)更多的限制,可能这对于基类型来说是合法的,但是可能会因为违背子类型的其中一个额外限制,从而违背了LSP

3.     LSP保证一个子类总是能够被用在其基类可以出现的地方!

 

 

备注 :

   

LSP讲的是基类和子类的关系。只有当这种关系存在时,里氏代换关系才存在。如果两个具体的类AB之间的关系违反了LSP的设计,(假设是从BA的继承关系)那么根据具体的情况可以在下面的两种重构方案中选择一种。 创建一个新的抽象类C,作为两个具体类的超类,将AB的共同行为移动到C中来解决问题。 BA的继承关系改为委派关系。

    在进行设计的时候,我们尽量从抽象类继承,而不是从具体类继承。如果从继承等级树来看,所有叶子节点应当是具体类,而所有的树枝节点应当是抽象类或者接口。当然这个只是一个一般性的指导原则,使用的时候还要具体情况具体分析。

 

 

 

举例:

Composite模式,Proxy模式,Strategy模式

 

分享到:
评论

相关推荐

    里氏代换原则案例程序LSP.zip

    里氏代换原则(Liskov Substitution Principle,简称LSP)是面向对象设计的基本原则之一,由芭芭拉·里科夫(Barbara Liskov)在1988年提出。该原则规定,子类必须能够替换它们的基类,并且在软件系统中不会产生任何...

    第二十八讲:基础三里氏代换原则

    在面向对象设计中,三里氏代换原则(Liskov Substitution Principle,简称LSP)是一个核心的设计原则,它由芭芭拉·里科夫(Barbara Liskov)在1988年提出。这个原则是类型继承关系中的一个重要准则,旨在确保软件...

    java的里氏代换原则

    简单来说,里氏代换原则(LSP,Liskov Substitution Principle)指的是在软件工程中,任何引用基类的地方都能被其子类替代,而不会改变程序原有的行为。这意味着子类应该能够完全无缝地替换掉基类,使得系统在使用...

    里氏替换原则Demo

    里氏替换原则(Liskov Substitution Principle,简称LSP)是面向对象设计的基本原则之一,它是由美国计算机科学家芭芭拉·里科夫(Barbara Liskov)提出的。这个原则强调的是在软件工程中,子类型必须能够替换它们的...

    13丨软件设计的里氏替换原则:正方形可以继承长方形吗?.pdf

    里氏替换原则(Liskov Substitution Principle,简称LSP)是面向对象设计的基本原则之一,由Barbara Liskov在1988年提出。该原则指出,子类型必须能够替换它们的基类型而不影响程序的正确性。这意味着在软件系统中,...

    里氏代换原则_动力节点Java学院整理

    里氏代换原则是面向对象设计的基本原则之一,它的核心思想是确保软件系统的各个组件能够灵活替换而不影响整体系统的稳定性。这一原则由Barbara Liskov在1988年提出,因此也被称为Liskov替换原则(LSP)。在Java和...

    24种设计模式介绍与6大设计原则

    里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能...

    Java23种基本的设计模式整料整理学习源码示例zip

    里氏代换原则(Liskov Substitution Principle) 里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的...

    课堂练习04301

    3. **里氏代换原则 (LSP)**:根据里氏代换原则,如果软件系统中一个对象可以被其基类对象替换而不影响系统的行为,那么这个系统就遵循了LSP。这保证了子类可以无损地替换其基类,增强了软件的可扩展性和兼容性。 4....

    设计模式Demo

    里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能...

    软件设计的七大原则.doc

    二、 里氏代换原则(LSP) 里氏代换原则是指子类型必须能够替换它们的基类型。反过来的代换不成立。当两个具体类关系违反里氏代换原则时,一种办法是抽象出一个基类,作为这两个类的父类,一种是应用组合聚合关系...

    面向对象设计原则Java概要.ppt

    里氏代换原则  里氏代换原则定义 里氏代换原则(Liskov Substitution Principle, LSP)指出,子类必须能够替换它们的基类,而不影响程序的正确性。这意味着子类对象可以在任何基类对象被预期出现的地方进行替换,...

    六种设计原则

    本文将详细探讨六种核心的设计原则,它们分别是开闭原则(Open-Closed Principle, OCP)、里氏代换原则(Liskov Substitution Principle, LSP)、迪米特法则(Law of Demeter, LoD)、依赖倒转原则(Dependency ...

    软件设计的七大原则

    二、 里氏代换原则(LSP) 里氏代换原则是指子类型必须能够替换它们的基类型。反过来的代换不成立。当两个具体类关系违反里氏代换原则时,一种办法是抽象出一个基类,作为这两个类的父类,一种是应用组合聚合关系...

    设计模式详解

    #### 里氏代换原则 (Liskov Substitution Principle, LSP) **定义**: 里氏代换原则强调在任何可以使用基类的地方都应该可以透明地使用其子类的对象。这意味着子类应该能够完全替代其父类,并且不会引起错误或异常...

    程序设计的七大原则

    #### 二、里氏代换原则 (Liskov Substitution Principle, LSP) 里氏代换原则是由芭芭拉·里氏提出的,它是继承复用的基础。该原则指出,如果一个软件实体使用一个基类,那么它也应该能够使用该基类的任何子类,并且...

    LSP(圆&椭圆)1

    里氏代换原则(Liskov Substitution Principle,简称LSP)是面向对象设计的基本原则之一,由芭芭拉·利斯科夫在1988年提出。这个原则是继承概念的核心,它确保了软件系统的灵活性、可扩展性和可维护性。LSP指出,子...

    面向对象的设计的原则 电子版

    3. 里氏代换原则(LSP):所有引用基类(父类)的地方必须能透明地使用其子类的对象。里氏代换原则告诉我们,在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立,如果一个...

Global site tag (gtag.js) - Google Analytics