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

選択肢
ア:社員が1人も所属していない部門は登録できない。
イ:社員は複数の部門に所属することができる。
ウ:どの部門にも所属しない社員は登録できない。(正解)
エ:一つの部門に複数の社員は所属できない。
🔒 解説は解答すると表示されます
UMLの多重度とナビゲーション【午前2解説】
正解の理由
図では、部門側の結合点近くに「1」、社員側の結合点近くに「*」が付され、線の下側中央に黒塗りの三角矢印があり矢印の先は部門側を指しています。この表記は「社員が(ナビゲーションにより)部門に所属する」という関係を示し、多重度の意味から一人の社員はちょうど1つの部門に所属しなければならないことを表します。したがって、どの部門にも所属しない社員(部門に属さない社員)は許容されないため、選択肢ウが正しいです。
具体的に言うと、部門側の「1」は各社員がちょうど1つの部門に所属することを示し、社員側の「*」は1つの部門に対して0個以上の社員が対応し得る(部門は多数の社員を持てる)ことを示します。
解法ステップ
- 図の各要素を確認する(クラス名、線、矢印、多重度)。
- 多重度の読み方を整理する:多重度はその近くにあるクラス側のインスタンスが、反対側のクラスの「1インスタンスに対して」いくつ対応し得るかを示す。
- 矢印(ナビゲーション)と役割名から関係の向きを確認する(誰が誰に関連しているか)。
- 各選択肢と図の意味を照合して矛盾がないものを選ぶ。
選択肢別の誤答解説
- ア: 社員が1人も所属していない部門は登録できない。
誤り。社員側の「*」は0個以上を許すため、部門は社員が0人の状態でも存在可能です(部門に社員がいないことは許容される)。 - イ: 社員は複数の部門に所属することができる。
誤り。部門側に「1」があるため、1人の社員が所属できる部門数はちょうど1です。複数所属は許されません。 - ウ: どの部門にも所属しない社員は登録できない。
正しい。部門側の「1」により、社員は必ず1つの部門に所属する必要があります(0は許されない)。 - エ: 一つの部門に複数の社員は所属できない。
誤り。一つの部門に対する社員側の多重度が「*」であるため、複数(あるいはゼロ)の社員が所属できます。
よくある誤解
- 多重度を読み間違える(左右を取り違える)
→ 多重度は「その数値が書かれている側のクラスが、反対側の1インスタンスに対していくつ対応するか」を示します。読む向きに注意してください。 - 「」は必ず「1以上」だと思う誤解
→ UMLでは「」は通常 0..(ゼロ以上)を意味します。必要に応じて明示的に 1.. と書かれる場合は「少なくとも1」を意味します。 - 矢印(黒い三角)を見て「継承(一般化)」と混同する
→ 継承(一般化)は白抜きの三角矢印(空の三角)で表すことが多く、図の黒い三角はナビゲーション方向や役割名の指示であることがあるため、図の文脈で判断する必要があります。
(重要な読み替え例)
- 社員側の「*」は、1つの部門に対して0個以上の社員が対応し得る(部門は多数の社員を持てる)。
- 部門側の「1」は各社員がちょうど1つの部門に所属することを示す。
補足コラム
UMLクラス図でよく見かける記号の意味を簡潔に整理します。
- 多重度(例:0..1、1、、1..)は関連の端に書かれ、反対側のインスタンス1つに対する関係数を示す。
- ナビゲーション矢印はどちらからどちらへ参照できるか(関係の方向)を示す。役割名(今回の「所属する」)と合わせて「誰が誰を参照するか」を明確にする。
- 集約は空の菱形、合成(コンポジション)は塗りつぶしの菱形、一般化(継承)は空の三角が使われる。矢印の形状と位置に注意して意味を読み分けることが重要です。
FAQ
Q1: 「*」は必ず0を含むのですか?
A1: 通常は0..を意味します。ただし設計者が「1..」と明示した場合は少なくとも1が必要です。図での表記を確認してください。
A1: 通常は0..を意味します。ただし設計者が「1..」と明示した場合は少なくとも1が必要です。図での表記を確認してください。
Q2: 矢印がなくても多重度だけで関係は読み取れますか?
A2: 多重度だけで所属の必須/任意や多重性は分かりますが、ナビゲーション(参照方向)や役割名は矢印やラベルで示されるため、どちらのオブジェクトがどちらを参照するかは矢印があると明確になります。
A2: 多重度だけで所属の必須/任意や多重性は分かりますが、ナビゲーション(参照方向)や役割名は矢印やラベルで示されるため、どちらのオブジェクトがどちらを参照するかは矢印があると明確になります。
Q3: 社員が副所属で複数部門に属せるようにしたい場合はどう表現しますか?
A3: 部門側の多重度を「」のままにして、部門側の「1」を社員側に「」にするなど、両端の多重度を変更して「社員側の部門多重度」を「」や「0..」にする(図の該当位置に書く)ことで表現します。
A3: 部門側の多重度を「」のままにして、部門側の「1」を社員側に「」にするなど、両端の多重度を変更して「社員側の部門多重度」を「」や「0..」にする(図の該当位置に書く)ことで表現します。
関連キーワード: UML、多重度、ナビゲーション、アソシエーション、クラス図、所属関係

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

