読者です 読者をやめる 読者になる 読者になる

【オブジェクト指向のこころ】第5章 デザインパターンの紹介 解答

オブジェクト指向

オブジェクト指向のこころ 第5章の練習問題の解答をまとめてみる。

基礎

デザインパターンというアイデアを考え出した人は誰でしょうか?

建築家のChristopher Alexanderが1970年代後半に考案していた.
1990年代にGoFはこのアイデアに着目し,ソフトウェア設計に応用した.

1940年代に文化人類学において,文化の振る舞いと価値の評価のためにパターンを使っていた.
1980年代にヨーロッパのESPRITコンソーシアムがエキスパートシステムを作り出すためのパターンを研究していた.
(p.70)

Alexanderは同様の問題を解決する構造を見ることで,何を見つけ出したのでしょうか?

優れた品質をもつ設計や解決策を見つけた. そしてそれらは,客観的に評価可能なものであった.
(p.71)

パターンを定義してください

あるコンテキストにおける問題の解決方法.
(p.71)

デザインパターンの解説で鍵となる要素とは何でしょうか?
  • 名前(Name) *各パターンを識別するための固有名
  • 目的(Intent)
    • パターンの目的
  • 問題(Problem)
    • パターンが解決しようとしている問題
  • 解決策(Solution)
    • コンテキストにおける解決策
  • 構成要素と強調要素(Participants and Collaborators))
    • 解決策に関係する実態
  • 因果関係(Consequences)
    • パターンを使用することによる因果関係.どんなフォースがあるか
  • 実装(Implementation)
    • パターンを実装する方法
  • 一般的構造(Generic structure)
    • パターンの一般的な構造を示した標準的なクラス図を記述する

(p.76)

デザインパターンを学習する3つの理由とは何でしょうか?
  • 解決策の再利用
  • アナリスト間のコミュニケーションの円滑化
  • 早期に詳細に入り込まない見方の提供

(p.76)

GoFは優れたオブジェクト指向設計を生み出す戦略を示唆しています.それらは何でしょうか?
  • インターフェースを用いて設計する
  • クラス継承よりオブジェクトの集約を多用する
  • 流動的要素を見つけ出し,それをカプセル化する

(p.80)

応用

「慣れすぎてしまうことで,明らかなものを見失ってしまうことがあります」.パターンを使うことで,どのようにしてこういったことを避けることができるでしょうか?

過去の解決策から洞察を得ることでき,見失ってしまいがちな問題に着目することできる.

GoFは23のパターンをカタログ化しました.これらのパターンはどうやって生まれたのでしょうか?

ソフトウェアのコミュニティにおいて,すでに存在していた特定の問題を解決する品質の高い設計から洞察を得て生まれた.
(p.75)

パターンにおける「因果関係」と「フォース」の関係とはどのようなものでしょうか?

因果関係とは,パターンにおける原因と結果を関連付ける言葉. フォースは特定の問題において,拘束条件となり解決策を形作るもの.
(p.75)

「流動的要素を見つけ出し,カプセル化する」とはどういったことを意味していると思いますか?

何が流動的に変化するものであるかを探し, 何がシステムの本質を見極め,詳細に捕らわれないように,流動的要素を抽象的に扱うこと.

深い継承関係を避けた方がよいという理由は何でしょうか?

複雑なせいで理解しづらく,保守しづらいため.

yusuke-ujitoko.hatenablog.com