平成23年度 特別 午前 問45
開発技術
UMLに関する問題
図は“顧客が商品を注文する”を表現した UML のクラス図である。“顧客が複数の商品をまとめて注文する”を表現したクラス図はどれか。ここで,“注文明細”は一つの注文に含まれる 1 種類の商品に対応し,“注文ヘッダ”は複数の“注文明細”を束ねた一つの注文に対応する。
〔設問の図〕原典は箱と線の絵。上に文字で写した。
┌──────┐ 1 0..* ┌──────┐ 0..* 1 ┌──────┐
│ 顧客 ├─────────┤ 注文 ├─────────┤ 商品 │
└──────┘ └──────┘ └──────┘
〔凡例〕
クラス … 箱
関連 … 実線
コンポジション … ◆ を付けた実線(◆ の側が"全体")
多重度 … 1 =必ず1 / 0..* =0以上 / 1..* =1以上
〔肢の図〕4 肢とも「顧客・注文ヘッダ・注文明細・商品」の 4 つの箱を使う。
違うのは【つなぎ方】と【◆ の向き】と【多重度】の 3 点だけ。
ア ┌──────┐ 1 0..* ┌──────────┐
│ 顧客 ├─────────┤ 注文ヘッダ │
└──────┘ └────◆─────┘ 1
│
│ 1..*
┌──────────┐ 0..* 1 ┌──────┐
│ 注文明細 ├─────────┤ 商品 │
└──────────┘ └──────┘
⇒ ◆ は注文ヘッダの側。ヘッダ 1 に対し明細 1..*
イ ┌──────┐ 1 0..* ┌──────────┐
│ 顧客 ├─────────┤ 注文ヘッダ │
└──────┘ └──────────┘ 1..*
│
◆ 1
┌──────────┐ 0..* 1 ┌──────┐
│ 注文明細 ├─────────┤ 商品 │
└──────────┘ └──────┘
⇒ ◆ は注文明細の側。明細 1 に対しヘッダ 1..*
ウ ┌──────────┐ 0..* 1 ┌──────┐
│ 注文ヘッダ ├─────────┤ 商品 │
└────◆─────┘ 1
│
│ 1..*
┌──────┐ 1 0..* ┌──────────┐
│ 顧客 ├─────────┤ 注文明細 │
└──────┘ └──────────┘
⇒ 顧客がつながる先が注文明細。商品がつながる先が注文ヘッダ
エ ┌──────────┐ 0..* 1 ┌──────┐
│ 注文ヘッダ ├─────────┤ 商品 │
└──────────┘ 1..*
│
◆ 1
┌──────┐ 1 0..* ┌──────────┐
│ 顧客 ├─────────┤ 注文明細 │
└──────┘ └──────────┘
⇒ ウ と同じつなぎ方で、◆ が注文明細の側- ア顧客─注文ヘッダ─注文明細─商品/◆=注文ヘッダ側(ヘッダ 1 対 明細 1..*)
- イ顧客─注文ヘッダ─注文明細─商品/◆=注文明細側(明細 1 対 ヘッダ 1..*)
- ウ顧客─注文明細─注文ヘッダ─商品/◆=注文ヘッダ側(ヘッダ 1 対 明細 1..*)
- エ顧客─注文明細─注文ヘッダ─商品/◆=注文明細側(明細 1 対 ヘッダ 1..*)
答えと解説を見る
✓ これが正解ア顧客─注文ヘッダ─注文明細─商品/◆=注文ヘッダ側(ヘッダ 1 対 明細 1..*)
解説
束ねる側がヘッダで、菱形はヘッダに付きます。
クラス図の問いは、設問の日本語をそのまま絵に訳すのが近道です。見るところは三つだけで、どの箱がどの箱につながるか、菱形がどちらの側に付くか、多重度がどうなっているかです。まず並びを決めます。顧客が出すのは一回の注文ですから、顧客がつながる相手は注文ヘッダです。一つの注文に含まれる一種類の商品に対応するのは注文明細だと設問が断っていますから、商品がつながる相手は注文明細です。つまり顧客、注文ヘッダ、注文明細、商品の順に並びます。次に菱形です。凡例に示されているとおり、コンポジションでは菱形が付いた側が全体で、付かない側が部品になります。設問は、注文ヘッダが複数の注文明細を束ねた一つの注文に対応すると述べていますから、束ねる側であるヘッダに菱形が付きます。最後に多重度です。ヘッダ一つに対して明細は一つ以上あり、明細が一本も無い注文はありませんから、明細の側が一以上になります。三つとも満たすのは一つだけです。なぜ元の絵では足りないのかも押さえておきます。元の絵では注文と商品が直接結ばれており、これでは一回の注文に商品が一種類しか入りません。まとめて注文することを表すには、間に箱を一つ挟んで二段に割る必要があります。
ほかの選択肢はなぜ違うのか
- イ顧客─注文ヘッダ─注文明細─商品/◆=注…:並びは合っていますが、菱形が注文明細の側に付いています。これでは明細が全体でヘッダが部品ということになり、束ねる側と束ねられる側が入れ替わってしまいます。多重度も、明細一つにヘッダが一以上という向きになっており、設問の説明と合いません。
- ウ顧客─注文明細─注文ヘッダ─商品/◆=注…:顧客が注文明細に、商品が注文ヘッダに結ばれています。顧客は明細を一行ずつ注文するのではありませんし、一種類の商品に対応するのは明細の側ですから、結び先が二か所とも入れ替わっています。
- エ顧客─注文明細─注文ヘッダ─商品/◆=注…:結び先が入れ替わっているうえに、菱形も注文明細の側に付いています。誤りが二つ重なった形で、全体と部品の向きも、どの箱が商品に対応するかも合っていません。
出典:平成23年度 特別 応用情報技術者試験 午前 問45(改変:原典の図表をテキストに書き起こした)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)