ikautak.log

C/C++, Python, CUDA, Android, Linux kernel, Network, etc.

ThuoghtWorksアンソロジー

ThoughtWorksアンソロジー ―アジャイルとオブジェクト指向によるソフトウェアイノベーション

ThoughtWorksアンソロジー ―アジャイルとオブジェクト指向によるソフトウェアイノベーション

ビジネスソフトウェアの話がメインだったが、5章の「オブジェクト指向エクササイズ」という話は面白かった。
厳しいルールに従って簡単なプロジェクトを実施し、オブジェクト指向なコードを書くよう強制するというもので、エクササイズのルールは以下の9つ。

  1. 1つのメソッドにつき、インデントは1段階まで
  2. else句を使わない
  3. すべてのプリミティブ型と文字列型をラップする
  4. 1行につきドットは1つまで
  5. 名前を省略しない
  6. すべてのエンティティを小さくすること
  7. 1つのクラスにつきインスタンス変数は2つまで
  8. ファーストクラスコレクションを使用する
  9. Getter、Setter、プロパティを使用しない

6.のエンティティを小さくというのは、50行を超えるクラス、10ファイルを超えるパッケージを作らないというルール。
確かオラクルだったかがこんな感じの厳しいコーディング規約を適用していた気がする。

8.のファーストクラスコレクションを使用する、というのはコレクションクラスを持つクラスに他のメンバ変数を持たせないというルール。
各コレクションをそれぞれ独自のクラスにラップし、コレクションに関する振る舞いをそのクラスにカプセル化しておくらしい。
抽象度は上がるけど、組み込み出身の自分には性能が気になってしまう。

9.はカプセル化違反するなというもの。一般的に「求めるな、命じよ」と言われているらしい。
確かにいちいちオブジェクトに問い合わせるのではなく、知っているオブジェクトに頼む方が健全な設計だ。