リスコフの置換原則(Liskov Substitution Principle、LSP)は、オブジェクト指向プログラミングのSOLID原則の一つです。この原則は、サブタイプ(派生クラスやサブクラス)がその基本型(基底クラスや親クラス)として使用される場合に、そのサブタイプが基本型として振る舞うべきであるという原則を表しています。
もし S が T のサブタイプであるならば、T 型のオブジェクトは問題なく S 型のオブジェクトに置換可能でなければならない、というものです。
例えば、あるクラスが基本型(例えば、Shape クラス)であり、それを継承するサブクラス(例えば、Circle クラスや Square クラス)がある場合、どのサブクラスも基本型としての Shape クラスの振る舞いを守るべきです。これにより、プログラム内で Shape クラスのインスタンスを使っている場合、それを Circle や Square に置き換えても問題なく動作することが期待されます。
LSPはプログラムの柔軟性と拡張性を向上させ、クラス階層を使った効果的なポリモーフィズムを実現するための基本的な原則の一つです。
Areaメソッドを持つ基本クラスShapeを作成し、RectangleクラスとSquareクラスを作る例を示します。
この例では、ShapeクラスはAreaメソッドを純粋仮想メソッドとして持っており、そのメソッドをRectangleクラスとSquareクラスで実装しています。また、PrintArea関数はShapeへの参照を取り、面積を表示する機能を持っています。これにより、RectangleおよびSquareのオブジェクトはShapeとして期待される箇所で問題なく使えます。これがLiskovの置換原則に従った例です。