dbc(http://en.wikipedia.org/wiki/Design_by_contract)について読んでいます。継承に関連してクラス不変条件を使用する簡単な例を教えてください。
3 に答える
コントラクトによる設計の概念は、オブジェクト指向言語に適用されると少し複雑になります。
クラス不変条件は、メソッドが呼び出されたときにクラスの各インスタンスが持つことが保証されているプロパティであり (すべてのメソッドに共通の前提条件のように)、その見返りとして、各メソッドとコンストラクターは、終了時に true のままであることを保証する必要があります (一般的な事後条件)。
一貫性の条件を表現するのに適しています。Wallet
実際のウォレットをモデル化するクラスには、含まれる金額が常に正であるというクラス不変条件がある場合があります。
クラスの不変条件は、契約の残りの部分と同様に継承されます。メソッドの新しい実装は、置き換えるメソッドと同じ保証を提供する必要があります。
継承されたクラスでは、不変条件は少なくとも同等に strict である必要がありますが、より厳密にすることもできます。派生クラスで不変条件が省略された場合は、もちろん基本クラスの不変条件が適用されます。
例:
// Class invariant : sum should be > -1000
Account { public int sum; }
// Class invariant : sum should be >= 0
AccountForKids : inheritsFrom Account { public int sum; }
子供のアカウントはゼロ未満になるべきではありませんが、もちろん -1000 よりも大きくなります。
一般 : クラスの不変条件がより厳密になると、派生クラスのコントラクトは常に保護されます。
派生クラスの不変条件は次のことを行う必要があります。
- 派生クラスで導入されたメンバー変数の不変条件を確認します
- 基本クラスの不変条件を確認する