リスコフの置換原則とは

2025年9月11日木曜日

テクノロジー

t f B! P L


 

リスコフの置換原則(Liskov Substitution Principle, LSP)は、オブジェクト指向設計の基本原則の一つです。

C#で実際にクラスを設計する場合、どのように応用するかを具体例で見てみましょう。


1. LSPの原則とは

「サブクラス(派生クラス)は、スーパークラス(基底クラス)の代わりに使えるように設計すべき」

つまり、基底クラスを期待して書いたコードが、サブクラスでも問題なく動作する設計であることが重要です。


2. LSPに反した設計例(C#)

public class Bird { public virtual void Fly() { Console.WriteLine("飛びます"); } } public class Sparrow : Bird { // 問題なし } public class Penguin : Bird { // LSP違反 public override void Fly() { throw new NotImplementedException("ペンギンは飛べません!"); } }

この設計では、Bird 型の変数で Penguin を扱おうとすると、実行時に例外が発生します。

Bird myBird = new Penguin(); myBird.Fly(); // NotImplementedException

3. LSPに従った設計例(C#)

public class Bird { public virtual void Eat() { Console.WriteLine("食べます"); } } public class FlyingBird : Bird { public virtual void Fly() { Console.WriteLine("飛びます"); } } public class Sparrow : FlyingBird { // 問題なし } public class Penguin : Bird { // ペンギンは飛ばないので Fly メソッドは持たない }

こうすることで、Bird 型の変数として扱っても 飛べないペンギンでもエラーが起きない 設計になります。

Bird myBird1 = new Sparrow(); myBird1.Eat(); Bird myBird2 = new Penguin(); myBird2.Eat(); // 安全に動作

4. 実務での応用例

UIコンポーネント

public abstract class Widget { public abstract void Draw(); } public class Button : Widget { public override void Draw() { Console.WriteLine("ボタン描画"); } } public class TextBox : Widget { public override void Draw() { Console.WriteLine("テキストボックス描画"); } }
  • Widget 型で扱っても、ボタンやテキストボックスは正しく描画されます。

決済システム

public abstract class PaymentMethod { public abstract void Pay(decimal amount); } public class CreditCard : PaymentMethod { public override void Pay(decimal amount) { Console.WriteLine($"{amount}をカードで支払いました"); } } public class BankTransfer : PaymentMethod { public override void Pay(decimal amount) { Console.WriteLine($"{amount}を銀行振込で支払いました"); } }
  • どの支払い方法でも PaymentMethod 型で扱えるため、拡張が容易です。


5. まとめ

  • LSPを守ると安全に継承できる

  • サブクラスは基底クラスの契約(期待される動作)を壊してはいけない

  • C#では abstract クラスや virtual/override を上手く使い、サブクラスが安全に置換できるよう設計する

リスコフの置換原則を意識することで、変更に強く、保守性の高いオブジェクト指向設計を作ることができます。

このブログを検索

220Vの中国製製品を買って発生するトラブルまとめ:日本で使う前に知っておきたいポイント

  はじめに 最近は通販サイトで、 安価な中国製の電化製品 を簡単に購入できるようになりました。 特にAliExpress、Temu、Amazonマーケットプレイスなどでは、見た目も機能も魅力的な製品が並んでいます。 しかし、日本の電源は「 100V 」、中国や欧州は「 2...

QooQ