译⾃
在这篇⽂章中,我们将讨论术语前置条件(Precondition)和后置条件(Postcondition)。
前⾔
“前置条件”和“后置条件”这两个词看起来很吓⼈,但理解起来并不复杂。
定义
⾸先,让我们以⼀种正式的⽅式来定义“前置条件”和“后置条件”这两个词。
前置条件
前置条件是在⽅法运⾏之前必须为真的条件(condition)或者说断⾔(predicate)。换句话说,该⽅法告诉使⽤者:“这是我对你的期望”。即正在调⽤的⽅法期望在调⽤该⽅法之前或调⽤该⽅法时满⾜⼀定的条件。除⾮满⾜前置条件,否则不能保证操作会按其应有的⽅式执⾏。
后置条件
后置条件是在⽅法运⾏之后能够被保证为真的条件或者说断⾔。换句话说,该⽅法告诉使⽤者:“这是我承诺为你做的”。如果操作正确且满⾜前置条件(可能有多个),则可以保证后置条件为真。
现实世界中的例⼦
让我们看看在现实世界中,什么是前置条件和后置条件。
吃掉披萨——前置条件:有⼀个披萨;后置条件:披萨没了。
从 ATM 的借记帐户中取款——前置条件(有多个):⾸先,提取的⾦额应⼩于等于该帐户中剩余的⾦额,其次,提取的⾦额应⼩于等于 ATM 中剩余的⾦额;后置条件:ATM 和帐户上的余额提醒应等于其原始⾦额减去提取⾦额。
马⾥奥击败鲍泽——前置条件:鲍泽出现;后置条件:马⾥奥救了⽪奇。
⼀个更具体的例⼦
现在来看⼀个更具体的例⼦。假设我们有⼀个⽤于计算平⽅根的函数,那么这⾥的前置条件即传给这个平⽅根函数的参数必须为⾮负数,后置条件即计算得到的结果的平⽅必定与传⼊的参数相等。可将其表⽰为:
def square_root(x):
assert x >= 0 // _前置条件_
计算过程...返回⼀个名为 Y 的值
assert y*y == x // _后置条件_
return y
编程实例
记住我假设我们有这样⼀个函数:
int getSum(int a, int b)
{
int sum = a + b;
return sum;
}
这个函数的功能是计算给定的两个整数的和并将和返回。对该函数来说,前置条件为给定的两个值都为整数,后置条件为这两个整数的和被返回。
不变式
我们有时会看到“不变式”⼀词,不变式(invariant)指总为真的条件或者说断⾔。即该⽅法告诉使⽤者:“如果它在调⽤我之前为真,那么我可以保证在我调⽤结束后它仍然为真”。不变式是前置条件和后置条件的组合。在调⽤⽅法之前和之后,它都必定为真。
总结
通过本⽂,我们了解了什么是“前置条件”和“后置条件”。我们看到前置条件即在调⽤⽅法之前必须为真的条件,⽽后置条件即在⽅法调⽤结束后必定为真的条件。
发布评论