《数据结构与抽象:Java语言描述(原书第4版)》一P.2.2 前置条件和后置条件
本节书摘来华章计算机《数据结构与抽象:Java语言描述(原书第4版)》一书中的第1章 ,第1节,[美]弗兰克M.卡拉诺(Frank M. Carrano) 蒂莫西M.亨利(Timothy M. Henry) 着 罗得岛大学 新英格兰理工学院 辛运帏 饶一梅 译 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
P.2.2 前置条件和后置条件
前置条件(precondition)是一条条件语句,它在方法执行前必须为真。除非前置条件满足,否则不应该使用方法,也不能期待方法能正确执行。前置条件可以与方法参数的描述相关。例如,计算x平方根的方法可以用x≥0作为前置条件。
后置条件(postcondition)是一条语句,当前置条件满足且完全执行方法后,它为真。对于一个值方法,后置条件将描述方法返回的值。对于一个void方法,后置条件描述所做的动作及对调用对象的任何修改。一般地,后置条件描述方法调用产生的所有影响。
考虑后置条件有助于弄清楚方法的目的。注意,从前置条件到后置条件没有提到如何做,即我们将方法的规格说明与它的实现分离。
程序设计技巧:不能满足后置条件的方法,即使符合前置条件,也可以抛出异常。(关于异常的讨论见Java插曲2和4。)
职责。前置条件意味着保证必须满足特定条件的职责。如果在调用方法前由客户负责满足条件,则方法不必检查条件。或者,如果方法负责让条件成立,则客户不必检查它们。用语句明确谁必须检查给定的条件,这样既提高了检查的概率,又避免了重复劳动。
例如,要说明前面提到的求平方根方法,可以在方法头前面写如下的注释:
在这个例子中,方法假定客户要提供一个非负数作为参数。
更安全的技术是让方法承担检查参数的职责。在此例中,它的注释应该如下:
虽然在前面的注释中我们将前置条件和后置条件集成在一起,但也可以将它们分开。
程序设计技巧:在方法头之前的注释中充分说明每个公有方法。对于确保方法能正确执行而必须满足的条件,要说明是由方法还是由客户来负责进行检查。以这种方式,既做了检查又不会重复检查。但在调试过程中,方法应该检查前置条件是否满足。
当使用继承和多态来重写父类中的方法时,子类中的方法可能会出现与父类中的方法不一致的问题。前置条件和后置条件可以帮助程序员避免这个问题。后置条件必须适用于子类中方法的所有版本。重写的方法可以添加到后置条件中(即它能做得更多),但不能做得更少。不过重写的方法不能增加其前置条件。换句话说,它不能比基类中的方法要求得更多。
自测题3 假定类Square有一个数据域side及设置side值的方法setSide。这个方法的方法头和注释是什么?写这个时要牢记前置条件和后置条件。
最后更新:2017-06-26 14:02:15