事前条件、事後条件、クラス不変条件について

ざっくりまとめます。
■事前条件
メソッドパラメーターが想定している範囲内かのチェック。
assertを仕込む場所は、メソッドの先頭。
■事後条件
メソッドの戻り値が想定している範囲内かのチェック
assertを仕込む場所はreturn文の直前。
■クラス不変条件
オブジェクトの内部状態が適切に保たれているかのチェック。
クラス不変条件のアサーションは,メソッド呼び出しの最初の段階でそのオブジェクトの内部状態が壊れずに正しいものになっていること、およびメソッド実行の最後の段階でもオブジェクトの内部状態が壊れずに正しく保たれていることの両方を検証する。
具体例としては、「呼び出されるメソッドが必要とする属性を、事前に想定した値にコンストラクタで初期化しているかのチェック」などがある。
クラスがフィールドとしてstatusみたいなのを持っていて、
メソッド呼び出し時にそのstatusが想定の範囲内かチェックする、みたいにイメージするといいかも。
assertを仕込む場所はメソッドの先頭および最後。(片方だけでもいいかもしれないけど、両方チェックしておくべきだと思う)
事前条件、事後条件がパラメーターと戻り値に対するチェックであるのに対し、クラス不変条件はクラスのフィールドに対するチェックと考えるとわかりやすい。
※参考っぽいサイト
https://www.ipa.go.jp/security/awareness/vendor/programmingv1/a03_05.html ←こっちの方がわかりやすい。
http://download.oracle.com/docs/cd/E19683-01/816-3973/assert-13/index.html

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です