4

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

4

3 回答 3

5

当它们适应面向对象的语言时,契约式设计概念会变得稍微复杂一些。

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

它们很适合表达一致性条件。对实际钱包进行建模的Wallet类可能具有包含的金额始终为正的类不变量。

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

于 2009-12-09T15:20:09.867 回答
2

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

例如:

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

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

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

一般来说:当类不变量变得更严格时,派生类的契约总是被遵守的。

于 2009-12-09T15:37:43.407 回答
1

派生类不变量应该:

  • 检查派生类中引入的任何成员变量的不变量
  • 检查基类的不变量
于 2009-12-09T15:44:28.320 回答