リスコフの置換原則

出典: フリー百科事典『ウィキペディア(Wikipedia)』
ナビゲーションに移動 検索に移動

リスコフの置換原則(りすこふのちかんげんそく、: Liskov substitution principle)は、オブジェクト指向プログラミングで重視されているガイドラインである。

ここでSをTの派生型(subtype)としたならば、T型付けオブジェクトを扱っている箇所は、S型付けオブジェクトによって、その特性(property)のまま一切の修正を必要とせずに置換できるようにし、かつそのプログラムの正当性とパフォーマンスに影響を及ぼさないことを設計の理想としている。

型はクラスと同義であり、TとSの関係はスーパークラスサブクラス(基底クラスと派生クラス)と同義になる。TへのSの適合は置換可能性(substitutability)と呼ばれている。

1994年に、バーバラ・リスコフジャネット・ウィング英語版が発表した論文 Family Values: A Behavioral Notion of Subtyping において[1]、この原則は次のように簡潔に公式化されている[2]

の派生型ならば、関数 型のオブジェクト の特性を真と立証すると、関数 型のオブジェクト の特性を真とせねばならない。
Let be a property provable about objects of type T. Then should be true for objects of type S where S is a subtype of T.

同論文では、ホーア論理を拡張した振る舞いサブタイピング英語版の詳細についても述べられている。そこでは契約による設計が指標にされている。

契約による設計と振る舞いサブタイピング[編集]

リスコフの置換原則では、契約による設計を指針にした振る舞いサブタイピングの置換可能性が要点にされている。これは相互作用におけるオブジェクトの、振る舞いサブタイピング上の置換可能性を扱っている。共変性と反変性はその置換可能性をしなやかにするために導入されている。

共変性と反変性は圏論由来の概念であり、契約による設計では、クラス対象=事前条件・事後条件、メソッド関手継承、になる。

  • 事前条件を派生型で強めることはできない。即ち派生型では弱められるので、事前条件は反変性になる。
  • 事後条件を派生型で弱めることはできない。即ち派生型では強められるので、事後条件は共変性になる。
  • 不変条件は、派生型でも保護されねばならない。即ち派生型でも変わらないので、不変条件は不変性になる。
  • スーパークラスの例外から派生した例外を除いては、サブクラスで新しい例外を投げてはならない。

この原則に違反しているクラス階層では、基底クラスへの参照を用いて派生クラスのオブジェクトを用いる際は、派生クラスの知識および専用の操作が必要になってしまい汎用性が失われる。このようなプログラムは開放/閉鎖原則にも違反することになり、新たな派生クラスを追加するたびにプログラムの修正が必要になる。

脚注[編集]

[脚注の使い方]

参考文献[編集]