図は,ある図形描画ツールのクラス図の一部である。
新たな形状や線種で図形を描画する機能の追加を容易にするために,リファクタリング“継承の分割”を行った。
変更後のクラス図はどれか。
正答3
解説
正解は3です。
この問題は、クラス図のリファクタリング「継承の分割」を行った後の形を、図の4つから選ぶものです。
元のクラス図では、図形の下に三角形と四角形があり、さらにその下に太線の三角形と太線の四角形が継承しています。
形状と線種という二つの変化の軸が一つの継承階層に混ざっているため、形状や線種を追加するたびに組合せの数だけクラスが増えます。
継承の分割は、このような二つの軸を別々の継承階層に分け、関連でつなぐリファクタリングです。
【選択肢別解説】
1:× 1の図は、図形の下に細線の三角形・細線の四角形・太線の三角形・太線の四角形の4クラスを並べています。
形状と線種の組合せごとにクラスを作っており、形状や線種を追加するとクラスが組合せ的に増えます。
2:× 2の図は、図形(三角形・四角形)とは別に太線の図形を作り、その下に太線の三角形・太線の四角形を置いています。
線種のクラスの中に形状の区別が残っており、新しい線種を追加するとまた形状ごとのクラスが必要になります。
3:○ 3の図は、図形の下に三角形・四角形を、線種の下に太線・細線を置き、図形から線種へ関連を引いています。
形状と線種が独立した継承階層になったので、新しい形状や線種は、それぞれの階層に1クラス追加するだけで済みます。
4:× 4の図は、元のクラス図に太線というクラスを加え、太線の三角形と太線の四角形が太線も継承する形です。
組合せのクラスはそのまま残っており、継承の軸が分割されていません。
【ポイント】
継承の分割は、デザインパターンのブリッジ(Bridge)パターンと同じ考え方です。
「二つの軸が混ざった継承は、継承を分けて関連でつなぐ」と覚えましょう。