応用情報技術者 2014年 春期 午前2 問26
問題文
UMLを用いて表した部門と社員の関係を表すデータモデルの説明のうち、適切なものはどれか。

選択肢
ア:社員が1人も所属していない部門は登録できない。
イ:社員は複数の部門に所属することができる。
ウ:どの部門にも所属しない社員は登録できない。(正解)
エ:一つの部門に複数の社員は所属できない。
🔒 解説は解答すると表示されます
多重度とナビゲーション【午前2解説】
正解の理由
図では、部門側の結合点に「1」、社員側の結合点に「」と記されています。UMLの多重度は「ある側の1インスタンスに対して、反対側にいくつのインスタンスが対応できるか」を示します。つまり部門側の「1」は「各社員(反対側のインスタンス)が所属できる部門はちょうど1つである」ことを表し、社員側の「」は「各部門には0個以上の社員が対応し得る」ことを表します。したがって、社員がどの部門にも所属しない(所属数が0である)ことは許容されず、選択肢の ウ が正しいです。
なお、線上の黒塗り三角矢印は関連の向き(ナビゲーション)を示すに過ぎず、多重度の値や必須性を変えるものではありません。
解法ステップ
- 各結合点にある多重度(数や「」)を確認する。図は部門側が「1」、社員側が「」。
- 多重度の意味を思い出す:「その位置に書かれたクラスのインスタンスが、反対側の1インスタンスに対して何個あり得るか」を示す。
- 具体的に読む:
- 部門側「1」→ 1(部門) = 1つの部門(反対側の社員1人に対して)→ つまり各社員はちょうど1つの部門に所属。
- 社員側「*」→ 1(社員)に対して0個以上の社員(反対側の部門に対して)→ つまり各部門は多数の社員を持てる(0も許容)。
- 選択肢と照合して矛盾がないものを選ぶ。
選択肢別の誤答解説
- ア: 「社員が1人も所属していない部門は登録できない。」
- 誤り。社員側の多重度「」は通常 0.. を意味するため、社員がゼロでも部門は成立する(0人でも登録可能)。
- イ: 「社員は複数の部門に所属することができる。」
- 誤り。社員が複数部門に所属可能にするには、部門側の多重度(部門の結合点に記された値)が '*' でなければなりません。図では部門側が「1」なので、社員は複数の部門に所属できません。
- ウ: 「どの部門にも所属しない社員は登録できない。」
- 正しい。部門側に「1」があるため、各社員は少なくとも1つの部門に所属する必要がある(1..1)。
- エ: 「一つの部門に複数の社員は所属できない。」
- 誤り。社員側が「」なので、一つの部門に複数の社員が所属することは可能である(0.. または1..* のいずれかだが、図では 0 を許容することが一般的)。
よくある誤解
- 多重度が「どちらの側」を指すか混同する:多重度は「その記号が書かれた側のクラスが、反対側の1インスタンスに対して何個あり得るか」を示す点を忘れやすい。
- '' を「必ず1つ以上」と誤解する:デフォルトの '' は 0..*(ゼロを含む)と読むのが一般的で、必須とは限らない。
- 矢印(三角)が継承や合成を意味すると誤認する:図上の矢印は関連の向き(ナビゲーション)を示す場合がある。継承は通常図形や位置が異なる(空の三角形で示す等)。
補足コラム
- 多重度の表記例:
- 0..1:ゼロか1つ
- 1:必ず1つ(1..1)
- 0..* または *:ゼロ以上(無制限)
- 1..*:少なくとも1つ以上
- ナビゲーション矢印は「どちらの方向から参照するか」を示すだけで、関係の必須性(最小値)や最大値には直接影響しません。
- 実務では要件定義時に最小値を明確に書く(0か1か)ことで、DBのNULL許容や外部キー必須性に直結します。
FAQ
Q: 多重度が「1」と書かれているとき、必ずその関係が必須になるのですか?
A: はい。「1」はその側の個数が正確に1つであることを示します。反対側のインスタンスに対して少なくとも1つ(かつ最大1つ)対応します。
A: はい。「1」はその側の個数が正確に1つであることを示します。反対側のインスタンスに対して少なくとも1つ(かつ最大1つ)対応します。
Q: '' は常に 0.. ですか?
A: UMLでは通常 '' は 0.. と同義に扱います。必ず1以上にする場合は明示的に 1..* と書きます。
A: UMLでは通常 '' は 0.. と同義に扱います。必ず1以上にする場合は明示的に 1..* と書きます。
Q: 図の矢印は継承ではないのですか?
A: 問題のように関連線の途中に付いた三角矢印はナビゲーション(関連の向き)を示すケースが多く、継承(generalization)はクラス同士を接続する別形式の矢印(主に空の三角形)で表されます。図の文脈で判断してください。
A: 問題のように関連線の途中に付いた三角矢印はナビゲーション(関連の向き)を示すケースが多く、継承(generalization)はクラス同士を接続する別形式の矢印(主に空の三角形)で表されます。図の文脈で判断してください。
関連キーワード: 多重度、クラス図、ナビゲーション、関連(association)、UML

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

