オブジェクト指向をするうえでの大事なポイントなど
単一責任のクラス設計
メモ
- 単一責任のクラスの設計(そのクラスの関心ごとは1つにすべき)
- クラスだけではなくメソッドも単一責任の原則にする
- 例えばインスタンス変数の変更などは一般的には影響度が非常に大きい(現時点でインスタンスを呼び出している場所すべてに影響を与える)
その場合、クラスを分離する、などの選択肢もある - クラスの性質を一言で説明できるようにする(あれもこれもの場合には複数になっていることが多い)
その場合、分離を考える(分離が必ずしも善ではない。) - 日本語自体でクラスの性質が通るか考えてみる(参考書P43のといかけ)
- セッター、ゲッターの意図はインスタンス変数の隠蔽と、変更時に変更コストを1か所にすることができるため
- データ構造自体に依存するようなケースもあるため、ラッパーメソッドを使う(p49参照)
- なんらかの構造に依存するようなコード(例えば配列のインデックス)はさけ、クラスで定義し内部構造に触らなくする(p49参照)
- 単一でない場合はその構造を隔離することを考える
実際のコーディング上のコツ
- クラスはできる限り最小にする(メソッドはできれば10以内)
- メソッドの行数はなるべく少なくする(目安として20行以内)
- データベースやWebからの変数の依存度を下げる(依存度が上がるとテストが難しくなる)
- 他のクラスを必要とするような部分を極力すくなくする
感想
変更を予測することが困難なので、変更に備えて関心事でクラスをつくる。日本語で表記できるか否かという基準は大事。日本語が複雑になるようであればクラスを分けたほうがいいかも。3章の依存関係と合わせて、単一責任でない場合は隔離(別クラスとして定義)したほうがよさげ。