バッドプラクティスから学ぶ リスコフの置換原則 による柔軟なシステム設計
「派生クラスは常にその基底クラスと置き換え可能でなければならない。」つまり、サブクラスはスーパークラスの振る舞いや期待を壊さずに代替可能であるべきであり、サブクラスがスーパークラスの動作を変更したり、矛盾する動きをしてはいけないという原則です。
Square
クラスはRectangle
を継承していますが、挙動が異なります。Square
は幅と高さが常に同じですが、resize_and_calculate_area
メソッドは長方形を前提にしているため、正方形の場合は予期しない結果が起こります。これはリスコフの置換原則に違反している典型的な例です。
Square
はRectangle
の振る舞いを壊すことなく、共通の親クラスShape
を経由してポリモーフィズムを活用しています。これにより、各クラスが持つ固有の特性を維持したまま、互換性を保つことができ、予期しない結果がなくなりました。