応用情報技術者試験 令和3年秋 午前問48 解説付き過去問
問題
図は、ある図形描画ツールのクラス図の一部である。
新たな形状や線種で図形を描画する機能の追加を容易にするために、リファクタリング"継承の分割"を行った。
変更後のクラス図はどれか。


正解
解説
この問題は、オブジェクト指向設計におけるリファクタリング手法の一つである「継承の分割(Split Inheritance)」について問うものです。継承の分割は、1つのクラスに複数の責務が含まれている場合、それらを分割し、よりシンプルで保守性・拡張性の高い設計に改善する手法です。
- 元のクラス図の構造と問題点
問題のクラス図では、「図形」クラスが形状と線種という2つの異なる責務を同時に持っており、例えば「太線の四角形」「細線の楕円」など、責務の組合せごとに個別のサブクラスが作成されていました。このような構造は、形状や線種の種類が増えるたびに組合せ数が爆発的に増え、クラスの数が煩雑になってしまいます。 - 継承の分割による改善
継承の分割では、「形状を描画する責務」と「線の太さを管理する責務」を別々のクラス階層に分離します。具体的には、線種に関する責務を独立した「線種」クラスとして分け、図形クラスにこの線種クラスのインスタンスを保持させる構造に変更します。
このようにすることで、形状と線種を独立して追加・変更できるようになり、例えば新たな線種を追加する際に図形のクラス定義に手を加える必要がなくなります。 - 変更後のクラス図の特徴
変更後の正しいクラス図では、「図形」クラスは「線種」クラスのインスタンスを持ち、描画処理は「線種」クラスに委譲されます。これにより、図形クラスは形状に関する処理に専念できるようになります。また、線種の追加や変更も、図形の階層とは独立して行えるため、柔軟性と再利用性が向上します。
以上より、継承の分割を適用して形状と線種の責務を分離した構成を取っている選択肢が正解となります。この構成により、新たな形状や線種の追加が容易になり、ソフトウェアの保守性や拡張性が高まります。