日々精進

新しく学んだことを書き留めていきます

オブジェクト指向のこころ1

デザインパターンとともに学ぶオブジェクト指向のこころ (Software patterns series)

デザインパターンとともに学ぶオブジェクト指向のこころ (Software patterns series)

オススメ度★★★★★
これは本当に素晴らしい本。
個人的にはオブジェクト指向についての本の中では最も重要な本の一つだと思う。
オブジェクト指向入門 第2版 原則・コンセプト (IT Architect’Archive クラシックモダン・コンピューティング)オブジェクト指向における再利用のためのデザインパターンアジャイルソフトウェア開発の奥義といった本と同列に扱ってもいいかもしれない。
この本のいいところは以下の点だと思う。
オブジェクト指向の原則についてわかりやすく説明している
デザインパターンがどんな問題を解決するか、どんな状況で適用すべきかについて明快に述べている
・具体例がわかりやすい
そして何より、読んでいて面白い!(主観的な評価基準でスミマセン。。)
技術書を読んでこんなにも感動したのは久しぶりかも知れない。
読んで面白い技術書というと自分の中では【楽天ブックスならいつでも送料無料】Joel on Software [ ジョエル・スポルスキ ]だけど、この本もかなりのものだ。
【楽天ブックスならいつでも送料無料】Java言語で学ぶデザインパターン入門増補改訂版 [ 結城浩 ]を読んでみたり、SingletonやTemplate MethodやStrategyあたりは使えるけど、
あんまりデザインパターンを使いこなしている感がないなぁという人にお勧め。


以下まとめ。
・設計時は概念、仕様、実装の観点を意識すること
オブジェクト指向設計で重要なのは責任の分割と変更の影響範囲の最小化
コンポジションと集約の違い
Martin Fowlerも確かUMLモデリングのエッセンス―標準オブジェクトモデリング言語入門 (Object oriented selection)で言っていたが、コンポジションと集約は区別しづらい。コード的には同じだし。
コンポジション:保持されているものが保持しているものの一部である場合(例:自動車とエンジン)
集約:独立して存在できる何かのコレクションがある場合(例:空港とそこに駐機している飛行機)
コンポジションと集約を区別するメリット:コンポジションは保持されているオブジェクトと保持しているオブジェクトの寿命が同じだが、集約の場合はことなる場合がある。つまり、集約の方がメモリリークを起こしやすいのでそれに注意できる。メモリリークの調査時にどこを優先的に調べるべきかがわかる。