平成22年度 秋期 午前Ⅱ 問3
設計
デザインパターンに関する問題
デザインパターンの中のストラテジパターンを用いて,帳票出力のクラスを図のとおりに設計した。この帳票出力ストラテジクラスの説明として,適切なものはどれか。
クラス図(原典は図。凡例:クラスは上から「クラス名/属性/操作」の3段の箱。クラスと関連を書き写した):
コンテキスト(属性・操作の欄は空) ◇──→ 帳票出力ストラテジ (コンテキスト側がひし形の集約,帳票出力ストラテジ側が矢印) 帳票出力ストラテジ 操作:+帳票出力() PDF帳票出力ストラテジ ──▷ 帳票出力ストラテジ (汎化) 操作:+帳票出力() HTML帳票出力ストラテジ ──▷ 帳票出力ストラテジ (汎化) 操作:+帳票出力()
- アクライアントは,どの帳票出力ストラテジクラスがどのフォーマットに対応するかを意識せずに利用できる。
- イ新規フォーマット用のアルゴリズムの追加が容易である。
- ウ帳票出力ストラテジクラスの中で,どのフォーマットで帳票を出力するかの振分けを行っている。
- エ帳票出力のアルゴリズムは,コンテキストクラスの中に記述する。
答えと解説を見る
✓ これが正解イ新規フォーマット用のアルゴリズムの追加が容易である。
解説
サブクラスを足すだけで、新しい出力形式を追加できます。
ストラテジパターンは、切り替えたいアルゴリズムをそれぞれ別のクラスに分け、共通の操作をもつ抽象的なクラスの下に並べる設計です。図では、帳票出力ストラテジが共通の操作である帳票出力をもち、PDF帳票出力ストラテジと HTML帳票出力ストラテジが汎化の関係でそれを受け継いで、形式ごとの出力方法を実装しています。コンテキストは帳票出力ストラテジを集約の形で参照し、その操作を呼ぶだけです。このため、新しい形式に対応したいときは、帳票出力ストラテジを受け継ぐサブクラスを一つ追加すればよく、コンテキストや既存の形式のクラスを書き換えずに済みます。アルゴリズムをクラスとして差し替え可能にするのがこのパターンの狙いだと押さえると選べます。
ほかの選択肢はなぜ違うのか
- アクライアントは,どの帳票出力ストラテジク…:ストラテジパターンでは、どの具体的なストラテジを使うかを、利用する側が選んでコンテキストに渡すのが一般的な形です。どのクラスがどの形式に当たるかを意識しないで済むとまではいえず、この構造の利点として挙げる点ではありません。
- ウ帳票出力ストラテジクラスの中で,どのフォ…:帳票出力ストラテジは共通の操作だけを定めたクラスで、PDF や HTML の出力はそれぞれのサブクラスが実装しています。一つのクラスの中で形式ごとに処理を振り分けるのは、このパターンが避けようとしている書き方です。
- エ帳票出力のアルゴリズムは,コンテキストク…:図では、帳票出力の操作は帳票出力ストラテジとそのサブクラスがもち、コンテキストの操作の欄は空です。アルゴリズムをコンテキストの外のクラスに分けて差し替えられるようにするのが、このパターンの構造です。
この問題の用語
- パターン繰り返し現れる規則性や、決まった形のことを指します。膨大なデータを処理して、そこに隠れた規則性を見つける使い方が広がりました。
- アルゴリズム問題を解くための、決まった手順や考え方そのものです。同じ問題でも手順によって、処理にかかる時間や必要な記憶量が変わります。
出典:平成22年度 秋期 システムアーキテクト試験 午前Ⅱ 問3
同じ用語が出る問題
- 令和7年度 春期 午前Ⅱ 問5:デザインパターンに関する問題(パターン)
- 令和6年度 春期 午前Ⅱ 問4:デザインパターンに関する記述(パターン)
- 令和4年度 春期 午前Ⅱ 問5:ストラテジパターンに関する問題(アルゴリズム)
- 平成28年度 秋期 午前Ⅱ 問25:WPA2に関する問題(アルゴリズム)
- 平成22年度 秋期 午前Ⅱ 問11:流れ図に関する問題(アルゴリズム)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)