社員と年の対応関係をUMLのクラス図で記述する。
二つのクラス間の関連が次の条件を満たす場合,a,bに入れる多重度の適切な組合せはどれか。
ここで,“年”クラスのインスタンスは毎年存在する。
〔条件〕
(1) 全ての社員は入社年を特定できる。
(2) 年によっては社員が入社しないこともある。
(図:社員クラスと年クラスが「入社年」の関連でつながり,社員側にa,年側にbの多重度が付与されているUMLクラス図。)
正答2
解説
正解は2です。
この問題は、UMLのクラス図で、関連の両端に付ける多重度を条件から決めるものです。
図では、左の「社員」クラスと右の「年」クラスが1本の線で結ばれ、年の側に関連名「入社年」が書かれています。
社員の側の多重度がa、年の側の多重度がbです。
多重度は、相手側のインスタンス1つに対して、その端のクラスのインスタンスがいくつ対応するかを表します。
【a、bの検討】
b:社員1人から見て、対応する年(入社年)の数を表します。
条件(1)より全ての社員は入社年を特定できるので、ちょうど1つの「1」です。
a:年1つから見て、対応する社員の数を表します。
条件(2)より社員が入社しない年もあり、多い年には何人も入社するので「0..*」です。
【選択肢別解説】
1:× bを0..1とすると、入社年をもたない社員がいてもよいことになります。
条件(1)の「全ての社員は入社年を特定できる」に反します。
2:○ a:0..*、b:1で、上の検討と一致します。
3:× aを1..*とすると、どの年にも必ず1人以上の社員が入社することになり、条件(2)に反します。
bの0..1も条件(1)に反します。
4:× bの1は正しいですが、aの1..*は「毎年必ず誰かが入社する」という意味になり、条件(2)に反します。
【ポイント】
多重度は「相手1つに対して自分がいくつか」を、自分の側の端に書きます。
「0..*」は0以上、「1..*」は1以上、「0..1」は0か1、「1」はちょうど1つを表します。