リスコフの置換原則

liskov-substitution.png
bliskov.png
リスコフさんは、コンピュータ科学者には珍しい!女性なんですね。

派生型はその基本型と置換可能でなければならない。

実装に対してではなく、インターフェイスに対してプログラミングする

インタフェースじゃなくて具象実装にコーディングしている例

ArrayListで実装したものに対するコード ナマの配列で実装したものに対するコード
for(int i=0;i<breakfastItems.size();i++){
    MenuItem menuItem =(MenuItem)breakfastItems.get(i);
}
for(int i=0;i<lunchItems.length;i++){
    MenuItem menuItem =lunchItems[i];
}

利点

  1. クライアントは、扱うオブジェクトが求めるインタフェースを知っている限り、そのオブジェクトの具象型を知らなくて済む
  2. クライアントはこれらのオブジェクトを実装しているクラスを知らなくて済む。クライアントはインタフェースを定義している抽象クラスについてのみ知っていればよい。

関連したデザインパターン

これらのパターンは、オブジェクトの生成過程を抽象化することによって、インスタンス化する際に、実装の中身を意識しないでインタフェースと関連付けるための様々な方法を示している。
これらの生成に関するパターンを使えば、システムは確実に、実装ではなくインタフェースに対して記述しされたものになるであろう。[5]


open-closed-principle

サポートサイト Wikidot.com open-closed-principle