汎化(Generalization)は、オブジェクト指向やUMLのクラス図を学ぶうえで避けて通れないキーワードです。
対象試験と出題頻度
汎化は、基本情報技術者・応用情報技術者で出題されるテーマです。
オブジェクト指向のクラス間関係を問う問題で定番化しており、「特化」「集約」「コンポジション」との区別が正確にできるかが問われます。
詳細をクリックして確認
基本情報技術者
応用情報技術者
★★★☆☆
ランクB(標準)覚えておくと有利
用語の定義
情報処理試験を勉強していると、「汎化と特化って何が違うの?集約と何が違うの?」と混乱しがちです。
汎化(Generalization)とは、一言で言うと
「複数のクラスに共通する属性や操作を抜き出して、上位クラス(スーパークラス)を定義すること」
です。
イメージとしては、「動物園の分類表」です。
「犬」「猫」「鳥」はそれぞれ違う生き物ですが、「動く」「食べる」という共通の性質を持っています。この共通部分を抜き出して「動物」というグループを作る行為が汎化です。
逆に「動物」から「犬」「猫」を導き出すのが特化にあたります。
📊 汎化の基本情報
| 項目 | 内容 |
|---|---|
| 英語名 | Generalization |
| 分野 | オブジェクト指向設計 / UML |
| 対になる概念 | 特化(Specialization) |
| 判定フレーズ | 「○○は△△である(is-a)」が成り立つ関係 |
| UMLでの記号 | サブクラスからスーパークラスへの白抜き三角矢印 |
解説
オブジェクト指向設計では、複数のクラスに重複する属性や操作が出てきたとき、それらを1つにまとめて保守性を高めたいという動機が生まれます。
ここで登場するのが汎化という考え方です。
汎化と特化の関係(is-a関係)
汎化で生まれるスーパークラスとサブクラスの間には「is-a関係」が成立します。is-aとは「○○は△△の一種である」という意味です。
「トラック is a 自動車」→ 成り立つ → 汎化-特化の関係。「エンジン is a 自動車」→ 成り立たない → これは集約(part-of)の関係です。
この「is-aで判定できるかどうか」が、試験でも実務でも汎化を見分ける最も確実な方法です。
is-a関係の判定フロー
例:トラック is a 自動車
→ YES:集約(part-of)
例:エンジン is part of 自動車
汎化と集約の比較
試験で最も混同されやすいのが、汎化(is-a)と集約(part-of)の違いです。両者はクラス間の関係を表す点では同じですが、意味がまるで異なります。
| 項目 | 汎化(is-a) | 集約(part-of) |
|---|---|---|
| 意味 | 「○○は△△の一種である」 | 「○○は△△の一部である」 |
| 例 | 自動車 → トラック、乗用車 | 自動車 → エンジン、タイヤ |
| UML記号 | 白抜き三角矢印(△) | 白抜きひし形(◇) |
| 属性・操作の共有 | サブクラスはスーパークラスの属性・操作を継承する | 部品は全体の属性・操作を共有しない |
図解:UMLクラス図での汎化の表記
UMLのクラス図では、汎化はサブクラスからスーパークラスに向かう白抜き三角矢印で表現します。
クラス図における汎化の表記
– 色
+ 止まる()
トラック is a 自動車 ✅
乗用車 is a 自動車 ✅
▲ 白抜き三角矢印(△)はサブクラスからスーパークラスへ向かう。サブクラスは「車体番号」「色」「走る()」「止まる()」を継承する
では、この用語が試験でどのように出題されるか見ていきましょう。
💡 汎化の核心を3行で
・複数のサブクラスから共通点を抽出してスーパークラスを作る操作が汎化
・スーパークラスとサブクラスの間には「is-a関係(○○は△△の一種である)」が成り立つ
・UMLクラス図ではサブクラスからスーパークラスへの「白抜き三角矢印(△)」で表す
試験ではこう出る!
汎化は、FE・APの午前問題でクラス間の関係を問う形式で繰り返し出題されています。出題パターンは大きく2つです。
📊 過去問での出題実績
| 試験回 | 出題内容 | 問われたポイント |
|---|---|---|
| AP H29春 午前 問47 |
汎化の適切な例を選ぶ問題 | ・is-a関係の具体例を問う ・集約(part-of)の例がひっかけ |
| FE H27春 午前 問48 |
「自動車」のサブクラスとして適切なものを選ぶ問題 | ・「トラック」が正解 ・「エンジン」「タイヤ」「製造番号」は集約・属性でありサブクラスではない |
| FE R2免除 問45 |
UMLクラス図で汎化の関係を示す図を選ぶ問題 | ・白抜き三角矢印が正解 ・多重度、コンポジション(黒ひし形)、依存(点線矢印)がひっかけ |
| FE H25秋 午前 問46 |
上記R2免除 問45と同一構成の問題(流用) | ・FEでは同じ問題が繰り返し出題される典型例 |
📝 IPA試験での出題パターン
パターン1:「汎化の具体例を選べ」
4つのクラス関係の例が並び、is-a関係に該当するペアを選ぶ形式。ひっかけは「全体と部品」の集約関係や、クラスの属性・操作にあたるものが紛れ込む。「○○ is a △△」と当てはめて成り立つかどうかで即座に判定できる。
パターン2:「UMLクラス図の記号を選べ」
4つのクラス図の図形が並び、汎化を表す記号(白抜き三角矢印)を選ぶ形式。黒ひし形(コンポジション)、白ひし形(集約)、点線矢印(依存)との見分けが必要。
ここだけは確実に押さえてください。「is-aなら汎化、part-ofなら集約」「白抜き三角矢印が汎化」の2つを覚えるだけで得点できます。深追いは不要です。
【確認テスト】理解度チェック
ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。
Q. オブジェクト指向における「汎化」の説明として、最も適切なものはどれでしょうか?
- A. あるクラスが別のクラスを構成要素として内部に保持する、全体と部品の関係を定義すること。
- B. 複数のクラスに共通する属性や操作を抽出し、それらを上位クラス(スーパークラス)としてまとめること。上位と下位の間にはis-a関係が成り立つ。
- C. クラスの内部データを外部から隠蔽し、公開されたメソッドだけを通じてアクセスさせること。
正解と解説を見る
正解:B
解説:
汎化は、複数の下位クラスに共通する特性を抜き出して上位クラスを定義する操作であり、上位と下位の間には「○○は△△の一種である(is-a)」の関係が成り立ちます。
選択肢Aは集約(Aggregation)やコンポジション(Composition)の説明です。全体と部品の関係は「part-of」であり、is-aとは異なります。選択肢Cはカプセル化(Encapsulation)の説明です。内部データの隠蔽とアクセス制御はカプセル化の役割であり、クラス間の階層関係を定義する汎化とは無関係です。
よくある質問(FAQ)
Q. 汎化と継承(インヘリタンス)は同じ意味ですか?
厳密には異なります。汎化はクラス間の「関係」を指す設計上の概念で、UMLのクラス図で表現されるものです。一方、継承はプログラミング言語の「仕組み」で、Javaのextends、Pythonの括弧によるクラス指定などで実装します。「汎化という関係を、コード上では継承で実現する」と整理すると混乱しません。
Q. 汎化とコンポジションの違いは?集約との違いもあわせて教えてください。
集約(Aggregation)とコンポジション(Composition)はどちらも「全体と部品」のpart-of関係ですが、ライフサイクルの拘束度が異なります。集約は全体が消滅しても部品が独立して存続できる弱い関係(例:チームとメンバー)、コンポジションは全体が消滅すると部品も消滅する強い関係(例:注文と注文明細)です。汎化はそもそも「一種である」のis-a関係なので、part-of系の集約・コンポジションとは根本的に性質が違います。
Q. 実務では汎化をどのように使いますか?
実務では、コードの重複を減らす設計の基本原則として使います。たとえばECサイトの開発で「一般会員」と「プレミアム会員」に共通する「名前」「メールアドレス」「ログインする()」を「会員」というスーパークラスにまとめ、各会員種別はサブクラスとして固有の属性(ポイント倍率など)だけを追加します。ただし、近年は「継承より委譲(コンポジション)を優先すべき」という設計原則も広まっており、何でも汎化すればよいわけではありません。
Q. データベース設計の「汎化」とオブジェクト指向の「汎化」は同じですか?
概念としては同じ方向性です。データベース設計(ER図)でも、複数のエンティティに共通する属性をスーパータイプとしてまとめ、固有の属性をサブタイプに残す「汎化・特化(スーパータイプ・サブタイプ)」の手法があります。IPAの応用情報技術者では午後のデータベース問題でこの概念が出題されることがあるため、オブジェクト指向の汎化と合わせて覚えておくと得点源が広がります。