`
zaife
  • 浏览: 40254 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Liskov替换原则(LSP)

阅读更多
注:摘自《敏捷软件开发:原则、模式与实践》(Robert C. Martin)
对于LSP可以做如下解释:
  子类型(subtype)必须能够替换掉它们的基类型(base type)

Barbara Liskov首次写下这个原则是在1988年。她说到,
  这里需要如下替换性质: 若对每个类型S的对象o1,都存在一个类型T的对象o2,使得在所有针对T编写的程序P中,用o1替换o2后,程序P行为功能不变,则S是T的子类型。

  OOD中IS-A关系是就行为方式而言的,行为方式是可以进行合理假设的,是客户程序所依赖的。

   基于契约设计(Design By Contract DBC),类的编写者显式的规定针对类的契约。客户代码的编写者通过该契约获悉可以依赖的。契约是通过为每个方法声明的前置条件(preconditions)和后置条件(postconditions)来指定的。要使一个方法得以执行,前置条件必须为真。执行完毕后,该方法要保证后置条件为真。

  OCP是OOD中很多说法的核心。如果这个原则应用得有效,应用程学就会具有更多的可维护、可重用性以及健壮性。LSP是使OCP成为可能的主要原则之一。正是子类型的可替换性才使得使用基类型的模块在无需修改的情况下就可以扩展。这种可替换性必需是开发人员可以隐式依赖的东西。因此,如果没有显式的强制基类类型的契约,那么代码就必须良好的并且明显的表达出这一点。

   术语“IS-A”的含意过于宽泛以至于不能作为子类型的定义。子类型的正确定义是“可替换性”的,这里的可替换性可以通过显式或者隐式的契约来定义。
分享到:
评论

相关推荐

    面向对象设计原则(SRP,OCP,LSP,DIP,ISP)

    面向对象 设计原则 单一职责原则--SRP 开放封闭原则--OCP Liskov替换原则--LSP 依赖倒置原则--DIP 接口隔离原则--ISP

    深入理解JavaScript系列(8) S.O.L.I.D五大原则之里氏替换原则LSP

    前言 本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第3篇,里氏替换原则LSP(The Liskov Substitution Principle )。 英文原文:...

    OO设计根本的指导原则

    单一职责原则——SRP 开放封闭原则——OCP Liskov替换原则 —— LSP 依赖倒置原则—— DIP 接口隔离原则—— ISP

    面向对象设计原则 面向对象设计原则

    面向对象设计原则 单一职责原则--SRP 开放封闭原则--OCP Liskov替换原则--LSP ===

    面向对象设计原则(整理)

    单一职责原则(SRP)、开放-封闭原则(OCP)、Liskov替换原则(LSP)、依赖倒置原则(DIP)、接口分离原则(ISP)

    敏捷软件开发:原则、模式与实践.pdf

    第十章 Liskov替换原则(LSP) 10.1 Liskov替换原则(LSP) 10.2 一个违反LSP的简单例子 10.3 正方形和矩形,更微妙的违规 10.4 一个实际的例子 10.5 用提取公共部分的方法代替继承 10.6 启发式规则和习惯用法 10.7 ...

    敏捷软件开发:原则、模式与实践

    第十章 Liskov替换原则(LSP) 10.1 Liskov替换原则(LSP) 10.2 一个违反LSP的简单例子 10.3 正方形和矩形,更微妙的违规 10.4 一个实际的例子 10.5 用提取公共部分的方法代替继承 10.6 启发式规则和习惯用法 10.7 ...

    面向对象设计三要素五原则六视点

    面向对象三要素 封装(Encapsulation) 继承(Inheritance) 多态(Polymorphism) ... Liskov替换原则(LSP) 依赖倒置原则(DIP) 接口隔离原则(ISP) 变化(Change) 简约(Simplicity) 一致(Coherance)

    敏捷软件开发:原则、模式与实践.pdf 高清

    第十章 Liskov替换原则(LSP) 10.1 Liskov替换原则(LSP) 10.2 一个违反LSP的简单例子 10.3 正方形和矩形,更微妙的违规 10.4 一个实际的例子 10.5 用提取公共部分的方法代替继承 10.6 启发式规则和习惯用法 10.7 ...

    非常好的C++设计模式项目资源,分享出来.zip

    C++设计模式 什么是设计模式 “每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的...Liskov 替换原则(LSP) 子类必须能够替换它们的基类(IS-A)。 继承表达类型抽象。 接口隔离原则(ISP)

    Java_面向对象设计原则总结

    2 里氏替换原则-Liskov Substitution Principle (LSP) 3 接口分隔原则-Interface Segregation Principle (ISP) 4 单一职责原则-Single Responsibility Principle (SRP) 5 开闭原则-The Open-Closed ...

    敏捷软件开发

    LSP Liskov 替换原则 子类型必须能够替换掉它们的基类型。 DIP 依赖倒置原则 抽象不应该依赖于细节。细节应该依赖于抽象。 ISP 接口隔离原则 不应该强迫客户依赖于它们不用的方法。接口属于客户,不属于它 所在的类...

    JAVA六大原则代码.zip

    里氏替换原则(Liskov Substitution Principle,LSP):子类应该能够替换掉父类并且工作正常,即子类必须能够完全替代父类的功能而不产生错误。这个原则保证了代码的可靠性和稳定性。 接口隔离原则(Interface ...

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

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

    设计模式总结

    里氏替换原则(Liskov Substitution Principle,LSP) 只要父类出现的地方都可以用子类替换。 依赖倒置原则(Dependece Inversion Principle,DIP) 面向接口编程。细节应该依赖抽象。 依赖可以传递。 依赖有三...

    敏捷软件开发.pdf

    第10章 Liskov替换原则(LSP) 10.1 Liskov替换原则(LSP) 10.2 一个违反LSP的简单例子 10.3 正方形和矩形,更微妙的违规 10.4 一个实际的例子 10.5 用提取公共部分的方法代替继承 10.6 启发式规则和习惯用法...

    深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP

    用来更好地进行面向对象编程,五大原则分别是: The Single Responsibility Principle(单一职责SRP) The Open/Closed Principle(开闭原则OCP) The Liskov Substitution Principle(里氏替换原则LSP) ...

Global site tag (gtag.js) - Google Analytics