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