基本情報技術者 2011年 秋期 午前(科目A) 問33
問題文
UMLを用いて表した図のデータモデルの解釈のうち、適切なものはどれか。

選択肢
ア:1回の納品に対して分割請求できる。
イ:顧客への請求を支払で相殺できる。
ウ:請求処理は納品と同時に実行される。
エ:複数回の納品分をまとめて請求できる。(正解)
UMLの多重度解釈問題【午前2 解説】
要点まとめ
- 結論:図は複数回の納品をまとめて1回の請求にできることを示しており、正解はエです。
- 根拠:請求側寄りの多重度が0..1で納品側寄りが1..*のため、各請求は1件以上の納品を含み各納品は0か1の請求に属します。
- 差がつくポイント:多重度は「相手側の1インスタンスに対し自分側はいくつあるか」で読む点を確実に理解することが合格ラインです。
正解の理由
正解は エ(複数回の納品分をまとめて請求できる)です。
理由は多重度の読み方にあります。UMLの関連線上で、それぞれの多重度は「線の反対側にあるインスタンス1つにつき、ここに何個対応するか」を示します。今回の図では
理由は多重度の読み方にあります。UMLの関連線上で、それぞれの多重度は「線の反対側にあるインスタンス1つにつき、ここに何個対応するか」を示します。今回の図では
- 「納品」側に近いラベルが
1..*
→ 1つの「請求」は少なくとも1件以上の「納品」を持つ(納品を複数含められる)。 - 「請求」側に近いラベルが
0..1
→ 1つの「納品」は請求を持たない場合もあるが、あっても最大1つの請求に属する。
従って、複数の納品を1つの請求にまとめる(エ)が図の意味と一致します。
よくある誤解
- 「多重度をその位置のクラス自身の個数だと読む」:多くの受験者は多重度をそのラベルの近くにあるクラスの個数と誤解しますが、実際は反対側のインスタンスに対する個数です。
- 「時系列的な処理順や同時実行を示す」:関連線と多重度は構造(関係)を示すもので、処理のタイミングや実行順序は示しません。
- 「0..1を『必ず1つあるが最大1つ』と誤解」:0..1は『ない場合もある(オプショナル)、あっても最大1つ』を意味します。
解法ステップ
- クラス名を確認する(この場合「納品」と「請求」)。
- 各多重度ラベルがどちら側に近いかを確認する(図の説明通り)。
- 「ラベルは反対側のインスタンスに対する個数」を読み替える:反対側の1つにつきここは何個か。
- 得られた関係を自然言語に置き換え、選択肢と照合する。
選択肢別の誤答解説
- ア: 「1回の納品に対して分割請求できる。」
誤り。分割請求(1つの納品が複数の請求に対応)なら納品側から見て請求側の多重度が0..*
や1..*
になるはずだが、図は0..1
で最大1つしか対応しない。 - イ: 「顧客への請求を支払で相殺できる。」
誤り。支払との相殺は会計や取引フローの概念であり、今回の関連線や多重度からは支払関係や相殺の意味は読み取れない。 - ウ: 「請求処理は納品と同時に実行される。」
誤り。UMLの多重度は構造(関係の数)を示すだけで、処理のタイミングやトランザクション順序は示さない。 - エ: 「複数回の納品分をまとめて請求できる。」
正しい。請求1件が1件以上の納品を持てる(1..*)、納品は最大1件の請求に属する(0..1)ことをそのまま意味する。
補足コラム
- 逆向きに読む練習を常に行う:例えば「請求側のラベルが2..*」なら「1つの納品に対して請求が2件以上可能」と読めます。試験では読み間違いが致命的です。
- 集約/合成の記号がない単純な「関連(association)」なので、関係は弱結合的です。もし請求が納品を厳密に所有するなら合成(黒丸)などで表すこともあります。
- 分割請求や相殺といったビジネスルールは、必要なら関連に属性や交差エンティティ(請求明細、支払記録)を設けてモデル化します。
FAQ
Q1: 0..1 と 1..* を逆に読んでしまうのですが、見分けのコツは?
A1: ラベルが近い側ではなく、反対側の「1インスタンス」に対してそのラベルの個数がいくつかを口に出して読むと正しく把握できます(例:「1つの請求に対して納品は1つ以上ある」)。
A1: ラベルが近い側ではなく、反対側の「1インスタンス」に対してそのラベルの個数がいくつかを口に出して読むと正しく把握できます(例:「1つの請求に対して納品は1つ以上ある」)。
Q2: 多重度が両側とも
A2: 互いに必ず1対1の対応関係があることを示します(1対1対応)。
1の場合は何を意味しますか?
A2: 互いに必ず1対1の対応関係があることを示します(1対1対応)。
Q3: 分割請求(1納品→複数請求)を表現したい場合はどう書く?
A3: 納品側寄りのラベルを
A3: 納品側寄りのラベルを
0..*や
1..*のようにして、1つの納品に対して請求が複数存在し得ることを示します。明確化のため関連名や中間の請求明細クラスを設けることも有効です。
関連キーワード: UML、多重度、関連(Association)、1対多、0..1、1..*、クラス図、納品、請求、集約、分割請求、オプショナル関連

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

