IPA過去問ドリル

令和5年度 秋期 エンベデッドシステムスペシャリスト試験 午前Ⅱ 問17

テクノロジ/開発技術

デザインパターンの中のストラテジパターンを用いて,帳票出力のクラスを図のとおりに設計した。適切な説明はどれか。

令和5年度 秋期 エンベデッドシステムスペシャリスト試験 午前Ⅱ 問17の図

出典:令和5年度 秋期 エンベデッドシステムスペシャリスト試験 午前Ⅱ 問17

正解:イ

解説

ストラテジパターンは,交換可能なアルゴリズムを共通のインタフェースをもつクラス群としてカプセル化し,利用側がそれを差し替えられるようにするデザインパターンです。図では「帳票出力ストラテジ」が共通インタフェースを定め,「PDF 帳票出力ストラテジ」「HTML 帳票出力ストラテジ」がそれを継承して具体的な出力アルゴリズムを実装しています。コンテキストは帳票出力ストラテジを集約して利用するだけなので,新しいフォーマットを追加したいときは新しいサブクラスを作るだけでよく,既存のクラスを修正する必要がありません。

選択肢ごとの解説

  • 誤り。どのフォーマットで出力するかを決めて具象ストラテジをコンテキストに設定するのはクライアントの役割なので,クライアントはサブクラスの存在を意識する必要があります。サブクラスを意識せずに利用できるのは,生成をカプセル化するファクトリ系のパターンを併用した場合です。
  • 正しい。新しいフォーマットに対応するには帳票出力ストラテジを継承したサブクラスを追加するだけでよく,コンテキストや既存のサブクラスを変更せずにアルゴリズムを追加できます。
  • 誤り。ストラテジパターンでは,どのアルゴリズムを使うかの振り分けは利用側(クライアント)が行い,抽象クラスである帳票出力ストラテジの中に条件分岐を書くことはしません。振り分けを内部に書くと,追加のたびに修正が必要になりパターンの利点が失われます。
  • 誤り。帳票出力のアルゴリズムは具象ストラテジである PDF 帳票出力ストラテジや HTML 帳票出力ストラテジの中に記述します。コンテキストクラスにアルゴリズムを書くのは,ストラテジパターンを適用する前の設計です。
エンベデッドシステムスペシャリストの過去問を演習モードで解く