Principle) O オープン・クローズドの原則 (OCP:Open-Closed Principle) L リスコフの置換原則 (LSP:Liskov Substitution Principle) I インターフェイス分離の原則 (ISP:Interface Segregation Principle) D 依存関係逆転の原則 (DIP:Dependency Inversion Principle)
should be open for extension, but closed for modification. (→ソフトウェアの実体(クラス、モジュール、関数など)は、拡張に対して開かれている べきであり、修正に対して閉じていなければならない) ある機能の追加などがある場合、既存のコードを変更せずにその機能の追加(拡張)が 出来るように設計をするべし
or references to base classes must be able to use objects of derived classes without knowing it. (→ある親クラスへのポインタないし参照を扱っている関数群は、その子クラスのオブ ジェクトの詳細を知らなくても扱えるようにしなければならない) サブタイプ(S)とスーパータイプ(T)は「S is a T」の原則にのっとり、置換可能である
than one general-purpose interface. (→汎用なインターフェースが一つあるよりも、各クライアントに特化したインターフェース がたくさんあった方がよい) クライアントが、自分の必要な要素だけを継承できるするようにするべき 一つのインターフェースに沢山の要素が入っていると、あるクライエントにとっては必要 のないものが継承されるということが起きるから
anything from low-level modules. Both should depend on abstractions (e.g., interfaces), [not] concretions. (→上位モジュールはいかなるものも下位モジュールから持ち込んではならない。双方と も具象ではなく、抽象(インターフェースなど)に依存するべきである) 外側のクラスが内側のクラスに依存するようなことはしてはいけない (インターフェースを経由すると、依存関係を断ち切ることが出来るのでこの本で推奨さ れているが、アノテーションを使うことでも回避できる)