六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 41|回复: 0

Liskov替换原则(LSP)

[复制链接]

升级  44%

6

主题

6

主题

6

主题

童生

Rank: 1

积分
22
 楼主| 发表于 2013-1-27 05:36:00 | 显示全部楼层 |阅读模式
注:摘自《敏捷软件开发:原则、模式与实践》(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”的含意过于宽泛以至于不能作为子类型的定义。子类型的正确定义是“可替换性”的,这里的可替换性可以通过显式或者隐式的契约来定义。
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表