SOLID Principles Demystified — (L)

Apr 17 2023
リスコフの置換原理
親クラスは子クラスと簡単に置き換え可能でなければなりません。つまり、クラス Rectangle がクラス Shape のサブタイプである場合、機能フローを中断することなく Shape を Rectangle に置き換えることができる必要があります。サンプル シナリオ Dog、Cat などの多くのサブクラスを持つベース クラス Animal を持つアプリケーションを考えてみます。

親クラスは子クラスと簡単に置き換え可能でなければなりません。つまり、クラス Rectangle がクラス Shape のサブタイプである場合、機能フローを中断することなく Shape を Rectangle に置き換えることができる必要があります。

サンプルシナリオ

DogCatなどの多くのサブクラスを持つ基本クラスAnimalを持つアプリケーションを考えてみましょう。各サブクラスは、基本クラスAnimalで置換可能でなければなりません。

Snailクラスは、 Animal基本クラスのすべてのメソッドを実装できないサブクラスであるため、基本クラスに置き換えられると、アプリケーションの機能フローが中断されます

Snail クラスを除くすべてのサブクラスは Animal ベースで置換可能であるため、これは Liskov の置換原則に違反しています。

この原則の目標は、基本的に、新しい機能が原因でコードが壊れるのを防ぐことです。これは、最初の 2 つの原則であるSingle ResponsibilityとOpen Close Principleとも一致しています

主な利点

  1. 親クラスを使用するのとまったく同じように、何も壊さずに親クラスのサブクラスを使用できます。
  2. サブクラスは、親クラスのメソッドを変更/オーバーライドできます。
  3. サブクラスは、親クラスに存在しない新しい関数を定義できません。