ホーム > システムアーキテクト試験 > 2017年
システムアーキテクト試験 2017年 午前2 問03
図は“顧客が商品を注文する”を表現したUMLのクラス図である。“顧客が複数の商品をまとめて注文する”を表現したクラス図はどれか。ここで、注文明細は注文に含まれる一つの商品に対応し,注文は一つ以上の注文明細を束ねたもので、一つの注文に対応する。


エ:
イ:
ウ:
ア:(正解)
解説
顧客が複数の商品をまとめて注文するクラス図の表現【午前2 解説】
要点まとめ
- 結論:注文は1つ以上の注文明細を含み、注文明細は1つの商品に対応するため、注文と注文明細はコンポジションで「1対1..*」の関係が正しいです。
- 根拠:注文は注文明細を束ねる集約の親であり、注文明細は注文に強く依存するためコンポジション(黒菱形)で表現します。
- 差がつくポイント:多重度の方向と値、コンポジションの有無を正確に理解し、注文と注文明細の関係を誤らないことが重要です。
正解の理由
選択肢アは、注文と注文明細の関係をコンポジションで表し、多重度も「注文側が1」「注文明細側が1..*」となっているため、注文が必ず1つ以上の注文明細を持つことを正確に表現しています。さらに、注文明細と商品は「0..対1」の関連で、注文明細が商品に対応することも正しいです。顧客と注文の関係も「1対0..」で、顧客が複数の注文を持てることを示しています。これらの点が問題文の条件に合致しています。
よくある誤解
注文と注文明細の関係を単なる関連(実線)で表し、コンポジションを使わない誤りが多いです。多重度の向きや値を逆に理解しやすい点も注意が必要です。
解法ステップ
- 問題文の条件を整理する:「注文は1つ以上の注文明細を束ねる」「注文明細は1つの商品に対応」
- 注文明細と注文の関係は強い所有関係(コンポジション)で表すべきと判断する
- 多重度を確認し、注文側が「1」、注文明細側が「1..*」であることを確認する
- 注文明細と商品の関連は「0..*対1」であることを確認する
- 顧客と注文の関連は「1対0..*」であることを確認する
- 各選択肢の図を比較し、これらの条件を満たすものを選ぶ
選択肢別の誤答解説
- ア:正解。注文と注文明細のコンポジション、多重度が正しい。
- イ:注文と注文明細の多重度が逆で、「注文側が1..*」「注文明細側が1」となっており誤り。
- ウ:顧客と注文明細が直接関連しているため、注文を経由しない関係で誤り。
- エ:顧客と注文明細が直接関連し、注文と注文明細の多重度も逆で誤り。
補足コラム
UMLのコンポジションは「強い所有関係」を示し、親オブジェクトが消滅すると子オブジェクトも消滅します。注文と注文明細の関係はまさにこれに該当し、注文がなければ注文明細は存在しません。多重度は関連の「数の範囲」を示し、正確な設計に不可欠です。
FAQ
Q: コンポジションと集約の違いは何ですか?
A: コンポジションは強い所有関係で、親が消滅すると子も消滅します。集約は弱い所有関係で、子は独立して存在可能です。
A: コンポジションは強い所有関係で、親が消滅すると子も消滅します。集約は弱い所有関係で、子は独立して存在可能です。
Q: 多重度「1..*」はどういう意味ですか?
A: 「1以上の数」を意味し、必ず1つ以上の関連オブジェクトが存在することを示します。
A: 「1以上の数」を意味し、必ず1つ以上の関連オブジェクトが存在することを示します。
Q: 注文明細が商品に「0..*」の多重度を持つ理由は?
A: 注文明細は商品に対応しますが、商品は複数の注文明細に関連する可能性があるため、「0以上の注文明細」が商品に関連します。
A: 注文明細は商品に対応しますが、商品は複数の注文明細に関連する可能性があるため、「0以上の注文明細」が商品に関連します。
関連キーワード: UMLクラス図, コンポジション, 多重度, 注文明細, オブジェクト指向設計