令和5年度 秋期 午前Ⅱ 問17
設計
デザインパターンに関する問題
デザインパターンの中のストラテジパターンを用いて,帳票出力のクラスを図のとおりに設計した。適切な説明はどれか。
帳票出力のクラス図:
凡例: クラスの箱は上から クラス名/属性/操作
[コンテキスト](属性・操作なし)
◇──→ [帳票出力ストラテジ](集約。コンテキスト側がひし形)
[帳票出力ストラテジ]
操作: +帳票出力( )
[PDF帳票出力ストラテジ]
操作: +帳票出力( )
──▷ [帳票出力ストラテジ](汎化)
[HTML帳票出力ストラテジ]
操作: +帳票出力( )
──▷ [帳票出力ストラテジ](汎化)- アクライアントは,使用したいフォーマットに対応する,帳票出力ストラテジクラスのサブクラスを意識せずに利用できる。
- イ新規フォーマット用のアルゴリズムの追加が容易である。
- ウ帳票出力ストラテジクラスの中で,どのフォーマットで帳票を出力するかの振り分けを行っている。
- エ帳票出力のアルゴリズムは,コンテキストクラスの中に記述する。
答えと解説を見る
✓ これが正解イ新規フォーマット用のアルゴリズムの追加が容易である。
解説
サブクラスを足すだけで新しい出力形式に対応できます。
ストラテジパターンは、アルゴリズムを一つずつクラスとして切り出し、共通の型を通して差し替えられるようにする設計です。この図では、帳票出力ストラテジが共通の操作である帳票出力を定め、PDF 帳票出力ストラテジと HTML 帳票出力ストラテジがそれぞれの形式で中身を実装しています。コンテキストは帳票出力ストラテジを保持して呼び出すだけなので、新しい形式に対応したいときは、帳票出力ストラテジを継承したサブクラスを一つ追加すれば済み、コンテキストや既存のサブクラスを書き換える必要はありません。ストラテジパターンは、アルゴリズムを部品として交換・追加しやすくする仕組み、と覚えると説明を選びやすくなります。
ほかの選択肢はなぜ違うのか
- アクライアントは,使用したいフォーマットに…:ストラテジパターンでは、どの形式で出力するかを決めるために、クライアントが使うサブクラスを選んでコンテキストに渡すのが一般的です。サブクラスを意識せずに使えるという説明は、この構造には当てはまりません。
- ウ帳票出力ストラテジクラスの中で,どのフォ…:帳票出力ストラテジは共通の操作を定める親のクラスで、形式ごとの振り分けは行いません。どの形式で出力するかは、コンテキストがどのサブクラスのオブジェクトを保持しているかで決まります。
- エ帳票出力のアルゴリズムは,コンテキストク…:帳票出力の処理の中身は、PDF や HTML といった各ストラテジのサブクラスに書きます。コンテキストに書いてしまうと、形式を追加するたびにコンテキストの修正が必要になり、パターンの狙いが失われます。
この問題の用語
- パターン繰り返し現れる規則性や、決まった形のことを指します。膨大なデータを処理して、そこに隠れた規則性を見つける使い方が広がりました。
- アルゴリズム問題を解くための、決まった手順や考え方そのものです。同じ問題でも手順によって、処理にかかる時間や必要な記憶量が変わります。
出典:令和5年度 秋期 エンベデッドシステムスペシャリスト試験 午前Ⅱ 問17
同じ用語が出る問題
- 令和6年度 秋期 午前Ⅱ 問7:可変区画方式に関する問題(アルゴリズム)
- 令和5年度 秋期 午前Ⅱ 問8:スタベーションに関する記述(アルゴリズム)
- 令和3年度 秋期 午前Ⅱ 問21(パターン)
- 平成28年度 春期 午前Ⅱ 問22:デザインパターンの問題(パターン)
- 平成24年度 春期 午前Ⅱ 問17:ダイナミック駆動の問題(パターン)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)