リスコフの置換原則とは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > ウィキペディア小見出し辞書 > リスコフの置換原則の意味・解説 

リスコフの置換原則

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/01/01 19:54 UTC 版)

ナビゲーションに移動 検索に移動

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

リスコフの置換原則の概念は最初、1987年10月のOOPSLAでのバーバラ・リスコフの基調講演 “Data abstraction and hierarchy”[1]にて、インフォーマルな形で紹介された。 より形式的な定義は1994年のリスコフとウィング英語版の共著論文 “A Behavioral Notion of Subtyping[2] で与えられた。

定義

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

The intuitive idea of a subtype is one whose objects provide all the behavior of objects of another type (the supertype) plus something extra. What is wanted here is something like the following substitution property: If for each object o1 of type S there is an object o2 of type T such that for all programs P defined in terms of T, the behavior of P is unchanged when o1 is substituted for o2, then S is a subtype of T.
(直感的な考えでは、「サブタイプ」のオブジェクトは別の型(「スーパータイプ」)のオブジェクトのすべての振る舞いと、更に別の何かを備えたものである。 ここで必要とされるものは、以下に示す置換の性質のようなものだろう:型 S の各オブジェクト o1 に対し、型 T のオブジェクト o2 が存在し、T に関して定義されたすべてのプログラム Po1o2 で置き換えても動作を変えない場合、ST のサブタイプである。)
B. Liskov、Data Abstraction and Hierarchy、Liskov 1988, p. 25, 3.3. Type Hierarchy

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

Let φ(x) be a property provable about objects x of type T. Then φ(y) should be true for objects y of type S where S is a subtype of T.
φ(x) を型 T のオブジェクト x に関して証明可能な性質とする。このとき、φ(y) は型 T のサブタイプ S のオブジェクト y について真でなければならない。)
B. Liskov and J. Wing、A Behavioral Notion of Subtyping、Liskov & Wing 1994, p. 1812, 1. INTRODUCTION, Subtype Requirement

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

振る舞いサブタイピング

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

リスコフの置換原則は、基底型からの派生型の定義に際して、以下の項目の順守を提唱している。

  1. 事前条件(preconditions)を、派生型で強めることはできない。派生型では同じか弱められる。
  2. 事後条件(postconditions)を、派生型で弱めることはできない。派生型では同じか強められる。
  3. 不変条件(invaritants)は、派生型でも保護されねばならない。派生型でそのまま維持される。
  4. 基底型の例外(exception)から派生した例外を除いては、派生型で独自の例外を投げてはならない。

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

注意点として、リスコフの置換原則や振る舞いサブタイピングは、通常の言語の型システムによってチェックできることではない。プログラムが型チェックに通ったからと言って「リスコフの置換原則を満たす」と言えるわけではない。[独自研究?]

脚注

[脚注の使い方]

出典

参考文献

関連項目


リスコフの置換原則(Liskov substitution principle)

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/12/17 17:02 UTC 版)

SOLID」の記事における「リスコフの置換原則(Liskov substitution principle)」の解説

Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.(→ある基底クラスへのポインタないし参照扱っている関数群は、その派生クラスオブジェクト詳細知らなくても扱えるようにしなければならない) この原則下のclientは、一つinterface通して様々なserviceクラス利用することになる。

※この「リスコフの置換原則(Liskov substitution principle)」の解説は、「SOLID」の解説の一部です。
「リスコフの置換原則(Liskov substitution principle)」を含む「SOLID」の記事については、「SOLID」の概要を参照ください。

ウィキペディア小見出し辞書の「リスコフの置換原則」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「リスコフの置換原則」の関連用語

リスコフの置換原則のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



リスコフの置換原則のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのリスコフの置換原則 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、WikipediaのSOLID (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS