平成25年度 春期 午前 問45
開発技術
UMLに関する問題
図は“顧客が商品を注文する”を表現した UML のクラス図である。“顧客が複数の商品をまとめて注文する”を表現したクラス図はどれか。ここで,“注文明細”は一つの注文に含まれる 1 種類の商品に対応し,“注文”は複数の“注文明細”を束ねた一つの注文に対応する。
〔設問の図〕
┌────┐ 1 0..* ┌────┐ 0..* 1 ┌────┐
│ 顧客 │──────────│ 注文 │──────────│ 商品 │
└────┘ └────┘ └────┘
凡例 クラス=箱/関連=実線/コンポジション=◆の付いた実線
多重度 1 …必ず1 / 0..* …0以上 / 1..* …1以上
〔4肢の写し方〕
A 1 ── 0..* B … 関連(実線)。多重度はそれぞれの端に付いている A ◆1 ── 1..* B … コンポジション。◆が付いた側が「全体」= A が B を束ねる ◆がどちら側の箱に接しているかが4肢の分かれ目になる
- ア顧客 1 ── 0..* 注文 / 注文 ◆1 ── 1..* 注文明細 / 注文明細 0..* ── 1 商品
- イ顧客 1 ── 0..* 注文 / 注文 1..* ── ◆1 注文明細 / 注文明細 0..* ── 1 商品
- ウ顧客 1 ── 0..* 注文明細 / 注文明細 1..* ── ◆1 注文 / 注文 0..* ── 1 商品
- エ顧客 1 ── 0..* 注文明細 / 注文明細 ◆1 ── 1..* 注文 / 注文 0..* ── 1 商品
答えと解説を見る
✓ これが正解ア顧客 1 ── 0..* 注文 / 注文 ◆1 ── 1..* 注文明細 / 注文明細 0..* ── 1 商品
解説
注文が明細を束ね明細が商品に対応します。
UML のクラス図を選ぶ設問ですが、答えは設問文がほとんど日本語で書いています。図をにらむ前に、言葉を関係へ訳すのが近道です。まず、注文明細は一つの注文に含まれる一種類の商品に対応する、とあります。ここから明細と商品が一対一で結ばれます。次に、注文は複数の注文明細を束ねた一つの注文に対応する、とあります。束ねる側が注文で、束ねられる側が明細ですから、全体を表す菱形の印は注文の側に付き、一つの注文に明細が一つ以上ぶら下がる形になります。最後に、顧客が注文を出すという元の図の結び付きはそのまま引き継ぎます。この三本をすべて満たす図は一つしかありません。まとめて注文するという主題が図のどこに現れたかも言えるようにしておくと得です。元の図では注文と商品が直につながっていて、何をいくつという情報の置き場がありませんでした。間に明細という箱を挟んだことで、一回の注文の中に商品ごとの行を並べられるようになります。まとめてを表しているのは数の指定ではなく、間に置いた箱のほうです。
ほかの選択肢はなぜ違うのか
- イ顧客 1 ── 0..* 注文 / 注文…:全体を示す菱形が明細の側に付いており、明細が注文を束ねると読めてしまいます。箱の並びは正解と同じなので、印の位置だけが違う最も紛らわしい図です。
- ウ顧客 1 ── 0..* 注文明細 / …:顧客が明細に直接つながっており、客が一行ずつ発注することになってしまいます。さらに商品が注文と直結するため、一種類の商品に対応するという条件も表せません。
- エ顧客 1 ── 0..* 注文明細 / …:客が明細に直接つながる誤りに加え、束ねる側を示す菱形まで明細の側へ置かれています。土台の二か所が崩れており、三つの条件をどれも満たしません。
出典:平成25年度 春期 応用情報技術者試験 午前 問45
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)