リスコフの置換原則(りすこふのちかんげんそく、英: Liskov substitution principle)は、型システムなどにおける型の派生に関する議論において、派生元の型(基底型)と派生先の型(派生型)の間に成り立っていなければならない規則性で、1993年、バーバラ・リスコフと ジャネット・ウィング
(英語版) が論文 Family Values: A Behavioral Notion of Subtyping で示した[1]。次のように簡潔に定式化される[2]: T {\displaystyle T} 型のオブジェクト x {\displaystyle x} に関して真となる属性を q ( x ) {\displaystyle q(x)} とする。このとき S {\displaystyle S} が T {\displaystyle T} の派生型であれば、 S {\displaystyle S} 型のオブジェクト y {\displaystyle y} について q ( y ) {\displaystyle q(y)} が真となる。
すなわち、置換可能性 (substitutability ) ということである。S が T の派生型であれば、プログラム内で T 型のオブジェクトが使われている箇所は全て S 型のオブジェクトで置換可能であれ、ということで、この原則が損なわれなければ、プログラムの型システムに照らした妥当性は損なわれない、ということである。
オブジェクト指向プログラミングでは、サブクラスとスーパークラス(基底クラスと派生クラス)の間の関係ということになる。 リスコフの置換原則は契約プログラミングの方法論と密接に関連しており、契約と継承の相互作用に次のような制約をもたらす: さらに、この原則によれば、派生型のメソッドが発生する例外は、上位の型のメソッドが発生する例外の派生型か、上位のメソッドの例外と同じものでなければならない。共変性と反変性も参照。 この原則に違反しているクラス階層では、基底クラスへの参照を使い、派生クラスに関する知識を持たなければならなくなる。このようなコードは開放/閉鎖原則にも違反し、新たな派生クラスを追加するたびに全体のコードを修正しなければならなくなる。
契約プログラミング
事前条件を派生型で強めることはできない。つまり、上位の型よりも強い事前条件を持つ派生型を作ることはできない。
事後条件を派生型で弱めることはできない。つまり、上位の型よりも弱い事後条件を持つ派生型を作ることはできない。
引用^ Liskov, and Wing (1993).
^ Liskov, and Wing (1999).
参考文献
Liskov, Barbara; Wing, Jeannette (1993年7月16日). “ ⇒Family Values: A Behavioral Notion of Subtyping”. 2006年10月5日閲覧。
Liskov, Barbara; Wing, Jeannette (1999年7月). “ ⇒Behavioral Subtyping Using Invariants and Constraints (PS)”. 2006年10月5日閲覧。
表
話
編
歴
SOLID (オブジェクト指向設計)
単一責任の原則(英語版) (SRP)
開放/閉鎖原則 (OCP)
リスコフの置換原則 (LSP)
依存性逆転の原則 (DIP)
インタフェース分離の原則(英語版) (ISP)
アジャイルソフトウェア開発 | デザインパターン
更新日時:2018年10月3日(水)03:19
取得日時:2019/06/12 09:11