オブジェクト指向のこころ 第10章の練習問題の解答をまとめてみる。
基礎
切り出すという言葉と抽象的側面という言葉を定義してください
切り出すという言葉は,ものごとが互いに独立して振る舞えるようにする.または少なくとも,それらの関係を明確に述べることを意味している.
抽象的側面という言葉は,さまざまなものごとにおける概念的な特徴を指している.
(p.144)
Bridgeパターンのコンテキストにおける実装という言葉を定義してください.
抽象クラスと派生物が自らを実装するために必要とするもの.
(p.144)
シーケンス図の基本要素とは何でしょうか?
- 箱
- 図の最上部にありオブジェクトを表している.これには名前がつけられていることもある.
- オブジェクトの名前:クラス名
- これはないこともある
- 縦の破線
- オブジェクトに一つ与えられ,ライフタイムを表す
- 矢印
- オブジェクトごとのやり取りを示す.
- ノート
- これもオプショナル
パターンの使用方法に関するAlexanderの観点とは何でしょうか?彼は,まず最初に解決策から考察することを提唱しているのでしょうか?それとも解決すべき問題から考察することを提唱しているのでしょうか?
「各パターンとは,何度も繰り返される問題について描写し,その後で,問題を解決する上での核心を描写する」とAlexanderが言っている.
これは,問題を理解することが一番重要で,そのあと解決策に取り組むべきということを意味している.
解決策をはじめに考えることは間違いだということだ.
(p.155)
共通性分析では何を洗い出そうとするのでしょうか?可変性分では何を洗い出そうとするのでしょうか?
共通性分析では,経過によっても変化しない構造を洗い出し,可変性分析では,流動的に変化する構造を洗い出す.
Bridgeパターンが解決する問題とは,基本的にどういったものでしょうか?
抽象クラスの派生クラスが複数の実装を使用する必要があるときに,クラス数の爆発が起こってしまうという問題.
(p.167)
「1つの場所には1つの規則」という戦略を定義してください.
1つの場所には1つの規則を実装するようにするという戦略. これにより小さな多数のクラスが発生する.
Bridgeパターンの因果関係とは何でしょうか?
オブジェクトが使用している実装を,そのオブジェクトから切り離すことによって,拡張性を高める.
クライアントオブジェクトは,実装にかんするあれこれを気にする必要がなくなる.
(p.167)
応用
GoFはBridgeパターンの目的を,「実装から抽象的側面を切り出して,それらを独立して変更できるようにする」ことであると述べています.
- この意味を解説してください
- 例を挙げてください
この意味は,実装から独立した抽象的側面をもつようにすることを目的とするということである.
例として,形状を知っていることの責務を持つShapeオブジェクトと,描画メソッドを実装しているDrawingクラスが挙げられる. 個々のShapeオブジェクトは描画方法については知らなくて良いのである.
結合度が高くなると,何故クラス数の爆発が生じるのでしょうか?
結合度が高いということは,実装の種類が多くなるということで,それぞれのクラスはそれぞれの実装に責任をもたなければならないため.