クラス設計原則
研究室内講義用メモ。
SRP・OCP・LSP・DIP・ISPの5つ。
- SRP:単一責任原則
クラスを変更する理由は1つ以上存在してはならない。
変更の兆候がなければ適用する必要はない。
意外に適用が難しかったりする。
- OCP:開放・閉鎖原則
拡張に対して開いていて、修正に対して閉じていなければならない。
拡張の兆候がなければ適用する必要はない。
兆候:「私を一度欺く者には恥あれ。私を二度欺くことあらば私に恥あれ。」
振る舞いが拡張可能で、振る舞いを拡張しても、利用側に修正が及ばないようにすると。
- LSP:リスコフの置換原則
派生型はその基本型と置換可能でなければならない。
BがAの派生型であれば、Aを用いたプログラムで、Aの代わりにBを用いても、そのプログラムの振る舞いが変わらない。
基本型で正しく動けば、そのどの派生型でも正しく動く必要があると。
正しく動く:利用者が期待する動作を行う
適用手段:契約による設計
Aの派生型Bがあるとき、B is a A を満たすだけでなく、BはAの振る舞いを全てサポートするべきである。
こういう原則って、どこかの偉いおっさんが作ったものだと思ってたけど、リスコフはおっさんじゃないのか。
- DIP:依存関係逆転原則
モジュールは抽象に依存し、抽象が実装の詳細に依存してはならない。実装の詳細が抽象に依存するべきである。
生成部と、変更の兆候がないクラスには適用する必要はない。
モジュール間の結合は抽象的にしましょうと。
上位モジュールの再利用が容易になると。
- ISP:インタフェース分離原則
利用されないメソッドへの依存を強制してはいけない。
大きなインタフェースよりも、小さなインタフェースをグループ化すると。
インターネットサービスプロバイダと略称がかぶるんだよなぁ。
次はパッケージ凝集・結合原則か。