応用情報技術者 2013年 春期 午前2 問45
問題文
図は“顧客が商品を注文する”を表現したUMLのクラス図である。“顧客が複数の注文に対応し、注文は複数の注文明細を含み、注文明細は1種類の商品に対応する。


選択肢
ア:(正解)
イ:
ウ:
エ:
UMLクラス図の多重度とコンポジション関係【午前2 解説】
要点まとめ
- 結論:正解はアで、顧客・注文・注文明細・商品間の多重度とコンポジションが正確に表現されているためです。
- 根拠:顧客は複数の注文を持ち、注文は複数の注文明細をコンポジションで所有し、注文明細は必ず1種類の商品に対応する仕様に合致しています。
- 差がつくポイント:コンポジションの位置と多重度の正確な理解、注文と注文明細の関係性の表現が重要で、誤りやすい部分です。
正解の理由
選択肢アは「顧客」と「注文」の関連において顧客側が「1」、注文側が「0..」と正しく多重度が設定されています。
また、「注文」と「注文明細」の関係はコンポジション(黒塗りの菱形)で表現され、注文側に「1」、注文明細側に「1..」の多重度が付いています。
これは注文が注文明細を強く所有し、注文明細は必ず1つ以上存在することを示し、問題文の仕様に合致します。
さらに「注文明細」と「商品」の関連も注文明細側が「0..*」、商品側が「1」となっており、注文明細は必ず1種類の商品に対応することを正確に表しています。
また、「注文」と「注文明細」の関係はコンポジション(黒塗りの菱形)で表現され、注文側に「1」、注文明細側に「1..」の多重度が付いています。
これは注文が注文明細を強く所有し、注文明細は必ず1つ以上存在することを示し、問題文の仕様に合致します。
さらに「注文明細」と「商品」の関連も注文明細側が「0..*」、商品側が「1」となっており、注文明細は必ず1種類の商品に対応することを正確に表しています。
よくある誤解
コンポジションの位置を誤って注文と商品間に置いたり、多重度の方向を逆に理解することが多いです。
また、注文明細と商品間の多重度を「1..*」にしてしまう誤りもよく見られます。
また、注文明細と商品間の多重度を「1..*」にしてしまう誤りもよく見られます。
解法ステップ
- 問題文の仕様を正確に読み取り、各クラス間の関係性を整理する。
- 「顧客」と「注文」は1対多(1:0..*)の関連であることを確認。
- 「注文」と「注文明細」はコンポジションで強い所有関係があり、多重度は注文側1、注文明細側1..*であることを理解。
- 「注文明細」と「商品」は多重度0..*(注文明細側)と1(商品側)で、注文明細は必ず1種類の商品に対応することを確認。
- 各選択肢の図を比較し、仕様に合致するものを選ぶ。
選択肢別の誤答解説
- イ:コンポジションの菱形が注文の上にあり、多重度の表記が不明瞭で誤り。
- ウ:顧客と注文明細が直接関連付けられており、注文を経由しないため仕様違反。
- エ:顧客と注文明細が直接関連し、注文と注文明細の関係が二重に表現されているため不適切。
補足コラム
UMLのコンポジションは「強い所有関係」を示し、親オブジェクトが消滅すると子オブジェクトも消滅します。
多重度は関連の「数の範囲」を示し、0..*は「0個以上」、1は「必ず1個」を意味します。
正確な多重度設定はシステム設計の品質に直結するため、理解が不可欠です。
多重度は関連の「数の範囲」を示し、0..*は「0個以上」、1は「必ず1個」を意味します。
正確な多重度設定はシステム設計の品質に直結するため、理解が不可欠です。
FAQ
Q: コンポジションと集約の違いは何ですか?
A: コンポジションは強い所有関係で、親が消滅すると子も消滅します。集約は弱い所有関係で、子は独立して存在可能です。
A: コンポジションは強い所有関係で、親が消滅すると子も消滅します。集約は弱い所有関係で、子は独立して存在可能です。
Q: 多重度「0..」と「1..」の違いは?
A: 「0..」は0個以上で関連がなくてもよいが、「1..」は必ず1個以上の関連が必要です。
A: 「0..」は0個以上で関連がなくてもよいが、「1..」は必ず1個以上の関連が必要です。
関連キーワード: UML, クラス図、多重度、コンポジション、注文明細、顧客、注文、商品

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

