オブジェクト指向のこころ (SOFTWARE PATTERNS SERIES)

  • 丸善出版
4.43
  • (17)
  • (10)
  • (2)
  • (1)
  • (0)
本棚登録 : 294
感想 : 12
本ページはアフィリエイトプログラムによる収益を得ています
  • Amazon.co.jp ・本 (366ページ)
  • / ISBN・EAN: 9784621066041

感想・レビュー・書評

並び替え
表示形式
表示件数
絞り込み
  • オブジェクト指向そのものに対して懐疑的なのだけど、それでもこの本は面白く、有用でもある。昔々オブジェクト指向について真剣に考えていたときに読みたかった。かなりバイアスがかかっているところもあるが、許容範囲内だった。

    デザインパターンについては長らく誤解されているところがあった(る?)。デザインパターンを身に着けてしまえばすぐに正しい設計技法が使えるようになると勘違いな風潮が広まっていた。この本はそういう誤解を改めてくれる。確かに何もない混沌としたところからスタートするよりはずっと楽な道を歩めるようにはなる。それでも優れた設計技法を身につけるには長い時間がかかるし、本を読んだり、適当に使ってみるだけで身につくものでもない。この本はパータンの直接的な活用法よりも、むしろそういった分析の指針を与えてくれるところの一面を強調している。この点については完全に同意する。オブジェクト指向の入門書としても、パターン自体の解説書としても、ありがちなコードを提示しただけのものとは一線を画している。即効性はあまり高くなくとも良い本だった。

  • ・原著第2版の日本語訳がピアソン・エデュケーションより2005年に刊行され、丸善から2014年に復刊した。
    ・ややこしいが、丸善出版のサイトでは2005年のversionのものとして扱われている。
    ・なにより、著者の氏名をきちんと記載すべき。

    【書誌情報】
    『オブジェクト指向のこころ デザインパターンとともに学ぶ』
    原書:Design Patterns Explained: A New Perspective on Object-Oriented Design, Second Edition (Addison-Wesley Professional)
    著者:Alan Shalloway
    著者:James Trott
    訳者:村上 雅章
    発行元:丸善出版
    発行日:2005年09月
    判型:A5変
    ページ数:404ページ
    ISBN:978-4-621-06604-1
    Cコード:3004
    NDCコード:007.61

    オブジェクト指向パラダイムを有効にするためのデザインパターンの中から、重要度の高いものを厳選し解説。要求における流動的要素や、要求の変化という観点から、さまざまな事例について丁寧な考察を行うことによって、デザインパターンそのものを導き出すというユニークなアプローチを採っている。オブジェクト指向パラダイムのメリットを120%引き出したいと考えている方にお薦めの一冊。
    [https://www.maruzen-publishing.co.jp/item/b294729.html]


    【目次】
    まえがき
      オブジェクト指向からパターンへ、そして真のオブジェクト指向へ
      人工知能からパターンへ、そして真のオブジェクト指向へ
      本書で使用している表記について
      フィードバック
      第2版で変わった部分
      謝辞

    第I部 オフジェクト指向ソフトウェア開発入門
    第1章 オブジェクト指向パラダイム 
      1.1 概要 
      1.2 オブジェクト指向パラダイム以前:機能分解
      1.3 要求における問題
      1.4 変化に対応する:機能分解を用いた場合
      1.5 要求の変更に取り組む
      1.6 オブジェクト指向パラダイム
      1.7 オブジェクト指向プログラミングの実際
      1.8 オブジェクトの特殊なメソッド
      1.9 サマリ
      1.10 練習問題

    第2章 UML―統一モデリング言語
      2.1 概要 
      2.2 UMLとは何か?
      2.3 UMLを使う理由
      2.4 クラス図
      2.5 相互作用図
      2.6 サマリ
      2.7 練習問題

    第II部 従来のオブジェクト指向設計における限界
    第3章 柔軟なコードを必要とする問題
      3.1 概要
      3.2 CAD/CAMシステムから情報を抽出する
      3.3 ボキャブラリを理解する
      3.4 問題を表現する
      3.5 本質的な問題とアプローチ 
      3.6 サマリ
      3.7 練習問題

    第4章 標準的なオブジェクト指向による解決策
      4.1 概要
      4.2 特殊化したケースを考慮して解決する
      4.3 サマリ
      4.4 練習問題

    第III部 デザインパターン
    第5章 デザインパターンの紹介
      5.1 概要
      5.2 デザインパターンは建築学と文化人類学から生まれた
      5.3 建築の設計パターンからソフトェアのデザインパターンへの移行
      5.3 デザインパターンを学習する理由は?
      5.4 デザインパターンを学習するその他の利点
      5.5 サマリ
      5.6 練習問題

    第6章 Facadeパターン
      6.1 概要
      6.2 Facadeパターンの紹介
      6.3 Facadeパターンの学習
      6.4 フィールドノート:Facadeパターン
      6.5 CAD/CAMの問題とFacadeパターンの関係
      6.6 サマリ
      6.7 練習問題 

    第7章 Adapterパターン
      7.1 概要
      7.2 Adapterパターンの紹介
      7.3 Adapterパターンの学習
      7.4 フィールドノート:Adapterパターン
      7.5 CAD/CAMの問題とAdapterパターンの関係
      7.6 サマリ
      7.7 練習問題 

    第8章 視野を広げる
      8.1 概要
      8.2 オブジェクト:従来からの考え方と新たな考え方
      8.3 カプセル化:従来からの考え方と新たな考え方
      8.4 流動的要素を見つけ出し、それをカプセル化する
      8.5 共通性/可変性分析と抽象クラス
      8.6 アジャイル開発における品質
      8.7 サマリ
      8.8 練習問題

    第9章 Strategyパターン
      9.1 概要
      9.2 新たな要求を取り扱うための方法
      9.3 国際e-コマースシステムの事例:最初の要求
      9.4 新たな要求の取り扱い
      9.5 Strategyパターン
      9.6 フィールドノート:Strategyパターンの使用
      9.7 サマリ
      9.8 練習問題 

    第10章 Bridgeパターン
      10.1 概要
      10.2 Bridgeパターンの紹介 
      10.3 例を用いたBridgeパターンの学習
      10.4 デザインパターンの使用 
      10.5 Bridgeパターンの学習:パターンを導き出す
      10.6 概念的観点から見たBridgeパターン
      10.7 フィールドノート:Bridgeパターンの使用
      10.8 サマリ
      10.9 練習問題

    第11章 Abstract Factoryパターン
      11.1 概要
      11.2 Abstract Factoryパターンの紹介
      11.3 例を用いたAbstract Factoryパターンの学習
      11.4 Abstract Factoryパターンの学習:その実装
      11.5 フィールドノート:Abstract Factoryパターン
      11.6 Abstract FactoryパターンとCAD/CAM問題の関係
      11.7 サマリ
      11.8 練習問題

    第IV部 すべてをまとめる:パターンを使って考える
    第12章 エキスパートはどのように設計するのか?
      12.1 概要
      12.2 違いを付加していくことによる構築
      12.3 サマリ
      12.4 練習問題

    第13章 CAD/CAM問題をパターンによって解決す
      13.1 概要
      13.2 CAD/CAM問題のおさらい
      13.3 パターンで考える
      13.4 サマリ
      13.5 練習問題

    第V部 新たな設計パラダイムに向けて
    第14章 デザインパターンの原則と戦略
      14.1 概要
      14.2 開放/閉鎖原則
    14.3 コンテキストからの設計原則
      14.4 流動的要素のカプセル化原則
      14.5 抽象クラスVS.インタフェース
      14.6 健全な猜疑心
      14.7 サマリ
      14.8 練習問題

    第15章 共通性/可能性分析
      15.1 概要  
      15.2 共通性/可変性分析とアプリケーションの設計
      15.3 共通性/可変性分析を用いてCAD/CAMの問題を解決する
      15.4 サマリ
      15.5 練習問題

    第16章 分析マトリクス
      16.1 概要
      16.2 現実世界にて:流動的要素
      16.3 国際e-コマースシステムの事例:流動的要素の取り扱い
      16.4 フィールドノート
      16.5 サマリ
      16.6 練習問題

    第VI部 パターンの持つその他の価値
    第17章 Decoratorパターン
      17.1 概要
      17.2 もう少し詳細に
      17.3 Decoratorパターン
      17.4 Decoratorパターンを事例に適用する
      17.5 もう一つの例:入出力
      17.6 フィールドノート:Decoratorパターンの使用
      17.7 Decoratorパターンの本質
      17.8 サマリ
      17.9 練習問題

    第18章 Observerパターン
      18.1 概要
      18.2 パターンの分類
      18.3 国際e-コマースシステムの事例に対する追加要求
      18.4 Observerパターン
      18.5 事例に対するObserverパターンの適用
      18.6 フィールドノート:Observerパターンの使用
      18.7 サマリ
      18.8 練習問題

    第19章 Template Methodパターン
      19.1 概要
      19.2 国際e-コマースの事例における追加要求
      19.3 Template Methodパターン
      19.4 Template Methodを国際e-コマースシステムの事例に適用する
      19.5 Template Methodパターンを用いて冗長性をなくす  
      19.6 フィールドノート:Template Methodパターンの使用
      19.7 サマリ
      19.8 練習問題

    第VII部 ファクトリ
    第20章 生成に関するパターンから得られる教訓
      20.1 概要
      20.2 ファクトリ
      20.3 続・コンテキストを考慮する時の規則 
      20.4 指針に従ったファクトリ
      20.5 変化のベクトルを制限する
      20.6 別な視点から
      20.7 ファクトリのさまざまな役割
      20.8 フィールドノート
      20.9 サマリ
      20.10 練習問題

    第21章 SingletonパターンとDouble-Checked Lockingパターン
      21.1 概要
      21.2 Singletonパターンの紹介 
    21.3 事例に対するSingletonパターンの適用
      21.4 兄弟分:Double-Checked Lockingパターン
      21.5 熟考 
      21.6 フィールドノート:SingletonパターンとDouble-Checked Lockingパターンの使用
      21.7 サマリ
      21.8 練習問題

    第22章 Object Poolパターン
      22.1 概要
      22.2 オブジェクト群の管理を必要とする問題
      22.3 Object Poolパターン
      22.4 考察:ファクトリの守備範囲は実体化だけではない
      22.5 サマリ
      22.6 練習問題

    第23章 Factory Methodパターン
      23.1 概要
      23.2 事例に対する新たな要求
      23.3 Factory Methodパターン
      23.4 Factory Methodパターンとオブジェクト指向言語
      23.5 フィールドノート:Factory Methodパターン
      23.6 サマリ
      23.7 練習問題

    第24章 ファクトリのサマリ
      24.1 概要 
      24.2 ソフトウェア開発プロセスの手順
      24.3 ファクトリとエクストリームプログラミングのプラクティス間にある類似点
      24.4 システム規模に見合ったアプローチ

    第VIII部 まとめ、そして今後
    第25章 デザインパターンのおさらい:総括と今後
      25.1 概要
      25.2 オブジェクト指向原則のサマリ
      25.3 デザインパターンによる実装のカプセル化方法
      25.4 共通性/可変性分析とデザインパターン
      25.5 問題領域を責務に分解する
      25.6 パターンおよびコンテキストに基づく設計
      25.7 パターン内の関連
      25.8 デザインパターンとアジャイル開発方法論のプラクティス
      25.9 フィールドノート
      25.10 サマリ
      25.11 練習問題

    第26章 参考文献
      26.1 本書のサポートウェブサイト(英語)
      26.2 参考文献
      26.3 Javaプログラマに対するお薦め書籍
      26.4 C+プログラマに対するお薦め書籍
      26.5 COBOLプログラマに対するお薦め書籍
      26.6 エクストリームプログラミングに対するお薦め書籍
      26.7 プログラミング一般に関するお薦め書籍
      26.8 個人的なお薦め書籍

    索引

  • オブジェクト指向の初学者向けのようだが、それにしてはわかりにくい。

  • プログラムにおける,デザインパターンとオブジェクト指向を結びつける本。「リーダブルコード」とかと並行して読むとより目的意識がもてるあ。

    オブジェクト指向とは何なのかというよりかは,オブジェクト指向がどのように適用できるかを知るための本だと思う。なので基本用語については知っている前提と見たほうがよい(1,2章に説明はある)。

    各論については,文章が冗長なのが欠点(?)だが実例に従っているので,個人差でわかりやすいと思う人もいるだろう。

  • ただのデザインパターンの説明にとどまらず、デザインパターンを活用して実装詳細に囚われない概念的な設計方法について解説してくれる書籍。
    この本を読んで、伸び悩みを感じていた自身のプログラム設計能力が向上できそうだと感じるいい本だった。文句無しで星5。

  • オブジェクトの本質を突いている。
    マイクロサービスの設計に活用できる。
    これからの三年間、実践していきたい。

  • 一言で言うと、非常に有益な本だった。読んで良かった。

    この本で語られている考え方が非常に参考になりました。
    - カプセル化の考え方
    - 今後の変更や追加に強いオブジェクト指向設計の方法
    - どの部分をカプセル化すれば良いかの分析方法
    - 具体的なデザインパターンに対する考え方
    などが載っており、非常に有益な本でした。実践して血肉にしていきたい。

    また、今まではデザインパターンを、「これ今回使えそうだから使ってみよう」と単純に考えていたが、この本では、
     パターンが解決しようとしている問題をしっかり把握し、
     自分の解決しようとしている問題と一致しているかを見極めてから使う
    と書いてあり、デザインパターンに対する考え方が変わった。(今までは本質を見れていなかった。)

  • ■個々のデザインパターンを勉強するつもりで読み始めたが、デザインパターンの根底にある考え方を習得することができた。

    ■Q1. 従来のオブジェクト指向設計の限界とは?
    従来のオブジェクト指向設計では、流動的要素に対して継承による特化という手法で対応していた。この手法は、必要以上の継承階層によって結合度が強まり、凝集度が低下するため、保守性と柔軟性の悪化を引き起こす。
    CAD/CAMシステムの例では、フィーチャーとシステムという2種類の流動的要素に対して、フィーチャー数とシステム数を掛け合わせた数のクラスが必要になってしまう。これに対して、パターンに基づいたオブジェクト指向設計アプローチでは、流動的要素を個別のクラス内に保持(カプセル化)する。

    ■Q2. オブジェクトの新たな考え方とは?
    従来は、データとデータを取り扱うための手続きという、実装の観点でしかオブジェクトを見ていなかった。これに対して、新たな考え方では、概念上の観点=責務に基づいてオブジェクトを捉え、責務を備えた実態として定義する。これにより、オブジェクトがどう実装されるのかではなく、何を実行するかに着目できるようになる。実装ではなく動機に着目するというのは、デザインパターンでよく出てくるスローガンである。

    ■Q3. カプセル化の新たな考え方とは?
    従来は、カプセル化とはデータ隠蔽であると考えられていたが、これはカプセル化の限られた一面である。新たな考え方では、カプセル化とは、あらゆるものを隠蔽することである。データのほかに、実装、派生クラス、設計の詳細、実体化の規則を隠蔽することができる。派生クラスのカプセル化は、型のカプセル化とも言えるもので、抽象クラスを使用するクライアントは、派生クラスの存在を意識する必要がなくなる。

    ■Q4. 共通性/可変性分析とオブジェクト指向やデザインパターンの関係は?
    共通性/可変性分析を用いて、オブジェクトを見つけ出す。共通性分析によって流動的要素をまとめる概念を定義し、抽象クラスを導き出す。可変性分析によって流動的要素を洗い出し、派生クラス(具象クラス)によって実装する。
    ☆図8.5+Fowlerの観点:
    ・オブジェクトの概念上の観点=責任
    ・オブジェクトの仕様上の観点=メソッド(振る舞い)
    ・オブジェクトの実装上の観点=コード、データ、演算処理

    ■Q5. パターンで考えるとはどういうことか?
    問題領域からパターンを洗い出すことから始める(第3部の各章)。次に、洗い出したパターンの適用順序を決めて、各パターンの“canonical form”に当てはめる(第4部)。大枠から入ることによって、詳細に気を取られすぎることを回避できる。Alexanderのアプローチとも呼んでいる。
    ただし、「パターンで考える」ことが有効となるケースは多くない。これに対して、共通性/可変性分析は大抵のケースで有効な方法である。
    ※問題領域:解決しようとしている問題そのもののこと。

    ■Q6. コンテキストからの設計原則とは?
    コンテキストとは、あるオブジェクトが別のオブジェクトをどうやって使用するのかということ。コンテキストからの設計原則とは、オブジェクトにどのような要求があり、その要求に対してどのようなサービスを提供するのかという「サービス指向」を目指すことである。
    コンテキストからの設計は、Alexanderの設計アプローチとも呼んでおり、以下のようなアプローチである。「パターンで考える」と同じことを言っている。
    1.全体の概念を理解する。
    2.パターンを洗い出す。
    3.他のパターンのためのコンテキストを作り出すパターンから開始する。
    4.コンテキスト内に向かって、パターンの適用と、新たなパターンの洗い出しを繰り返す
    ほとんどのデザインパターンがこのアプローチに従っている。
    ※コンテキスト:何らかのものをその中に存在または発生させる、互いに関連しあう条件、すなわち環境や設定のこと。あるパターンは、他のパターンのためのコンテキストを提供する。

    ■Q7. 流動的要素のカプセル化原則とは?
    流動的な振る舞いを有した派生クラスを、使用側から隠蔽すること。凝集度を高め、流動的要素間の結合度を低くするために、クラス内に複数の流動的要素を保持しないことが重要である。CAD/CAMシステムの例では、Bridge, Abstract Factory, Adaptor, Fecadeの各パターンにより、カプセル化する流動的要素を分けている。

    ■Q8. クラス継承よりオブジェクトの集約を多用するとはどういうことか?なぜか?
    被使用側クラスの流動的要素に合わせて使用側クラスを派生(継承)させるのではなく、使用側クラスに被使用側クラスを保持させたうえで、汎用的なインタフェースを経由して呼び出すこと。被使用側クラスで流動的要素をカプセル化することにより、汎用的なインタフェースを提供できるようになる。
    ※Strategyパターンが一例。

    ■Q9. 開放/閉鎖原則とは?
    ソフトウェアは変更することなく拡張できるように設計すべきという考え方。デザインパターンの根幹には開放/閉鎖原則がある。

    ■Q10. 共通性/可変性分析とは?
    問題領域内に存在している概念(共通性)と具体的な実装(可変性)を洗い出すこと。システムの流動的要素を洗い出すことができる。以下のような、共通性/可変性分析テーブルを作りながら進める。
    共通性 | 存在する流動的要素
    概念1 | 具体的な実装1-A
    | 具体的な実装1-B
    概念2 | 具体的な実装2-A
    | 具体的な実装2-B
    | 具体的な実装2-C
    … | …
    流動的要素を洗い出した後は、デザインパターンの教訓(インタフェースを用いて設計を行い、集約を用いて流動的要素をカプセル化する)を活用できる。
    デザインパターンによるアプローチ(コンテキストからの設計)とよく似ている。しかし、相互補完的な面もある。共通性/可変性分析によるアプローチは、抽象的側面の洗い出しに役立つ。デザインパターンによるアプローチは、抽象的側面間の関連に着目する。

    ■Q11. 分析マトリクスとは?
    問題領域内に存在する流動的要素を明確にするためのテクニック。分析結果から、使用すべきパターンを洗い出すことができる。以下の表が分析マトリクスであり、概念が共通性を表し、機能が特定の共通性における流動的要素を表す。
    | シナリオA | シナリオB |
    概念1 | 機能1-A | 機能1-B |
    概念2 | 機能2-A | 機能2-B |
    … | … | … |
    分析マトリクスにより、要求の抜け漏れに気づくことができる。また、数多くの特殊ケースが存在し、全体像が見えない場合の整理に有効である。

    ■Q12. 共通性/可変性分析と分析マトリクスの関係は?
    分析マトリクスは、共通性と流動的要素の整理により、複雑な問題領域の理解に役立つ。

    ■Q13. 有効で汎用的な設計アプローチとは?
    デザインパターンから得られた以下の教訓のこと。どのような設計にも適用可能である。これは、Alexanderのコンテキストからの設計に従ったアプローチである。
    ・共通性/可変性分析を用いて、システムの流動的要素を洗い出す。
    ・流動的要素を洗い出した後、デザインパターンの教訓(インタフェースを用いて設計を行い、集約を用いて流動的要素をカプセル化する)に従う。

  • むつかしい

全12件中 1 - 10件を表示

アラン・シャロウェイの作品

この本を読んでいる人は、こんな本も本棚に登録しています。

有効な左矢印 無効な左矢印
エリック・リース
有効な右矢印 無効な右矢印
  • 話題の本に出会えて、蔵書管理を手軽にできる!ブクログのアプリ AppStoreからダウンロード GooglePlayで手に入れよう
ツイートする
×