責務単一原則とは
クラスを変更する理由は一つ以上存在してはならない
There should never be more than one reason for a class to change.
内容
クラスを変更する理由が二つ以上になるということは、そのクラスが複数の役割(責務)を担っているということになる。一般に、クラスが複数の役割(責務)を担っているかどうかは判断が難しいため、その判断材料として、「変更理由」という基準が挙げられている。
クラスが複数の役割(責務)を担っている場合、ある役割(機能)の変更により、関係のない他の役割まで影響が及ぶこととなり、ソフトウェアの安定性や保守性が損われる。
実例
以下のようなモデムのインターフェースがあったとする
interface Modem { public void dial(String pno); public void hangup(); public void send(char c); public char recv(); }
このモデムインターフェースは以下の複数の変更理由を持っている
- 接続方法を変更する
- 送受信方法を変更する
そのため、役割を以下のように分割して、Modemはこれらのインターフェースを介して接続と送受信の機能を利用するオブジェクトとして存在させるべき。
interface DataChannel { public void send(char c); public char recv(); }
interface Connection { public void dial(String pno); public void hangup(); }
参考文献
より詳細なレポート
http://www.objectmentor.com/resources/articles/srp.pdf