今回は、オブジェクト指向のクラス設計のガイドラインを勉強したので、メモしていきたいと思います。
自分が学んだことを簡約にしていくので、補足や間違っている部分がある場合は、コメント頂けたら幸いです!
設計ガイドライン
- 実世界のシステムをモデル化する。
- 公開インタフェースを特定(識別)する。
- 優れたオブジェクトのインタフェースはクライアントが達成したいサービスだけを記述する。
- ユーザーから考えてみるとタクシーが目的地に辿り着けばいい。どのように言って速度はどうなっているのかはどうでもいいのだ。
- 丈夫なコンストラクタを設計すること
- オブジェクトを安全な状態に初期化しなければならない。
- デフォルトコンストラクタに依存してはいけない。初期化処理がなくても宣言するクセを身につける。
- クラスのドキュメント化とコメントを使用する。
- 協定を意識してオブジェクトを構成する。
- 他のクラスと情報をやり取りしないクラスは作る必要がない。
- 再利用を意識して設計する。
- クラス設計にて最も深く考えなければならない。
- オブジェクトが使用されるかもしれない全ての状況を考慮する。(不可能なので、できるだけ。)
- 拡張を意識して設計する。
- インタフェースを使用する。
- 例え、人クラスを継承して顧客や従業員のクラスを作れるように意識して設計する。
- 静的インタフェースはクラスの強い結合を意味する。
- 記述的な名前を付ける。
- 命名規則に従うこと
- 読んでる人がどのようなオブジェクトやメソッドなのか理解できるようにする。
- 変数はその用途に合う名前にすること。
- 移植不可のコードはカプセル化すること
- 特定の環境(ハードウェアなど)だけで動作するコード
- 移植不可のコードは分離し、固有のクラス又はメソッドにする。
- ラッパクラスを使用し、特定の環境の場合を制御すればいい。
- オブジェクトコピーと比較を提供する。
- スコープは可能な限り小さくする。
- 小さくすることは抽象化と実装の隠蔽を容易にする。
- 保守を意識して設計する。
- 1つの大きいコードよりは管理可能な部分で分解する。
- 保守性を高める方法は相互依存性を低くすること。
- 開発過程を繰り返す。
- 全てのコードを1回で作成しない。
- 少しづつコードを追加し、ビルドとテストを繰り返す。
- インタフェースをテストする。
- スタブを使用して実際コードがなくてもテストができる。
- スタブは使用が終わっても削除しないほうがいい。
- 永続オブジェクトを使用する。
- 永続性はオブジェクトの状態を保存する概念
- 保存しておくとオブジェクトを失った時に回復ができる。
- フラットフォームファイルシステム、RDBMS、NoSQLなどを利用する。
- オブジェクトの直列化及びマーシャリング
- マーシャリングとはオブジェクトを送信する時、オブジェクトを分解して送信できるような状態にすること
- 直列化とはオブジェクトを通信経路を通して送信し、受信側ではそれを再構成する。このプロセスを直列化という。
