リスコフの置換原則
Liskov Substitution Principle
派生型は基底型と置換可能でなければならない
型の継承関係の正当性は本来の性質とは別
例: Rectangle → Square
設計者はユーザーの視点で 合理的な仮定 をしなければならない
契約による設計 ( Design By Contract )
事前条件と事後条件を取り決めておく
IS-A関係のあるオブジェクトは同等に振る舞うべき
例: SquareはRectangleのように振る舞えない
Squareは縦横の長さに別々の値を持てない
リスコフの置換原則に違反しているか判断する経験則
派生クラスで機能が退化している
基底クラスでは実装されているのに、派生クラスでは何もしないメソッドなど
派生クラスから例外がはかれる
基底クラスのユーザーが期待しない例外を派生クラスのメソッドが投げるなど
リスコフの置換原則は開放/閉鎖原則を有効にする主要な役割を果たす原則の一つ