ネットワークスペシャリスト 2013年 午前2 問25
問題文
次のクラス図におけるクラス間の関係の説明のうち、適切なものはどれか。

選択肢
ア:“バス”、“トラック”などのクラスが“自動車”クラスの定義を引き継ぐことを、インスタンスという。
イ:“バス”、“トラック”などのクラスの共通部分を抽出し“自動車”クラスとして定義することを、汎化という。(正解)
ウ:“バス”、“トラック”などのクラスは、“自動車”クラスに対するオブジェクトという。
エ:“バス”、“トラック”などのそれぞれのクラスの違いを“自動車”クラスとして定義することを、特化という。
🔒 解説は解答すると表示されます
クラスの汎化【午前2解説】
正解の理由
図は複数の具体的な車種(バス、トラック、セダン、バン…)から上向きに線/矢印が集まり、中央の「自動車」に接続されています。この構造は具体クラスの共通部分を抽出して上位のクラスとして定義する「汎化(generalization)」の表現です。選択肢イはこの意味を正しく説明しており、したがって正答となります。
改めて正しい関係の表現としては「上位クラスが下位クラスの共通部分を一般化している(または下位クラスは上位クラスを特殊化している)」ことを押さえてください。
改めて正しい関係の表現としては「上位クラスが下位クラスの共通部分を一般化している(または下位クラスは上位クラスを特殊化している)」ことを押さえてください。
解法ステップ
- 図の要素を確認する:複数の具象クラスがあり、それらが集まって一つの上位概念(自動車)に向いている。
- UMLの基本記号を思い出す:サブクラスからスーパークラスへ向かう矢印(中空三角形)は汎化/継承を示す。
- 選択肢の語句を当てはめる:
- 「共通部分を抽出して上位クラスとする」→ 汎化(generalization) → イ
- 「インスタンス」「オブジェクト」などは実体の話でありクラス間の関係説明としては不適切。
- 方向性(どちらが一般化されるか)に注意して、文意が逆になっていないか確認する。
選択肢別の誤答解説
- ア: クラスが定義を引き継ぐのは「継承(inheritance)」だが、それを「インスタンス」という表現で説明しているため誤り。インスタンスはクラスから生成される具体的なオブジェクトを指す。
- イ: 正しい。具象クラスの共通点を上位クラス「自動車」として抽出することを汎化という。
- ウ: 「バス」「トラック」などはクラスであり、クラス自体はオブジェクト(インスタンス)ではない。よって「オブジェクト」という説明は誤り。
- エ: 文の趣旨が逆になっている。特化(特殊化)は上位の一般的なクラスから下位の具体的なクラスを作る操作(下位クラスは上位クラスを特殊化する)を指す。選択肢は「違いを上位クラスとして定義する」としており誤り。
よくある誤解
- 矢印の向きを逆に読む:上向き/三角の先が「一般(スーパークラス)」を示す点を取り違えやすい。
- クラスとインスタンスを取り違える:クラス図の要素名が具体名(バス等)でも、それは「クラス」であり「オブジェクト」ではない。
- 汎化と特化の混同:汎化は共通部分をまとめる操作、特化は一般から具体を作る操作で方向が逆。
補足コラム
- UML表記のポイント:汎化は実線で結ばれた線の先に中空三角形(△)があり、その三角形がスーパークラスに向く。横線で複数のサブクラスをつなぐのは分類の継続やグルーピングを表すことがある。
- プログラミングでの対応:多くの言語で「継承」によりスーパークラスの属性・操作をサブクラスが受け継ぐ(例:Javaの extends、Pythonの継承)。
- 設計上の注意点:スーパークラスは共通の振る舞いを置く場所で、Liskovの置換原則(LSP)に従って設計すると安全な継承関係になる。
- 例(Python):
class Automobile: # スーパークラス(汎化されたクラス)
def drive(self):
pass
class Sedan(Automobile): # セダンは自動車を特殊化したサブクラス
def play_radio(self):
pass
FAQ
Q. 矢印がスーパークラスからサブクラスに向いていたら意味は変わりますか?
A. UMLでは中空三角形の向きが重要で、三角形が示す先がスーパークラス(一般)です。向きが逆なら意味が逆になるため図の向きを必ず確認してください。
A. UMLでは中空三角形の向きが重要で、三角形が示す先がスーパークラス(一般)です。向きが逆なら意味が逆になるため図の向きを必ず確認してください。
Q. 汎化と継承は同じですか?
A. 概念的にはほぼ同じ領域を指します。UMLでは「汎化(generalization)」がモデル上の概念化操作、実装段階では「継承(inheritance)」と表現されることが多いです。
A. 概念的にはほぼ同じ領域を指します。UMLでは「汎化(generalization)」がモデル上の概念化操作、実装段階では「継承(inheritance)」と表現されることが多いです。
Q. 抽象クラスはどう表現しますか?
A. UML上はクラス名を斜体にするか「{abstract}」などの文法で示します。抽象クラスは直接インスタンス化されず、サブクラスで具体化されます。
A. UML上はクラス名を斜体にするか「{abstract}」などの文法で示します。抽象クラスは直接インスタンス化されず、サブクラスで具体化されます。
関連キーワード: UML、汎化、継承、特殊化、スーパークラス、サブクラス、クラス図、インスタンス、Liskov置換原則

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

