SOLID原則
#オブジェクト指向
リスコフの置換原則
#LSP
基本クラスを使っている場所で基本クラスの代わりにサブクラスを使っても問題なく動かなければならない
経験的にだめな場合
派生クラスで機能が退化している
派生クラスから例外がはかれる
派生クラスでオーバライドいしていメソッドの返り値の型が変わる(T→Array<T>)←インタフェースとかで強制できる言語では起きえないけどRubyとかだと起こる
オープン・クローズドの原則
#OCP
クラスは拡張に対して開いていて、修正に対して閉じていなければならない
これは2つの条件を要求してい
拡張ができる(Open)
修正する場合はそのクラスだけ修正すればいい(Closed)
これを実現する簡単なHow toとしてはクラスはインターフェースに依存させる
これはnewをできる限り使わないという事になる
単一責任の原則
#SRP
どのモジュールもたたひとつのことだけを行うべき
クラスを変更する理由が2つ以上存在してはならない
そのようなクラスはその2つの理由を別々のクラスに分離して単一責任原則を守るべき
一つのプログラムには一つのことを上手くやらせるに通ずる
/book-everything/UNIXという考え方
インターフェース分離の法則
#ISP
クライアントに、クライアントが利用しないメソッドへの依存を強制してはならない
インタフェースは必要最小限の構成にしておくべき
依存関係逆転の原則
#DIP
上位のモジュールは下位のモジュールに依存してはならない。どちらのモジュールも「抽象」に依存すべきである