戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

応用情報技術者 2017年 春期 午前226


問題文

データモデルを解釈してオブジェクト図を作成した。解釈の誤りを適切に指摘した記述はどれか。ここで、モデルの表記には UML を用い、オブジェクト図の一部の属性の表示は省略した。
応用情報技術者 2017年 春期 午前2 問26の問題画像

選択肢

123456:注文” が複数の商品にリンクしているのは、誤りである。(正解)
2ドア冷蔵庫:商品” が複数の注文にリンクしているのは、誤りである。
A商店:顧客” が複数の注文にリンクしているのは、誤りである。
ドラム式洗濯機:商品” がどの注文にもリンクしていないのは、誤りである。

🔒 解説は解答すると表示されます

UMLカーディナリティ【午前2解説】

正解の理由

設問のクラス(データモデル)では、注文—商品間の多重度が「注文側 = *、商品側 = 1」と示されています。UMLの多重度は「あるクラスの1インスタンスに対して、反対側クラスの何個のインスタンスが関係しうるか」を示します。したがって「各注文(注文インスタンス)はちょうど1つの商品に対応する」が意味されます。オブジェクト図で「123456:注文」が2つの異なる商品にリンクしているのは、この制約に違反します。以上より、選択肢の指摘(123456が複数の商品にリンクしているのは誤りである)は正しい指摘です。

解法ステップ

  1. クラス図の多重度を確認する。多重度は各端に書かれており、「その端にいるオブジェクトが、相手側の1インスタンスに対していくつ関連できるか」を表す。
  2. 今回は「注文側 = *、商品側 = 1」を読み取る:
    • 注文側の多重度「*」は「1つの商品に対して複数の注文があり得る」ことを意味する(商品に対して多数の注文が紐づけ可能)。
    • 商品側の「1」は「1つの注文に対して、ちょうど1つの商品の参照しか許されない」ことを意味する。
  3. オブジェクト図の各注文インスタンスが「ちょうど1つの」商品インスタンスにしかリンクしていないか確認する。
  4. 違反(注文が複数の商品にリンクしている)を見つけたらその選択肢を正とする。

選択肢別の誤答解説

  • 選択肢:正しい。前述の多重度解釈により、注文インスタンスは商品側に対してちょうど1つしかリンクできない。図中の「123456:注文」が2つの異なる商品に接続されているため、モデル違反であり誤りの指摘は妥当である。
  • イ:誤り。選択肢は「2ドア冷蔵庫:商品 が複数の注文にリンクしているのは誤りである」と述べるが、クラス図では商品側の多重度が1、注文側が*であるため、1つの商品が複数の注文にリンクすることは許容される(むしろ期待される)ので、この指摘は誤りである。
  • ウ:誤り。顧客—注文間の多重度は「顧客側 = 1、注文側 = *」となっており、1人の顧客が複数の注文を持つことは許される。したがって「A商店:顧客 が複数の注文にリンクしているのは誤りである」という主張は間違いである。
  • エ:誤り。選択肢は「ドラム式洗濯機:商品 がどの注文にもリンクしていないのは誤りである」としているが、多重度(注文側の*、商品側の1)は「各注文は1つの商品の参照を持つ」ことを定めるのみで、全ての商品が必ず少なくとも1つの注文にリンクされなければならないとは規定しない。オブジェクト図に未使用の(リンクのない)商品オブジェクトが存在すること自体は多重度違反ではないため、この選択肢は誤りである。

よくある誤解

  • 多重度の向き(どちらの端の数字か)を逆に読むミス:多重度は各端ごとに「相手側に対する個数」を示す点を忘れない。
  • 「1」を「最大1」と誤解するケース:「1」は「ちょうど1」を意味する(範囲表現で 1 または 1..1)。一方で「0..1」や「*」とは意味が異なる。
  • オブジェクト図は「すべてのクラス要素がリンクされているべき」と誤認する:インスタンス図において、あるオブジェクトがリンクを持たないことは、クラス図の制約により禁止されない限り問題ではない。

補足コラム

  • UML多重度の基本解釈(端Aの多重度 m が示すもの):「Aの1インスタンスに対して、反対側Bのインスタンスがmの範囲だけ関連しうる」。例えば「A側 1、B側 *」なら「Aに対してBが複数」。
  • オブジェクト図はクラス図の制約(多重度)を順守する必要がある。チェック項目は「各オブジェクトのリンク数がクラス図の多重度の範囲内にあるか」。
  • 注文数(属性)は「同一注文で複数種類の商品を扱う」ことを示さない。異なる商品の複数参照が必要ならクラス設計で「注文—注文行(OrderLine)—商品」のように中間エンティティで表現するのが一般的(1注文に複数明細を許す場合)。

FAQ

Q. 商品がどの注文にもリンクしていないと必ず誤りですか?
A. いいえ。クラス図に「商品側が0..*ではなく必ず1以上」といった制約(例:商品側が1であるが「1」は注文に対する制約なので、商品が未使用でも直接禁止されない場合が多い)やクラス間の他の制約がない限り、リンクがない商品オブジェクト自体は許容されます。
Q. 注文が複数商品を持てる設計にしたい場合はどうするべきですか?
A. 一般的には「注文」から直接「商品」へ多対多または1対多を表現するのではなく、注文行(OrderLine)などの中間エンティティを設け、注文1件が複数の注文行を持ち、各行が1つの商品を参照する形にする(注文 — 1..* — 注文行 — 1 — 商品)。

関連キーワード: UML、オブジェクト図、カーディナリティ、アソシエーション、インスタンス図、多重度、データモデリング
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

応用情報技術者
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について