SAシステムアーキテクト試験 午前Ⅱ

平成27年度秋期 システムアーキテクト 午前Ⅱ 問5

問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。

問題

デザインパターンの中のストラテジパターンを用いて,帳票出力のクラスを図のとおりに設計した。適切な説明はどれか。
コンテキストが帳票出力ストラテジを集約し,PDF帳票出力ストラテジとHTML帳票出力ストラテジがそれを継承するクラス図。
コンテキストが帳票出力ストラテジを集約し,PDF帳票出力ストラテジとHTML帳票出力ストラテジがそれを継承するクラス図。

選択肢

  1. ア
    クライアントは,使用したいフォーマットに対応する,帳票出力ストラテジクラスのサブクラスを意識せずに利用できる。
  2. イ
    新規フォーマット用のアルゴリズムの追加が容易である。
  3. ウ
    帳票出力ストラテジクラスの中で,どのフォーマットで帳票を出力するかの振り分けを行っている。
  4. エ
    帳票出力のアルゴリズムは,コンテキストクラスの中に記述する。
解き方のヒントを見る

クラス間の依存関係の向きを読む

デザインパターンを題材にした設計の説明では、名称や用語の印象よりも、登場する各クラスが他のどのクラスを知っていて、どの向きに依存しているかを一つずつ確かめることが、構造と役割を正しく読み解く土台になります。

この問題で問われていること

問われているのは設計の構造と役割の対応関係です。どのクラスが呼び出す側でどのクラスが呼び出される側か、また参照が具象と抽象のどちらに向いているかを、与えられた情報の中から根拠をもって拾い出せるかが焦点になります。

視点

オブジェクト指向の設計では、あるクラスが別のクラスを「知っている」関係にいくつかの形があります。たとえば、相手のメソッドを呼び出す、相手のインスタンスを生成する、相手への参照を保持する、といった形です。いずれの場合も、どちらからどちらへ向かう関係なのかという向きが重要です。また、依存先が差し替え可能な抽象的な型なのか、特定の具体的なクラスなのかを区別して読むと、各クラスが構造の中で担う役割を整理しやすくなります。パターン名から役割を連想するのではなく、関係の向きという事実から役割を組み立てる姿勢が大切です。

確認ポイント

  • 登場する各クラスについて、それが直接参照・呼出し・生成している相手はどのクラスかを書き出しましたか
  • それぞれの関係の向き(どちらが相手を知っているか)を、根拠となる箇所と結び付けて確認しましたか
  • 依存先が抽象的な型か具体的なクラスかを区別したうえで、各クラスの役割の説明と矛盾がないか照らし合わせましたか
正解と解説を見る

正解

イ

解説

図では帳票出力ストラテジが共通の帳票出力操作を定義し、PDF用とHTML用の具体的なストラテジがそれぞれのアルゴリズムを実装している。新形式は具体的なストラテジを追加することで対応しやすい。

理由

帳票出力ストラテジを抽象化し、PDF帳票出力ストラテジやHTML帳票出力ストラテジに形式ごとの処理を分担させている。したがって、形式ごとのアルゴリズムを独立して追加できる。

比較

コンテキストは選択されたストラテジに帳票出力を委譲する役割であり、形式ごとのアルゴリズム本体や形式の振り分けを一括して持つクラスではありません。

選択肢ア

これは不正解だよ。図ではコンテキストが帳票出力ストラテジを保持し、PDF用やHTML用の具体的なストラテジが定義されている。利用側が形式に応じたストラテジを選択する必要があるため、具体的なサブクラスを全く意識せず使えるという説明にはならない。

選択肢イ(正解)

これは正解だよ。形式ごとの帳票出力アルゴリズムを、共通の帳票出力ストラテジを継承する個別クラスとして分離している。そのため、新しいフォーマットに対応するときは、新たなストラテジクラスを追加して共通の操作を実装しやすく、既存クラスへの影響を抑えられる。

選択肢ウ

これは不正解だよ。帳票出力ストラテジクラスは共通の帳票出力操作を定義する抽象的な役割であり、PDFかHTMLかを判断して処理を振り分ける場所ではない。形式ごとのアルゴリズムは、それぞれの具体的なストラテジクラスに分けて実装する。

選択肢エ

これは不正解だよ。コンテキストクラスの役割は、保持しているストラテジに処理を委譲することである。PDFやHTMLなど形式固有の帳票出力アルゴリズムは、コンテキストに集約せず、対応する具体的なストラテジクラスの操作として記述する。

学習のポイント

ストラテジパターンの責務分離とアルゴリズム交換の考え方を理解する。

出典:独立行政法人 情報処理推進機構(IPA)平成27年度秋期 システムアーキテクト試験 午前Ⅱ 問5(公式資料:問題冊子(PDF) / 解答例)

関連する過去問一覧

IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針