オブジェクト指向のこころ 第11章の練習問題の解答をまとめてみる。
基礎
switchは,処理の選択を行う際に使用できる機能ですが,この章で考察したデバイスドライバの例では問題が引き起こされます.
- どういった問題が引き起こされるのでしょうか?
- switchによってどういったニーズが示されているのでしょうか?
どちらのデバイスドライバを使用するべきかを決定するところと,デバイスドライバを使用するところが混在してしまうという問題.これは高い結合性と低い凝集度を示すものである.
(p.175)
switchは抽象化を必要としていることを示す.
このパターンは,どうして「Abstract Factory」と呼ばれているのでしょうか?
一見,ファクトリが抽象クラスになっており,状況ごとに使用する具象ファクトリクラスを派生させているために「Abstract Factory」と呼ばれていると思える.
しかし実際には,構築しようとしているもの自体が,抽象化によって定義されているためというのが理由である.
このパターンは,ファクトリにおける流動的要素の実装方法を規定するものではない.
(p.185)
Abstract Factoryにおける3つの概念的手順とは何でしょうか?
流動的要素を見つけ,それをカプセル化する. クラス継承よりもオブジェクトの集約を多用する. 実装を用いて設計するのではなく,インターフェースを用いて設計を行う.
このパターンでは,2種類のファクトリが存在しています.
- AbstractFactoryとは何をするものなのでしょうか?
- ConcreteFactoryNとは何をするものなのでしょうか?
AbstractFactoryは,それぞれのオブジェクトごとにメソッドを定義することで,どのオブジェクトをが実体化されうるかを定義する. ConcreteFactoryは,どのオブジェクトが実体化されるかを特定する.
AbstractFactoryパターンの因果関係とは何でしょうか?
このパターンにより,どのオブジェクトを使用するのかという規則と,それらのオブジェクトの使用方法に関するロジックを分離することができる.
(p.186)
GoFは,Abstract Familyパターンの目的として「関連,または依存し合うオブジェクトのファミリを,その具象クラスを指定することなしに生成するインターフェースを提供す」と述べています.
- この意味を答えてください.
- 例を挙げてください.
いくつかのオブジェクト群やオブジェクトファミリを実体化する必要がある時を考える. しかしそのときには,システムからどの具象オブジェクトを生成するかについて意識したくない. すんわち,どの特定具象クラスを使用するかとは別のファクターに依存するということ.
例として,データベースの記録を管理を考えるときに,どのDBMSを使うかについては意識したくないときなどが挙げられる.