リスコフの置換原則

リスコフの置換原則（りすこふのちかんげんそく、）は、オブジェクト指向プログラミングにおいて、サブタイプのオブジェクトはスーパータイプのオブジェクトの仕様に従わなければならない、という原則である。リスコフの置換原則を満たすサブタイプを  と呼ぶ。

リスコフの置換原則の概念は最初、1987年10月のOOPSLAでのバーバラ・リスコフの基調講演 にて、インフォーマルな形で紹介された。より形式的な定義は1994年のリスコフとの共著論文 “” で与えられた。

定義 

リスコフの置換原則は  において以下のように説明されている：

より形式的な定義は  で与えられており、以下のように要約されている：

ここで性質  はオブジェクトの振る舞いを表す述語である。「振る舞い」はオブジェクトの操作（メソッド）が満たすべき事前条件と事後条件によって特徴付けられる。

振る舞いサブタイピング 
リスコフの置換原則では、ホーア論理に準拠して、振る舞いの事前条件と事後条件に焦点を当てたオブジェクトの代入可能性が要点にされている。その目的は、基底型の変数に派生型の値を代入しても支障をきたさないこと、基底型オブジェクトを派生型オブジェクトで型安全に代替できることである。

リスコフの置換原則は、基底型からの派生型の定義に際して、以下の項目の順守を提唱している。
 事前条件（preconditions）を、派生型で強めることはできない。派生型では同じか弱められる。
 事後条件（postconditions）を、派生型で弱めることはできない。派生型では同じか強められる。
 不変条件（invaritants）は、派生型でも保護されねばならない。派生型でそのまま維持される。
 基底型の例外（exception）から派生した例外を除いては、派生型で独自の例外を投げてはならない。

条件を強めるとはプロセス上の状態の取り得る範囲を狭くすることであり、条件を弱めるとはプロセス上の状態の取り得る範囲を広くすることである。これは実装視点では様々なアサーションの複合になる。例えば型の汎化/特化、数値の範囲、データ構造の内容範囲、コードディスパッチ先の選択範囲といった様々な事柄を含む。

脚注

出典

参考文献

関連項目 
 継承
 サブタイピング
 ポリモーフィズム
 契約による設計
 共変性と反変性

オブジェクト指向
型理論
プログラミング言語理論
プログラミング原則
エポニム