Liskov替换原则(LSP)

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

上面的就是Liskov替换原则,换句话说,就是子类型(sub type)必须能够替换掉它们的基类型(base type).

对于LSP的违反也潜在的违反了OCP.如果新派生类的创建会导致我们改变基类,这就常常意味着设计是有缺陷的,当然也违反了OCP.

LSP得出的重要结论: 一个模型,如果孤立的看,并不具有真正意义上的有效性.模型的有效性只能通过它的客户程序来表现.

IS-A: 我们经常说IS-A,满足这个关系的就说是继承. 的确,如果一个新类型的对象被认为和一个已有类的对象之间满足IS-A关系,那么这个新对象的类应该从这个已有对象的类派生.

这里需要注意一点: IS-A是关于行为的.从行为方式的角度来看,对象的行为方式菜市软件真正所关注的问题. LSP清楚的指出, OOD中IS-A关系是就行为方式而言的,行为方式是可以进行合理假设的,是客户程序所依赖的.

在这里提出基于契约设计(Design By Contract, DBC)

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

派生类的前置条件和后置条件规则: 在重新声明派生类中的例程(routine)时, 只能使用相等或者更弱的前置条件来替换原始的前置条件,只能使用相等或者更强的后置条件来替换原始的后置条件.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值