衍生物的先决条件/后置条件规则

时间:2017-11-24 21:12:05

标签: oop solid-principles design-principles liskov-substitution-principle

他的paper关于LSP,鲍勃叔叔提到:

Now the rule for the preconditions and postconditions for derivatives, as stated by Meyer, is:
...when redefining a routine [in a derivative], you may only replace its
precondition by a weaker one, and its postcondition by a stronger one.

如何判断子类型实例对象方法的前置条件/​​后置条件是否分别比超类型方法更弱/更强?

1 个答案:

答案 0 :(得分:2)

在没有严格定义的情况下制定它:

如果您的父类需要某些东西,那么孩子必须提供相同的功能 - 至少。 如果您的例程承诺处理大于零的所有输入,则派生例程还必须接受所有这些或更多输入。 这意味着前提条件只能更弱。

同样,后置条件必须更强。这意味着如果原始例程承诺它将始终返回正数,则不允许在派生例程中返回负数。

如果您要求的费用超过父母要求的费用(例如,如果您有更强的先决条件),那么您无法确定是否可以随时调用该例行程序。让我们说B和C是A的子类。有时,你可能有一个A类型的对象,它实际上也可能是B或C.如果C有比A更强的先决条件,你可能遇到问题在该对象上调用例程时。

对不起,如果我没有使用通常的术语,我真的不记得那样,所以我只是试着坚持对我有意义的事情。 (自从我上次参加Bertrand Meyer的演讲以来已经两年了)