
068
リスト2.3.7
LSPに違反したコード (2)
// src/main/java/sample/chap02/lsp/LspViolationSample.java
// 一括で見積もりを行うメソッド
public void estimateAllTickets(List<Ticket> tickets, int estimationPoint) {
// estimationPoint = 4 でかつチケットが StoryTicket の場合、
// AssertionError が発生!
tickets.forEach(it -> it.estimate(estimationPoint));
}
このことから、LSPを守るためには、基本型の定める事前条件を派生
型が強めてはいけないということがわかります(逆に事後条件は弱めて
はいけません。また、不変条件は維持しなくてはなりません)。
LSPを遵守して正しく基本型や派生型を扱うためには、アプリケー
ションにおいてそれらが正しく振る舞うための条件(事前条件・事後条
件・不変条件)を明確にする必要があります。
ISP:インターフェース分離の原則
クライアントに、クライアントが利用しないメソッドへの依存を強
制してはならない。
※7
ISPは、大きなインターフェースをクライアントごとの小さなイン
ターフェースに分離することを表す原則です。
具体例を見ましょう。リスト2.3.8もチケット管理ツールを想定した
サンプルです。この例では、
Ticket
は抽象クラスでなくインターフェー ...