敏捷软件开发(三)Liskov替换原则(LSP)

  定义:子类型必须能够替换掉它们的基类型

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

  在考虑一个特定的设计是否恰当时,不能完全孤立地来看这个解决方案。必须要根据该设计的使用者所做出的合理假设来审视它。

  对象的行为方式才是软件真正所关注的问题。LSP清楚地指出,OOD中IS-A关系是就行为方式而言的,行为方式是可以进行合理假设的,

是客户程序所依赖的。

  基于契约设计(DBC):类的编写者显式地规定针对该类的契约。客户代码的编写者可以通过该契约获悉可以依赖的行为方式。契约是通过为每个方法

声明的前置条件和后置条件来指定的。要使一个方法得以执行,前置条件必须要为真。执行完毕后,该方法要保证后置条件为真。

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

更强的后置条件来替换原始的后置条件。

  OCP是OOD中很多说法的核心。如果这个原则应用的有效,应用程序就会具有更多的可维护性、可重用性、以及健壮性。LSP是促使OCP成为可能的

主要原则之一。正是子类型的可替换性才使得使用基类类型的模块在无需修改的情况下就可以拓展。这种可替换性必须是开发人员可以隐式依赖的东西。因此

如果没有显式地强制基类类型的契约,那么代码就必须良好地并且明显地表达出这一点。

posted on 2017-02-23 13:03  知止而后有定  阅读(271)  评论(0)    收藏  举报

导航