按合同和类不变量设计

时间:2009-12-09 15:04:20

标签: java design-by-contract

我正在读关于dbc(http://en.wikipedia.org/wiki/Design_by_contract) 有人可以给我一个使用与继承相关的类不变量的简单例子吗?

3 个答案:

答案 0 :(得分:3)

按照合同概念设计,当它们适应面向对象的语言时,会略微复杂化。

类不变量是一个属性,在调用方法时(例如所有方法的常见前提条件),每个类的实例都保证具有该属性,并且作为回报,每个方法和构造函数必须确保在它们保持为真时终止(就像一个普通的后置条件)。

它们有助于表达一致性条件。模拟实际钱包的Wallet类可能具有类不变量,包含的数量始终为正。

继承了类不变量,就像合同的其余部分一样。方法的新实现必须提供与它们替换的方法相同的保证。

答案 1 :(得分:2)

在继承的类中,不变量应该至少同样严格,但可以更严格。如果在派生类中省略了不变量,则基类的不变量当然适用。

例如:

// Class invariant : sum should be > -1000
Account { public int sum; }

// Class invariant : sum should be >= 0
AccountForKids : inheritsFrom Account { public int sum; }

孩子的帐户不应低于零,但当然大于-1000。

一般情况:当类不变量变得更加严格时,派生类的契约总是会被忽略。

答案 2 :(得分:1)

派生类不变量应该:

  • 检查dervied类中引入的任何成员变量的不变量
  • 检查基类的不变量