応用情報技術者 2011年 春期 午前2 問45
問題文
図は “顧客が商品を注文する” を表現した UMLのクラス図である。“顧客が複数の商品をまとめて注文する” を表現したクラス図はどれか。ここで、“注文明細” は一つの注文に含まれる1種類の商品に対応し、“注文ヘッダ” は複数の “注文明細” を束ねた一つの注文に対応する。


選択肢
ア:(正解)
イ:
ウ:
エ:
顧客が複数の商品をまとめて注文する を表現したクラス図【午前2 解説】
要点まとめ
- 結論:正解はアで、注文ヘッダが複数の注文明細を束ねる構造を正しく表現しています。
- 根拠:注文ヘッダと注文明細の間にコンポジション(黒塗り菱形)があり、1つの注文ヘッダが1つ以上の注文明細を持つ多重度「1..*」が設定されています。
- 差がつくポイント:注文と商品が1対1ではなく、注文明細を介して多対多の関係を正しく表現できているかを見極めることが重要です。
正解の理由
選択肢アは「注文ヘッダ」と「注文明細」の間にコンポジションを用い、1つの注文ヘッダが複数の注文明細を持つことを示しています。注文明細は1種類の商品に対応し、注文明細と商品は「0..」対「1」の関連で表現されているため、複数の商品をまとめて注文する構造を正確に表しています。顧客と注文ヘッダの関連も「1」対「0..」で、顧客が複数の注文を持つことを示しています。
よくある誤解
注文と商品を直接結びつけて多対多の関係と考えがちですが、実際は注文明細を介して関係を表現します。コンポジションの意味を誤解し、単なる関連と混同することも多いです。
解法ステップ
- 問題文の「注文ヘッダ」と「注文明細」の役割を理解する。
- 注文明細が「1種類の商品」に対応し、注文ヘッダが複数の注文明細を束ねることを確認。
- UMLのコンポジション(黒塗り菱形)が「部分-全体」の関係を示すことを把握。
- 各選択肢の多重度と関連の種類を比較し、注文ヘッダと注文明細の関係が「1対1..*」であるかを確認。
- 顧客と注文ヘッダの関連が「1対0..*」であることもチェック。
- 注文明細と商品の関連が「0..*対1」であることを確認し、複数の商品をまとめて注文できる構造か判断。
選択肢別の誤答解説
- イ:コンポジションの位置が不適切で、関連の多重度ラベルの配置が曖昧。注文ヘッダと注文明細の関係が正確に表現されていません。
- ウ:注文明細と顧客の関連があり、注文ヘッダと顧客の関連が欠落。注文の構造として不自然です。
- エ:注文明細と顧客が直接関連し、注文ヘッダと顧客の関連がないため、注文のまとまりを表現できていません。
補足コラム
UMLのコンポジションは「全体-部分」の強い所有関係を示し、部分は全体に属していなければ存在できません。注文ヘッダと注文明細の関係はまさにこれに該当し、注文ヘッダが削除されると注文明細も存在できなくなります。これにより、注文のまとまりを正確に表現できます。
FAQ
Q: 注文明細と商品はなぜ「0..」対「1」の関係なのですか?
A: 注文明細は1種類の商品に対応しますが、1つの商品は複数の注文明細に含まれる可能性があるため、多重度は「0..」対「1」となります。
A: 注文明細は1種類の商品に対応しますが、1つの商品は複数の注文明細に含まれる可能性があるため、多重度は「0..」対「1」となります。
Q: コンポジションと集約の違いは何ですか?
A: コンポジションは部分が全体に強く依存し、全体が消えると部分も消えます。集約はより弱い所有関係で、部分は全体に依存しません。
A: コンポジションは部分が全体に強く依存し、全体が消えると部分も消えます。集約はより弱い所有関係で、部分は全体に依存しません。
関連キーワード: UML, クラス図、コンポジション、多重度、注文明細、注文ヘッダ、顧客、商品、オブジェクト指向設計

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

