2013年1月9日水曜日

"Object Calisthenics" (『オブジェクト指向エクササイズ』)

"Object Calisthenics" (『オブジェクト指向エクササイズ』) を読んだ。最初にルールだけを知ったときは、無茶を感じたけれど、そもそも何のためのルールで、各ルールがなぜ設定されているか、を知ったら納得できた。

"Object Calisthenics"のルールは、遵守すべきコーディング規約でも良い設計・コードのための原則でもない。オブジェクト指向のコンセプトを自分のものにして実践できるようにするためのエクササイズに使うギプスのようなものだ。それも、少なくとも自分にとっては、かなり強力なギプスだ。

ルールは全部で9つある。いずれのルールも、オブジェクト指向のコンセプトは知っている上で、実践に移すのを助けるためのものなので、かなり具体的。長くなるので、個々のルールには立ち入らないけれど、覚え書きを兼ねて()内に私訳を付けておく。
  1. One level of indentation per method(各メソッド、インデントは1段階)
  2. Don't use the ELSE keyword(else句は使わない)
  3. Wrap all primitives and Strings(プリミティブ型と文字列にはラッパークラスを作る)
  4. First class collections(コレクション型にもラッパークラスを作る)
  5. One dot per line(メソッドをチェーンさせない)
  6. Don't abbreviate(略語は使わない)
  7. Keep all entities small(クラスは50行以下、パッケージは10クラス以下を保つ)
  8. No classes with more than two instance variables(インスタンス変数は2つまで)
  9. No getters/setters/properties(ゲッター/セッターあるいはプロパティを使わない)
これらのルールは、いずれも凝集度を上げ結合度を下げ、最小化した責務を局所化し、情報隠蔽・ポリモーフィズムを実践を助けてくれる。1, 2はポリモーフィズムを推し進め、3, 4, 5, 9は問題領域外の情報を隠蔽し、6, 7, 8は責務の割り当てを最小化・局所化する。

その結果、再利用性もメンテナビリティも高いクラスになるので、保守・運用が容易になる。リーダビリティ・テスタビリティも上がるので、開発者にとっても嬉しい。

著者によると、100%これらのルールに従って20時間くらいかけて1000行ほどのコーディングすると、これまでの習慣(手続き指向)から抜け出せるとのこと。自分は割と本を読む方だけれど、どれだけ読んでも手を動かしていない内容は簡単に忘れてしまう。100%は無理そうだけれど、意識してみるつもり。

References


0 件のコメント:

コメントを投稿