応用情報技術者 2021年 秋期 午前2 問48
問題文
図は、ある図形描画ツールのクラス図の一部である。新たな形状や線種で図形を描画する機能の追加を容易にするために、リファクタリング “継承の分割” を行った。変更後のクラス図はどれか。


選択肢
ア:
イ:
ウ:(正解)
エ:
図形描画ツールのクラス図リファクタリング【午前2 解説】
要点まとめ
- 結論:継承の分割により「図形」と「線種」を別クラスに分ける設計が拡張性を高める最適解です。
- 根拠:「図形」と「線種」を独立させることで、新たな形状や線種の追加が容易になり、クラスの責務が明確になります。
- 差がつくポイント:単一継承の限界を超え、機能ごとにクラスを分割し関連付ける設計思想を理解しているかが問われます。
正解の理由
選択肢ウは「図形」と「線種」を別々のクラス階層に分割し、両者を関連付ける形で表現しています。これにより、三角形や四角形などの形状の追加と、太線や細線などの線種の追加を独立して行え、拡張性と保守性が向上します。
他の選択肢は形状と線種が一体化しており、新たな線種や形状の追加時にクラスの組み合わせが爆発的に増える問題を解決できていません。
他の選択肢は形状と線種が一体化しており、新たな線種や形状の追加時にクラスの組み合わせが爆発的に増える問題を解決できていません。
よくある誤解
「太線の三角形」などの具体的な組み合わせをすべてクラス化すればよいと考えがちですが、これはクラス数の増加と管理の複雑化を招きます。
解法ステップ
- 問題文の「継承の分割」の意味を理解する。
- 形状(図形)と線種の責務を分離する設計を考える。
- クラス図の各選択肢を比較し、形状と線種が独立しているか確認する。
- 拡張性(新形状・新線種の追加容易さ)を基準に最適な図を選ぶ。
- 選択肢ウが形状と線種を分割し関連付けていることを確認し正解とする。
選択肢別の誤答解説
- ア:形状と線種の組み合わせをすべて個別クラス化しており、クラス数が増え拡張性が低い。
- イ:「太線の図形」という中間クラスがあり、形状と線種の分離が不十分で拡張性に欠ける。
- ウ:形状と線種を明確に分割し関連付けているため拡張性が高く正解。
- エ:形状の下に線種がぶら下がる形で、線種の追加時に形状ごとにクラスを増やす必要があり拡張性が低い。
補足コラム
継承の分割は「単一責任の原則(SRP)」に基づき、クラスの役割を明確に分ける設計手法です。これにより、変更の影響範囲を限定し、保守性や拡張性を高めます。図形描画ツールのように複数の属性(形状・線種)がある場合は、属性ごとにクラスを分割し関連付けることが推奨されます。
FAQ
Q: なぜ形状と線種を別クラスに分ける必要があるのですか?
A: それぞれ独立して変更や追加が可能になり、クラスの組み合わせ爆発を防ぐためです。
A: それぞれ独立して変更や追加が可能になり、クラスの組み合わせ爆発を防ぐためです。
Q: 継承の分割と多重継承はどう違いますか?
A: 継承の分割は責務ごとにクラスを分けて関連付ける設計で、多重継承は複数の親クラスを持つことを指します。多重継承は言語によってはサポートされていない場合もあります。
A: 継承の分割は責務ごとにクラスを分けて関連付ける設計で、多重継承は複数の親クラスを持つことを指します。多重継承は言語によってはサポートされていない場合もあります。
関連キーワード: 継承の分割、クラス図、拡張性、単一責任原則、図形描画、オブジェクト指向設計

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

