平成29年度 秋期 午前Ⅱ 問3
システム要件定義・ソフトウェア要件定義
クラス図に関する問題
図は“顧客が商品を注文する”を表現したUMLのクラス図である。“顧客が複数の商品をまとめて注文する”を表現したクラス図はどれか。ここで,注文明細は注文に含まれる一つの商品に対応し,注文は一つ以上の注文明細を束ねたもので,一つの注文に対応する。
クラス図:
[顧客]1 ―――― 0..*[注文]0..* ―――― 1[商品]
凡例:
- クラス:四角の箱([ ]で表す)
- 関連:線(――)
- コンポジション:◆のついた線(◆の側が全体)
- 多重度:1 は「必ず1」,0..* は「0以上」,1..* は「1以上」
- ア(原典は図。[顧客]1 ―― 0..*[注文]/[注文]◆1 ―― 1..*[注文明細](◆は注文側)/[注文明細]0..* ―― 1[商品])
- イ(原典は図。[顧客]1 ―― 0..*[注文]/[注文]1..* ―― 1◆[注文明細](◆は注文明細側)/[注文明細]0..* ―― 1[商品])
- ウ(原典は図。[注文]0..* ―― 1[商品]/[注文]◆1 ―― 1..*[注文明細](◆は注文側)/[顧客]1 ―― 0..*[注文明細])
- エ(原典は図。[注文]0..* ―― 1[商品]/[注文]1..* ―― 1◆[注文明細](◆は注文明細側)/[顧客]1 ―― 0..*[注文明細])
答えと解説を見る
✓ これが正解ア(原典は図。[顧客]1 ―― 0..*[注文]/[注文]◆1 ―― 1..*[注文明細](◆は注文側)/[注文明細]0..* ―― 1[商品])
解説
注文が注文明細を束ねるコンポジションで、明細が商品につながる図です。
文にある条件を一つずつクラス図に当てはめます。注文明細は注文に含まれる一つの商品に対応するので、注文明細と商品の間は、注文明細側 0..*、商品側 1 の関連になります。注文は一つ以上の注文明細を束ね、各注文明細は一つの注文に対応するので、全体である注文の側に◆を付けたコンポジションとし、注文側 1、注文明細側 1..* とします。顧客は元の図どおり注文と 1 対 0..* で結ばれます。この三つを満たすのは、顧客と注文、注文と注文明細(◆は注文側)、注文明細と商品とつながる図です。見分けるときは、◆が全体の側に付くことと、全体の側の多重度が 1 になることの二点で向きを確かめます。
ほかの選択肢はなぜ違うのか
- イ(原典は図。[顧客]1 ―― 0..*[…:顧客、注文、商品のつながり方は条件どおりですが、◆が注文明細の側に付き、注文側の多重度が 1..* になっています。これでは注文明細が全体となって複数の注文を束ねる形になり、注文が明細を束ねるという条件と向きが逆です。
- ウ(原典は図。[注文]0..* ―― 1[…:注文と注文明細の◆の向きは合っていますが、顧客が注文ではなく注文明細と結ばれ、商品が明細ではなく注文と結ばれています。顧客は注文を出し、商品は明細ごとに対応するという条件と、つなぐ相手が入れ替わっています。
- エ(原典は図。[注文]0..* ―― 1[…:顧客が注文明細と結ばれ、商品が注文と結ばれている点で、つなぐ相手が条件と合いません。そのうえ◆が注文明細の側に付いているので、全体と部分の向きも逆になっており、二重に条件から外れた図です。
出典:平成29年度 秋期 システムアーキテクト試験 午前Ⅱ 問3
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)