我正在读关于dbc(http://en.wikipedia.org/wiki/Design_by_contract) 有人可以给我一个使用与继承相关的类不变量的简单例子吗?
答案 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)
派生类不变量应该: