令和3年度 秋期 応用情報技術者試験 午前 問題 問48

図は,ある図形描画ツールのクラス図の一部である。新たな形状や線種で図形を描画する機能の追加を容易にするために,リファクタリング“継承の分割”を行った。

変更後のクラス図はどれか。

クラス図
図の説明テキスト

図形描画ツールのクラス図の一部。

  • クラス「図形」を基底クラスとし、「三角形」「四角形」が継承している。
  • 「三角形」を「太線の三角形」が継承している。
  • 「四角形」を「太線の四角形」が継承している。
    凡例として、四角形が「クラス」、白抜き三角の矢印が「継承」、開いた矢印が「関連」であることが示されている。
解答・解説

正解: ウ.

新たな形状や線種で図形を描画する機能の追加を容易にするためのリファクタリング(Bridgeパターンの適用)に関する問題です。

元のクラス図では、「図形」クラスから形状(「三角形」「四角形」)を継承し、さらにそこから線種(「太線の三角形」「太線の四角形」)を継承しています。
この設計のまま新しい形状(例:円)や新しい線種(例:細線)を追加しようとすると、「細線の三角形」「細線の四角形」「太線の円」「細線の円」など、形状の数 × 線種の数 だけサブクラスが必要になり、クラスの数が爆発的に増加してしまいます。

これを防ぐためには、「形状」を表す継承階層と「線種」を表す継承階層を分割し、両者を関連(委譲)で結びつける設計に変更します。

選択肢ウのクラス図を確認すると以下のようになっています。

  1. 「図形」クラスを基底として、形状を表す「三角形」「四角形」が継承している
  2. 「線種」クラスを基底として、線の種類を表す「太線」「細線」が継承している
  3. 「図形」クラスから「線種」クラスへ向かって関連の矢印(開いた矢印)が引かれている

これにより、形状と線種を独立して拡張(サブクラス化)できるようになり、機能の追加が容易になります。したがって、ウが正解です。

各選択肢の解説

  • ア: 「図形」クラスから、すべての組み合わせ(細線の三角形、細線の四角形、太線の三角形、太線の四角形)を直接継承しています。これでは形状や線種が増えるたびにサブクラスが急増するため、機能の追加は容易になりません。
  • イ: 「図形」階層と「太線の図形」階層が存在し、「太線の図形」から「図形」へ関連が引かれています。「太線の三角形」などの個別のクラスが依然として残っており、形状と線種が適切に分離されていません。
  • エ: 「太線の三角形」「太線の四角形」が、それぞれの形状クラス(「三角形」「四角形」)から継承し、さらに「太線」クラスへ向かって継承の矢印が引かれている構造になっています。依然として「形状+線種」のクラスを作る必要があり、継承の分割ができていません。

Spineチーム