クラス設計原則

研究室内講義用メモ。


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:インタフェース分離原則

利用されないメソッドへの依存を強制してはいけない。


大きなインタフェースよりも、小さなインタフェースをグループ化すると。

インターネットサービスプロバイダと略称がかぶるんだよなぁ。


次はパッケージ凝集・結合原則か。


参考:アジャイルソフトウェア開発の奥義