リスコフの置換原則
リスコフの置換原則では、ホーア論理に準拠して、振る舞いの事前条件と事後条件に焦点を当てたオブジェクトの代入可能性が要点にされている。その目的は、基底型の変数に派生型の値を代入しても支障をきたさないこと、基底型オブジェクトを派生型オブジェクトで型安全に代替できることである。
リスコフの置換原則は、基底型からの派生型の定義に際して、以下の項目の順守を提唱している。
事前条件(preconditions)を、派生型で強めることはできない。派生型では同じか弱められる。
事後条件(postconditions)を、派生型で弱めることはできない。派生型では同じか強められる。
不変条件(invaritants)は、派生型でも保護されねばならない。派生型でそのまま維持される。
基底型の例外(exception)から派生した例外を除いては、派生型で独自の例外を投げてはならない。
条件を強めるとはプロセス上の状態の取り得る範囲を狭くすることであり、条件を弱めるとはプロセス上の状態の取り得る範囲を広くすることである。これは実装視点では様々なアサーションの複合になる。例えば型の汎化/特化、数値の範囲、データ構造の内容範囲、コードディスパッチ先の選択範囲といった様々な事柄を含む。
注意点として、リスコフの置換原則や振る舞いサブタイピングは、通常の言語の型システムによってチェックできることではない。プログラムが型チェックに通ったからと言って「リスコフの置換原則を満たす」と言えるわけではない。