平成25年度 秋期 午前Ⅱ 問4
設計
ストラテジクラスの説明
デザインパターンの中のストラテジパターンを用いて,帳票出力のクラスを図のとおりに設計した。この帳票出力ストラテジクラスの説明のうち,適切なものはどれか。
帳票出力のクラス図:
┌────────────┐ ┌──────────────────┐
│ コンテキスト │◇──────────→│ 帳票出力ストラテジ │
├────────────┤ ├──────────────────┤
├────────────┤ ├──────────────────┤
└────────────┘ │ +帳票出力() │
└──────────────────┘
△ △
│ │
┌──────────────────────┐ ┌───────────────────────┐
│ PDF帳票出力ストラテジ │ │ HTML帳票出力ストラテジ │
├──────────────────────┤ ├───────────────────────┤
├──────────────────────┤ ├───────────────────────┤
│ +帳票出力() │ │ +帳票出力() │
└──────────────────────┘ └───────────────────────┘
- コンテキストから帳票出力ストラテジへ,コンテキスト側がひし形(集約)の矢印でつながる。
- PDF帳票出力ストラテジとHTML帳票出力ストラテジから帳票出力ストラテジへ,白抜き三角(汎化)の線でつながる。
- 凡例: クラスの箱は上から クラス名/属性/操作 の3区画。
- アクライアントは,どの帳票出力ストラテジクラスがどのフォーマットに対応するかを意識せずに利用できる。
- イ新規フォーマット用のアルゴリズムの追加が容易である。
- ウ帳票出力ストラテジクラスの中で,どのフォーマットで帳票を出力するかの振分けを行っている。
- エ帳票出力のアルゴリズムは,コンテキストクラスの中に記述する。
答えと解説を見る
✓ これが正解イ新規フォーマット用のアルゴリズムの追加が容易である。
解説
新しいフォーマットは、ストラテジのサブクラスを足すだけで加えられます。
ストラテジパターンは、入れ替えたいアルゴリズムを、共通のインタフェースをもつクラスに切り出す設計です。図では、帳票出力ストラテジクラスが帳票出力()という操作を定め、PDF用とHTML用のクラスが汎化の関係でそれを受け継いで、それぞれのやり方で実装しています。コンテキストは帳票出力ストラテジという共通の型だけを相手にするので、新しいフォーマットを加えるときは、同じ操作を実装したクラスを一つ追加すれば済み、既存のクラスを書き換える必要がありません。アルゴリズムをクラスとして差し替えられる点がこのパターンの持ち味、と押さえておくとよいでしょう。
ほかの選択肢はなぜ違うのか
- アクライアントは,どの帳票出力ストラテジク…:ストラテジパターンでは、どの具体的なストラテジを使うかをクライアント側が選んでコンテキストに渡すのが基本の形です。そのため、クライアントはどのクラスがどのフォーマットを受け持つかを知っている必要があります。
- ウ帳票出力ストラテジクラスの中で,どのフォ…:図では、フォーマットごとに別のサブクラスがあり、それぞれが自分の形式の出力だけを実装しています。一つのクラスの中で条件分岐して出力形式を振り分ける作りは、このパターンが避けようとしている形です。
- エ帳票出力のアルゴリズムは,コンテキストク…:帳票出力のアルゴリズムは、PDF帳票出力ストラテジやHTML帳票出力ストラテジの操作として実装されています。コンテキストはストラテジを保持して呼び出す役で、アルゴリズムそのものは持ちません。
この問題の用語
- パターン繰り返し現れる規則性や、決まった形のことを指します。膨大なデータを処理して、そこに隠れた規則性を見つける使い方が広がりました。
- アルゴリズム問題を解くための、決まった手順や考え方そのものです。同じ問題でも手順によって、処理にかかる時間や必要な記憶量が変わります。
出典:平成25年度 秋期 システムアーキテクト試験 午前Ⅱ 問4
同じ用語が出る問題
- 令和7年度 春期 午前Ⅱ 問5:デザインパターンに関する問題(パターン)
- 令和6年度 春期 午前Ⅱ 問4:デザインパターンに関する記述(パターン)
- 令和4年度 春期 午前Ⅱ 問5:ストラテジパターンに関する問題(アルゴリズム)
- 平成28年度 秋期 午前Ⅱ 問25:WPA2に関する問題(アルゴリズム)
- 平成22年度 秋期 午前Ⅱ 問11:流れ図に関する問題(アルゴリズム)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)