検証の流れに戻って今回から契約プログラミングです。引き続き理解が怪しい箇所がありましたらご指摘ください。「契約による設計」ではなく契約プログラミングです。Softwareの商標です。「契約プログラミング」は商標を回避するためD言語等で使用されています。)......というのはさておき。Meyer先生の「オブジェクト指向入門」やEiffelのドキュメントにも書いてますように事前条件/事後条件というのは直前の事後条件が直後の事前条件を満たすように組み立てる必要があります。契約の検証は、各変数について直前の事後条件や不変条件、if文等で満たされた条件が直後の事前条件を内含(implies)しているかどうかをチェックするということです。そのため言語や処理系等の事情によってはEiffelにない要素も必要になります。アスペクトも元はSPARKが導入したものです。他のAda特有の事情としてデフォルト初期化があります。等と決まっていますしそれで足りなければ生成プロシージャ(所謂コンストラクタ)を呼ぶ必要がありますので生成プロシージャの事後条件でインスタンスの状態を表明できます。Adaではデフォルト初期化をカスタマイズできますし抽象型にすれば内容を隠すこともできます。Pkg1;このようにパッケージの公開部だけでは何が起きるのか全くわかりません。2つの状態を取る単純なON/OFFスイッチを考えましても抽象型にしてしまいますとデフォルト初期化がどちらになるかわかりませんので検証できなくなります。Main;デフォルト初期化にも事後条件が必要です。アスペクトでデフォルト初期化の事後条件を書けるようになりました。呼んでいるのは妥当と判断できます。これもSPARKからの逆輸入となります。念の為に繰り返しますがAdaの事前条件/事後条件は実行時のチェックです。機能程度の意味しかありません。静的にチェックしたいのであればSPARKを使う必要があります。