Note
ソフトウェアを設計する際には、使っていないものへの依存を回避すべきだという原則。
インターフェースに存在するが使っていないメソッドなどに関して呼び先(クライアント)が依存しないようにする。 依存してしまうと、使っていないが依存している関数に対しての修正があった場合にクライアント側も修正が必要になる。
必要があるもののみを呼び出す。 インターフェースを切り分ける。
以下はISPに反する
abstract class Creature {
void breath()
void walk()
}
class Human implements Creature {
@override
void breath()
@override
void walk()
void talk()
}
class Fish implements Creature {
@override
void breath()
/// 魚は歩かないので不要な関数
@override
void walk()
void swim()
}
不要な関数は持たせないように設計をする上記の場合だとインターフェースを細かく分ける必要がある。
abstract class Creature {
void breath()
}
...
基底クラスを細かくすることで、必要な関数を持たせることなく実装をする。