Knowledge)、以上が本書で説明されているオブジェクト指向設計におけるクラス原則です。優れたクラス設計を行うためには、上記のような頭の痛くなる言葉を覚える必要はありません。この言葉の意味と何が言いたいのかを理解することは大切です。本書は、オブジェクト指向の原則、デザインパターンとその実践的な利用方法、UMLとJavaとのマッピング、モデリングの指針、アーキテクチャモデリング、ソフトウェア開発プロセスといった、避けては通れない問題を丁寧に解説している。特徴まず、本書の目次を見てください。要件モデリング問題分析アーキテクチャの確立クラスの割り当て振る舞いモデリング構造モデリングアーキテクチャモデリングアーキテクチャメカニズム(レイヤ・Observer・MVC・パーティション)サブシステムの設計RUPとXPJ2EEとUML本書のすべてを読破する必要はないと思います。240ページと薄い部類に入る本なので、読み始めるのに気合とか勇気とかはいらないと思います。本書の中で特におすすめ&読んで欲しい部分は、「オブジェクト指向の原則とパターン」です。本書のタイトルが「プログラマのためのJava設計ベストプラクティス」となっていますが、この「オブジェクト指向の原則とパターン」の部分を含め、本書のほとんどは、Javaに依存しません。本書の中で、UMLに関する部分はあまり期待しないほうがいいです。他にもっといい解説をしている本が出ているので、UMLに関してはそちらを参考にしたほうが良いでしょう。それ以外の部分に関しては、結構深いところや経験のない技術者の方は気づきにくい点も解説してあり、非常に役に立ちます。設計に関して解説している本で、オブジェクト指向の原則に触れているものは少ないと思います。原則は、パターンよりも抽象度が上の概念ですので、ここをしっかり理解できると、デザインパターンも理解が早いと思います。買って損はないと思います。OCP)既存のクラスを修正せずに、システムに新しい機能を追加できるように設計すること。「モジュールは拡張性について開いて(Open)おり,修正について閉じて(Closed)いなければならない。Principleを参考に。LSP)振る舞いにおいて、下位クラスのインスタンスが上位クラスのインスタンスとみなせるかどうか。下位クラスで保証する事前条件を上位クラスで保証する事前条件より強めることはできない。下位クラスは、上位クラスよりも事前条件を甘くしなければならないということ。IllegalArgumentExceptionというメソッドがあるとする。Exceptionという宣言は許されない。Exception」は、親クラスの例外より高水準(強い)例外は定義できない。下位クラスのメソッドで保証する事後条件を、上位クラスの事後条件よりも弱くすることはできない。Javaの例で言うと、Objectクラスのcloneというメソッドは、protected宣言されている。サブクラスでは、cloneというメソッドをprotected以上のアクセス制限をかけなければいけない。いうメソッドがあります。いう宣言は許されないということになります。DIP)抽象に依存する。具象に依存してはいけない。侵害しているといえる。この場合、主な解決策は、Factoryクラスを使用して、インスタンス生成を具象クラスに依存させない用にする。すべてのインスタンス生成にFactoryクラスを適用するのはばかげていて、実際には、クラスの実装が将来変更するかどうか不明な場合にこの原則を適用する。ISP)単独の汎用的なインターフェースよりも、多くの特化したインターフェースのほうが良い。インターフェースの凝集度を高めるべきであるということ。インターフェースは、オブジェクトが存在している瞬間に果たす役割に過ぎないということから、インターフェースの操作は複数の役割に対応しないように定義すべきである。CRP)継承よりもコンポジションのほうがよいというもの。継承は、静的な関連しかできないが、コンポジションは動的な関連にできる。サブクラスの種類が増えた場合に、継承では対応できなくなってくる。なにより、開放・閉鎖原則を侵害してしまう。PLK)別名、デメテルの法則とよばれる。別のオブジェクトのメソッド呼び出しで取得できるオブジェクトのメソッドは呼び出さないというもの。この原則の例外は、インターフェース型で取得した場合である。インターフェース型で取得したオブジェクトに関しては、メソッド呼び出しを許可できる。詳しい解説は、達人プログラマーが参考になります。参考オブジェクト指向の法則に関してよくまとめられています。設計のさらに上級編(J2EE編)はこちら法則や原則以外のプログラマーが知っておくとよいことが非常に丁寧にまとめられています。本書より厚めですが、こちらもおすすめ。UMLに関して非常に丁寧に解説してくれます。本書のUMLの部分を補うだけでなく、こちらもオブジェクト指向の原則を解説してくれています。