システムアーキテクト試験 2017年 午前203


図は“顧客が商品を注文する”を表現したUMLのクラス図である。“顧客が複数の商品をまとめて注文する”を表現したクラス図はどれか。ここで、注文明細は注文に含まれる一つの商品に対応し,注文は一つ以上の注文明細を束ねたもので、一つの注文に対応する。
問題画像選択肢画像
(正解)

解説

顧客が複数の商品をまとめて注文するクラス図の表現【午前2 解説】

要点まとめ

  • 結論:注文は1つ以上の注文明細を含み、注文明細は1つの商品に対応するため、注文と注文明細はコンポジションで「1対1..*」の関係が正しいです。
  • 根拠:注文は注文明細を束ねる集約の親であり、注文明細は注文に強く依存するためコンポジション(黒菱形)で表現します。
  • 差がつくポイント:多重度の方向と値、コンポジションの有無を正確に理解し、注文と注文明細の関係を誤らないことが重要です。

正解の理由

選択肢は、注文と注文明細の関係をコンポジションで表し、多重度も「注文側が1」「注文明細側が1..*」となっているため、注文が必ず1つ以上の注文明細を持つことを正確に表現しています。さらに、注文明細と商品は「0..対1」の関連で、注文明細が商品に対応することも正しいです。顧客と注文の関係も「1対0..」で、顧客が複数の注文を持てることを示しています。これらの点が問題文の条件に合致しています。

よくある誤解

注文と注文明細の関係を単なる関連(実線)で表し、コンポジションを使わない誤りが多いです。多重度の向きや値を逆に理解しやすい点も注意が必要です。

解法ステップ

  1. 問題文の条件を整理する:「注文は1つ以上の注文明細を束ねる」「注文明細は1つの商品に対応」
  2. 注文明細と注文の関係は強い所有関係(コンポジション)で表すべきと判断する
  3. 多重度を確認し、注文側が「1」、注文明細側が「1..*」であることを確認する
  4. 注文明細と商品の関連は「0..*対1」であることを確認する
  5. 顧客と注文の関連は「1対0..*」であることを確認する
  6. 各選択肢の図を比較し、これらの条件を満たすものを選ぶ

選択肢別の誤答解説

  • ア:正解。注文と注文明細のコンポジション、多重度が正しい。
  • イ:注文と注文明細の多重度が逆で、「注文側が1..*」「注文明細側が1」となっており誤り。
  • ウ:顧客と注文明細が直接関連しているため、注文を経由しない関係で誤り。
  • エ:顧客と注文明細が直接関連し、注文と注文明細の多重度も逆で誤り。

補足コラム

UMLのコンポジションは「強い所有関係」を示し、親オブジェクトが消滅すると子オブジェクトも消滅します。注文と注文明細の関係はまさにこれに該当し、注文がなければ注文明細は存在しません。多重度は関連の「数の範囲」を示し、正確な設計に不可欠です。

FAQ

Q: コンポジションと集約の違いは何ですか?
A: コンポジションは強い所有関係で、親が消滅すると子も消滅します。集約は弱い所有関係で、子は独立して存在可能です。
Q: 多重度「1..*」はどういう意味ですか?
A: 「1以上の数」を意味し、必ず1つ以上の関連オブジェクトが存在することを示します。
Q: 注文明細が商品に「0..*」の多重度を持つ理由は?
A: 注文明細は商品に対応しますが、商品は複数の注文明細に関連する可能性があるため、「0以上の注文明細」が商品に関連します。

関連キーワード: UMLクラス図, コンポジション, 多重度, 注文明細, オブジェクト指向設計
← 前の問題へ次の問題へ →

©︎2025 情報処理技術者試験対策アプリ