契約による設計(Design By Contract)
クラスやメソッドの事前条件、事後条件、不変条件を明確に表明する設計手法を、契約による設計(Design By Contract)という。
■事前条件
[内容]
実行前に満たすべき条件。例えば、引数には0以上の整数、NULL以外のポインタ、パラメータクラスは初期化していること、などが該当する。
[責務]
チェックするのは、呼び出し側が行う
■事後条件
[内容]
結果についての決まり。例えば、検索条件に合う住所や施設名称を返す、複素数の演算結果を返す、など操作に実行後に保証することが該当する
[責務]
呼び出された側が守る
■不変条件
[内容]
クラス事態に関する表明。これがでてくるのは継承が入ってきたとき。
サブクラスはスーパークラスと同じように扱えることが望まれる(リスコフの置換原則)から、サブクラスには、スーパークラスの事前条件、事後条件が不変還俗としてついてしまう。
[責務]
呼び出られた側が守る
※
メモしていて思ったんですが、継承関係に負の可変性がついた場合は不変条件はダメになる?