システムアーキテクト 2014年 午前2 問21
問題文
階層構造をもつ組織と社員の所属を表すUMLのクラス図のうち、“社員は組織階層中のどの組織にも所属できるが、兼務はしない”とするものはどれか。

選択肢
ア:
イ:
ウ:
エ:(正解)
🔒 解説は解答すると表示されます
組織階層の所属関係【午前2解説】
正解の理由
選択肢 エ は、組織の階層構造(自己関連で「0..1 上位/* 下位」を表す)と、社員と「組織」を結ぶ関連の多重度(組織側が1、社員側が*)の要件を満たしています。ポイントは次の2点です。
- 階層を表す自己関連(0..1/*)により、任意の深さで親子(上位/下位)が作れるため「組織階層中のどの組織」を表現できること。
- 社員と組織の関連で、組織側が多重度「1」、社員側が「*」になっているため、「1人の社員はちょうど1つの組織に所属(兼務しない)/1つの組織には複数の社員がいる」と明確に表現できること。
上記の両条件を同時に満たしているのが エ です。
(補足説明)
UMLの多重度は「その端に書かれた数は、反対側の1インスタンスがその端のクラスをいくつ持てるか」を示します。したがって「組織側に1」と書かれていれば「1人の社員が所属できる組織は1つだけ(兼務しない)」と読み取れます。
解法ステップ
- 問題文の意味を確認する
- 「階層中のどの組織にも所属できる」=所属対象が階層中の任意のノードである必要がある。
- 「兼務はしない」=社員は所属する組織を1つだけ持つ(多重度=1)。
- 図の構成要素をチェックする
- 階層の表現が自己関連(上位/下位)で表現されているか。
- 社員と組織の関連がどのクラス(組織全体か、末端のみか)に結ばれているか。
- 各端の多重度の向き(どちら側が1か)を確認する。
- 条件に合致する図を選ぶ
- 所属先が階層中の任意ノードを表せること(自己関連で階層を表している、または関連が基底クラスに付いている)。
- 社員側が兼務しないことが、多重度の向きで「組織側が1」になっていること。
- 最終判断:両方を満たす選択肢を選ぶ(本問では エ)。
選択肢別の誤答解説
- ア:社員と末端組織の関連が示されている点で、社員は「末端組織」にしか所属できない解釈になりやすく、問題文の「階層中のどの組織にも(=内部ノードを含む)」という要件を満たさない可能性がある。また図中の多重度の向きが要件と整合しない場合がある。
- イ:組織と社員の関連は存在するが、多重度の向きが逆(組織側が*、社員側が1)になっているため、「1つの組織が1人の社員しか持てない」と読め、兼務禁止の要件と不整合。
- ウ:組織—社員の関連で多重度が組織側*・社員側1になっており、社員が複数組織を持てる(兼務を許す)読みになるため不正解。
- エ:自己関連で階層を表現し、社員の所属を表す関連の多重度が「組織側:1/社員側:*」となっているため、「社員は(階層中の)1つの組織に所属する(兼務しない)、1組織に複数社員が所属する」という要件を満たす。したがって正しい。
よくある誤解
- 多重度の向きを取り違える:端に書かれた数が「その端」ではなく「反対側の1インスタンスがその端をいくつ持てるか」を示すことを忘れがちです。例:組織側に「1」とあれば「1人の社員はちょうど1つの組織を持つ」。
- サブクラスと継承の意味を誤解する:関連がサブクラスに結ばれていると、その関連はそのサブクラスに限られます。階層中の任意のノードを所属対象にしたいなら、原則として基底クラス(または階層全体を具現するクラス)に関連を結ぶ必要があります。
- 自己関連(上位/下位)を見落とす:階層(木構造)を表す自己関連がないと「階層中のどの組織か」を表現できない場合があります。
補足コラム
- 継承(一般化)と関連の継承性:UMLでは、基底クラスに定義された関連はサブクラスが継承します。したがって「組織」クラスに社員との関連を付ければ、すべての具体的な組織(サブクラス)でその関連が利用できます。一方、関連をサブクラスに付けるとそのサブクラスに限定されます。設問図の読み取りでは、そのどちらの意図かを正確に判断することが重要です。
- モデリングの実務上の注意:要件が「階層中の任意のノードに所属可能」と明示されている場合は、関連を基底の組織クラスに結ぶのが安全です。図面上のクラス名(例:末端組織)が具象を意味するかどうかはコメントや抽象化の有無で判断してください。
FAQ
Q. 「社員が所属できる組織が内部ノードも含むか」は図からどう判断しますか?
A. 自己関連(上位/下位)が組織クラスに付いているか、あるいは所属関連が組織の基底クラスに直接結ばれているかを確認します。所属関連が基底クラスにあれば内部ノードも含まれます。
A. 自己関連(上位/下位)が組織クラスに付いているか、あるいは所属関連が組織の基底クラスに直接結ばれているかを確認します。所属関連が基底クラスにあれば内部ノードも含まれます。
Q. 兼務を表すには多重度をどうするのが正しいですか?
A. 「兼務しない」=社員が所属する組織は1つだけ、したがって組織側の多重度を「1」にします。逆に「兼務あり」は組織側が「」や「0..」になります。
A. 「兼務しない」=社員が所属する組織は1つだけ、したがって組織側の多重度を「1」にします。逆に「兼務あり」は組織側が「」や「0..」になります。
Q. サブクラスに関連がある図を見て「全体に適用される」と判断するのは安全ですか?
A. 安全ではありません。サブクラスに結ばれた関連はそのサブクラスに限定されるため、設問の要件と照合してから判断してください。
A. 安全ではありません。サブクラスに結ばれた関連はそのサブクラスに限定されるため、設問の要件と照合してから判断してください。
関連キーワード: UML、クラス図、多重度、一般化、自己関連、所属関係、葉ノード

\ せっかくなら /
システムアーキテクトを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

