令和4年度 春期 システムアーキテクト試験 午前II 問5
デザインパターンの中のストラテジパターンを用いて,帳票出力のクラスを図のとおりに設計した。適切な説明はどれか。

図の説明テキスト
ストラテジパターンを用いた帳票出力のUMLクラス図。
・凡例: 矩形は上から「クラス名」「属性」「操作」の3区画に分かれている。
・クラス「コンテキスト」からクラス「帳票出力ストラテジ」に対して集約(白抜きの菱形)の線が引かれている。
・クラス「帳票出力ストラテジ」は操作として「+ 帳票出力( )」を持つ。
・クラス「PDF 帳票出力ストラテジ」とクラス「HTML 帳票出力ストラテジ」は、ともにクラス「帳票出力ストラテジ」を継承(白抜きの三角矢印)している。これらサブクラスもそれぞれ操作として「+ 帳票出力( )」を持つ。
解答・解説
正解: イ. 新規フォーマット用のアルゴリズムの追加が容易である。
正解は イ です。
ストラテジパターン(Strategy Pattern) は、アルゴリズムをそれぞれ個別のクラスとしてカプセル化し、実行時にそれらを切り替えて利用できるようにするデザインパターンです。
与えられたクラス図において、以下の構造が示されています。
- 「コンテキスト」クラスは、「帳票出力ストラテジ」クラスを集約(白抜きひし形の矢印)しています。これにより、コンテキストは帳票出力の具体的な処理をストラテジクラスに委譲します。
- 「PDF 帳票出力ストラテジ」と「HTML 帳票出力ストラテジ」は、「帳票出力ストラテジ」を継承(白抜き三角矢印)し、それぞれ独自の「+ 帳票出力( )」の操作(アルゴリズム)を実装しています。
この構造により、新しく別のフォーマット(例えば CSV 形式など)を追加したい場合は、「帳票出力ストラテジ」を継承した新しいクラスを追加するだけで済みます。既存の「コンテキスト」クラスなどを修正する必要がないため、拡張性に優れています。したがって、「新規フォーマット用のアルゴリズムの追加が容易である」 という説明が適切です。
各選択肢の解説
ア:誤り
クライアント(呼び出し側)は、PDFやHTMLといったどの出力フォーマットを使用するかを決定し、対応するストラテジクラスのインスタンスを生成してコンテキストに渡す必要があります。そのため、サブクラスを完全に意識せずに利用できるわけではありません。イ:正解
上述の通り、新しい出力フォーマット用のクラスを追加する際、既存のクラス(コンテキストなど)のコードを変更せずに拡張できるため、アルゴリズムの追加が容易です。ウ:誤り
「帳票出力ストラテジ」クラスの中で条件分岐(if文やswitch文など)による振り分けを行っているわけではありません。ポリモーフィズム(多態性)を利用し、セットされた各サブクラス自身の「+ 帳票出力( )」メソッドが呼び出されることで処理が実行されます。エ:誤り
帳票出力の具体的なアルゴリズムは、「コンテキスト」クラスの中ではなく、「PDF 帳票出力ストラテジ」や「HTML 帳票出力ストラテジ」といったストラテジクラスの各サブクラスの中に記述されます。