SOLID原則
SOLID原則とはソフトウェア工学の用語で、特にオブジェクト指向で用いられる5つの原則の頭文字を取ったもの。
ソフトウェア設計をより平易かつ柔軟にして保守しやすくすることを目的にしている。その特徴はインターフェースを仲介にしての機能の使用と、インターフェースによる機能の注入である。
SOLIDは、次の5つの原則からなる。
- 単一責任の原則 (single-responsibility principle)
- 開放閉鎖の原則(open/closed principle)
- リスコフの置換原則(Liskov substitution principle)
- インターフェース分離の原則 (interface segregation principle)
- 依存性逆転の原則(dependency inversion principle)
単一責任の原則
「変更するための理由が、一つのクラスに対して一つ以上あってはならない」
各クラスはそれぞれひとつだけの責務(=提供機能)を持つべきであり、ゲームを例に取ればゲームの進行ロジックを計算するクラスは描画やサウンドの処理までを担当しないことになる。
開放閉鎖の原則
「ソフトウェアの実体(クラス、モジュール、関数など)は、拡張に対して開かれているべきであり、修正に対して閉じていなければならない」
クラスを変更するとそのクラスを使用している全てのシステムに影響がある。影響を最小限に抑えるためバグ修正や変更はインターフェースにまで変更を加えず閉じたもので在るべきで、逆に開いたものであるのは機能追加などの拡張のみであるべき
リスコフの置換原則
「ある基底クラスへのポインタないし参照を扱っている関数群は、その派生クラスのオブジェクトの詳細を知らなくても扱えるようにしなければならない」
子クラスは親クラスの仕様を満たすべきである
インターフェース分離の原則
「汎用なインターフェースが一つあるよりも、各クライアントに特化したインターフェースがたくさんあった方がよい」
似た機能を提供するクラスでも用途ごとに機能分化されるべきで、巨大な共通インターフェースを作ることは予期しないバグを発生する可能性がある
依存性逆転の原則
「上位モジュールはいかなるものも下位モジュールから持ち込んではならない。双方とも具象ではなく、抽象(インターフェースなど)に依存するべきである」
あるクラスが別クラスを下位モジュールやメンバとして使う際にはインターフェースを通じて関係性が抽象化されることで依存度を減らすべき