応用情報技術者 2015年 秋期 午前2 問27
問題文
社員と年の対応関係を UML のクラス図で記述する。二つのクラス間の関連が次の条件を満たす場合、a,Bに入る多重度の適切な組合せはどれか。ここで、年クラスのインスタンスは毎年存在する。
〔条件〕
(1) 全ての社員は入社年を特定できる。
(2)年によっては社員が入社しないこともある。


選択肢
ア:
イ:(正解)
ウ:
エ:
🔒 解説は解答すると表示されます
UMLの多重度【午前2解説】
正解の理由
図の多重度は、ある側のインスタンスが反対側のインスタンスと「1つのときに」何個対応できるかを示します。左側の位置にある a は「ある年(Year)に対応する社員の数」を表し、右側の b は「ある社員が対応する年の数」を表します。
条件(1)「全ての社員は入社年を特定できる」は、各社員が必ずちょうど1つの年に結び付くことを意味するので、年側の多重度 b は (必ず1つ)です。一方、条件(2)「年によっては社員が入社しないこともある」かつ「年クラスのインスタンスは毎年存在する」により、ある年に社員が0人であることが許されるため、年に対応する社員数 a は (0個もあり得るし複数もあり得る)になります。したがって選択肢イ(a = , b = )が正しい組合せです。
条件(1)「全ての社員は入社年を特定できる」は、各社員が必ずちょうど1つの年に結び付くことを意味するので、年側の多重度 b は (必ず1つ)です。一方、条件(2)「年によっては社員が入社しないこともある」かつ「年クラスのインスタンスは毎年存在する」により、ある年に社員が0人であることが許されるため、年に対応する社員数 a は (0個もあり得るし複数もあり得る)になります。したがって選択肢イ(a = , b = )が正しい組合せです。
解法ステップ
- 多重度表示の向きを確認する(端に書かれた多重度は「その端にあるクラスのインスタンスが、反対側の1インスタンスに対していくつ対応するか」を示す)。
- 条件(1)を読み、各社員が必ず1つの入社年を持つことから b = と決める(必須かつ複数不可)。
- 条件(2)と「年クラスのインスタンスは毎年存在する」を読み、ある年に社員がいない可能性があるので a = と決める(0も複数も可)。
- 選択肢の中から a,b がそれぞれ一致するものを選ぶ(イ)。
選択肢別の誤答解説
-
ア(a = , b = )
b が だと「社員は入社年を持たない場合がある(0個)」ことを許すため、条件(1)に反します。a は正しいが b が不適切です。 -
イ(a = , b = )
a は「ある年に0人〜複数人の社員」が対応可能で、条件(2)と年インスタンスの毎年存在と整合します。b は「各社員は必ず1つの入社年を持つ」ことを満たすため正解です。 -
ウ(a = , b = )
a = は「各年に最低1人以上の社員がいる」ことを意味しますが、条件(2)に反してしまいます。さらに b = も条件(1)と矛盾します。 -
エ(a = , b = )
b は正しいものの、a = は条件(2)と矛盾します(年によっては社員が入社しないことがあるため、年に0人というケースを排除できません)。
よくある誤解
-
多重度の向きを取り違える
多重度は「その端にあるクラスのインスタンスが相手の1インスタンスに対していくつ対応できるか」を表すため、端を見間違えると逆の解釈をしてしまいます。 -
1..1 と 1 の意味の混同
は「必ず1つ(正確に1つ)」を意味します。単に「1」とも書けますが、表記の意味は同じです。以前の説明のように「1つ以上」と混ぜて表現すると誤解を招きます(「1つ以上」は )。 -
「年クラスのインスタンスは毎年存在する」を b に適用してしまう
この情報は「年が存在してもその年に入社がないことがある」を許容するため、a を にする根拠にはなりますが、社員側の多重度 b が必須かどうかは条件(1)によって判断します。順序立てて原因を整理することが重要です。
補足コラム
-
UML表記の簡潔さ
は単に1と表記されることが多く、 は0..*または*(文脈による)と書かれます。試験ではどちらの表記でも意味が通れば正しく扱われます。 -
データベース設計との対応例(概念的)
この関係は「年(Year) ← 一対多 → 社員(Employee)」で、社員表に入社年を示す列が必須の外部キーになります。例:CREATE TABLE Year ( year_id INT PRIMARY KEY ); CREATE TABLE Employee ( emp_id INT PRIMARY KEY, hire_year INT NOT NULL REFERENCES Year(year_id) -- NOT NULL が b = 1 を表す );
FAQ
Q1: 「1..1」は「1」で書いてよいですか?
A1: はい。意味は同じで「必ず1つ」を示します。表記の差は許容されます。
A1: はい。意味は同じで「必ず1つ」を示します。表記の差は許容されます。
Q2: 「年クラスのインスタンスは毎年存在する」はどう影響しますか?
A2: 年インスタンスが常に存在することで、ある年に社員が1人もいない(0人)ケースが現実的にあり得るため、年側から見た社員数は が許容されます。ただし社員側が年を必ず持つかどうかは別条件(今回の条件(1))で判断します。
A2: 年インスタンスが常に存在することで、ある年に社員が1人もいない(0人)ケースが現実的にあり得るため、年側から見た社員数は が許容されます。ただし社員側が年を必ず持つかどうかは別条件(今回の条件(1))で判断します。
Q3: 社員が再入社や複数回の入社がある場合は?
A3: その場合は「社員が複数の入社年を持てる」ことを明示する必要があり、b が や になる可能性があります。問題文の前提に従って判断してください。
A3: その場合は「社員が複数の入社年を持てる」ことを明示する必要があり、b が や になる可能性があります。問題文の前提に従って判断してください。
関連キーワード: UML、多重度、クラス図、関連、入社年、一対多、必須関連

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

