システムアーキテクト 2011年 午前2 問01
問題文
UMLを使って図のクラスPを定義した。このクラスの操作のうち、公開可視性(public)をもつものはどれか。

選択肢
ア:全ての操作
イ:操作A(正解)
ウ:操作B
エ:操作C
🔒 解説は解答すると表示されます
公開可視性(public)【午前2解説】
正解の理由
UMLの操作表記で先頭に「+」が付くものは公開可視性(public)を示します。図中で「+ 操作A」は公開を表すため、外部のどのクラスからでも呼び出せます。したがって該当する選択肢は イ です。図の他の記号は「−」がprivate(クラス自身のみ)、「#」がprotected(クラス自身とサブクラスのみ)を示すため、これらは公開ではありません。
解法ステップ
- 図の操作それぞれの先頭記号を確認する。
- 記号と可視性の対応を把握する(+ → public、− → private、# → protected、~ → package)。
- 公開(public)に該当する操作だけを選ぶ。図では「+ 操作A」だけなので選択肢は イ。
選択肢別の誤答解説
- ア: 全ての操作 — 誤り。操作Bは「−」でprivate、操作Cは「#」でprotectedのため公開ではない。
- イ: 操作A — 正解。操作Aが「+」でpublicを表すため外部からアクセス可能。
- ウ: 操作B — 誤り。操作Bは「−」(private)で同じクラス内からのみアクセス可能。
- エ: 操作C — 誤り。操作Cは「#」(protected)で、UML上はクラス自身とそのサブクラスに可視であり、全体公開ではない。
よくある誤解
- protected(#)を必ず同一パッケージからも見えると考える誤解。UMLでは#は「サブクラスへの可視性」を意味し、同一パッケージからの可視性を含むかは言語依存です(後述)。
- 「+」と「~」を混同する誤解。~はパッケージ(パッケージ内のクラス)可視性であり、+(public)とは意味が異なります。
- 表記がない場合に自動的にpublicと解釈する誤り。UMLでは明示が望ましく、未指定はモデルの文脈に依存します。
補足コラム
UMLの可視性記号は短く直感的で、クラス図の属性・操作に使われます。代表的な記号と意味は以下のとおりです。
-
- : public(誰でもアクセス可)
- − : private(そのクラスのみ)
-
: protected(UMLではクラス自身とサブクラスに可視)
- ~ : package(同一パッケージ内のクラスに可視)
ここで重要なのはUMLが言語非依存のモデリング記法である点です。例えばJavaではprotectedは「同一パッケージ内のクラス」と「サブクラスの両方」から見えるという実装上の振る舞いを持ちますが、これは言語仕様による拡張であり、UMLの基本概念としての#は「サブクラス可視」を指します。言語へ変換する際はその言語のアクセス制御規則に合わせて解釈してください。
FAQ
Q: UMLの「#」は同一パッケージからも見えますか?
A: UML自体では「#(protected)」はクラス自身とそのサブクラスに可視であることを意味します。同一パッケージからの可視性を含むかは言語依存です(例:Javaではprotectedは同一パッケージ内からもアクセス可能)。
A: UML自体では「#(protected)」はクラス自身とそのサブクラスに可視であることを意味します。同一パッケージからの可視性を含むかは言語依存です(例:Javaではprotectedは同一パッケージ内からもアクセス可能)。
Q: 「+」はstaticを意味しますか?
A: いいえ。+は可視性(public)を表します。static(クラスレベル)はUMLでアンダーラインや別の表記で示します。
A: いいえ。+は可視性(public)を表します。static(クラスレベル)はUMLでアンダーラインや別の表記で示します。
Q: 表示がない場合の扱いは?
A: モデル作成のルールに依存します。明示がないと解釈が分かれるため、試験や実務では可視性を明記することが望ましいです。
A: モデル作成のルールに依存します。明示がないと解釈が分かれるため、試験や実務では可視性を明記することが望ましいです。
関連キーワード: UML、可視性、アクセス記号、public、private、protected、パッケージ可視性

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

