「オブジェクト指向って結局なに?」「クラスと継承とポリモーフィズム、それぞれは聞くけど関係性がわからない」。
情報処理試験の勉強でつまずきやすい代表格がこのテーマです。本記事では3つの柱を一気に整理し、試験で確実に得点できる状態まで引き上げます。
対象試験と出題頻度
オブジェクト指向設計は、ITパスポート・基本情報技術者・応用情報技術者のすべてで出題される頻出テーマです。
特にFE・APでは、クラス図や継承関係を読み解く問題、ポリモーフィズムの定義を選ぶ問題が定番化しています。UMLのクラス図と組み合わせて問われることも多く、3つの概念の正確な区別が合否を分けます。
詳細をクリックして確認
ITパスポート
基本情報技術者
応用情報技術者
★★★★☆
ランクA(重要)必ず覚えておくべき
用語の定義
オブジェクト指向設計(Object-Oriented Design:OOD)とは、一言で言うと
「データと、それを操作する処理をひとまとめにした「もの(オブジェクト)」を組み合わせてシステムを作る設計手法」
のことです。
イメージとしては、「レゴブロックでお城を組み立てる作業」です。
レゴには「窓ブロック」「ドアブロック」「屋根ブロック」など、それぞれ役割を持った部品があります。設計者は部品の中身(プラスチックの構造)を気にせず、「ドアは開く」「窓ははまる」という機能だけを使って組み立てます。
オブジェクト指向設計も同じで、データと処理をパーツ化し、それらを組み合わせて大きなシステムを構築します。
📊 オブジェクト指向設計の基本情報
| 項目 | 内容 |
|---|---|
| 英語名 | Object-Oriented Design(OOD) |
| 3本柱 | クラス(カプセル化)/継承/ポリモーフィズム |
| 対比される手法 | 構造化設計(処理中心の設計) |
| 代表的な言語 | Java、C++、C#、Python、Ruby |
解説
かつてのプログラムは「処理の手順」を中心に書かれていました。しかし規模が大きくなると、データと処理が複雑に絡み合い、修正の影響範囲が読めなくなります。
そこで登場したのが「データと処理をセットにして、独立した部品として扱う」という発想です。これがオブジェクト指向の出発点になります。
3本柱を順に押さえれば、試験範囲はほぼカバーできます。
① クラスとインスタンス(カプセル化)
クラスは「設計図」、インスタンスは「設計図から作った実体」です。
クラスには、データ(属性/フィールド)と処理(メソッド/操作)がまとめられています。外部からは公開された手続きだけを通じて操作させ、内部データを直接いじらせない仕組みをカプセル化と呼びます。
クラスとインスタンスの関係
クラス:Car(設計図)
属性
– color
– speed
メソッド
+ run()
+ stop()
▲ 1つの「設計図(クラス)」から、状態の異なる複数の「実体(インスタンス)」が生まれる
▼ サンプルコード(Java)を見る
class Car {
private String color; // 属性(外部から直接見せない)
private int speed;
public Car(String color) { // コンストラクタ
this.color = color;
this.speed = 0;
}
public void run() { // メソッド
this.speed += 10;
}
}
// インスタンス化
Car car1 = new Car("赤");
car1.run(); // speedが10になる
② 継承(インヘリタンス)
継承は、既存のクラス(親クラス/スーパークラス)の特徴を引き継いで、新しいクラス(子クラス/サブクラス)を作る仕組みです。共通部分を親に集約することで、コードの重複を減らせます。
例え話で言えば「親から目の色や髪質を受け継ぎ、自分独自の特徴も持つ」という関係に近いです。UMLのクラス図では「汎化」と呼び、白抜きの三角矢印で表現します。
継承の構造(クラス階層)
eat() / sleep()
bark()
meow()
fly()
※ 子クラスは親の eat() / sleep() を引き継ぎつつ、独自のメソッドを追加できる
③ ポリモーフィズム(多態性/多相性)
ポリモーフィズムは、同じ呼び出し方をしても、相手のオブジェクトの種類によって振る舞いが変わる仕組みです。「鳴け(cry)」と命じたとき、犬は「ワン」、猫は「ニャー」、鳥は「ピヨ」と返す。
呼び出す側は中身を知らなくていい、というのがポイントです。
ポリモーフィズムのイメージ
「cry()」
▲ 同じ「cry()」というメッセージでも、受け取る側の種類で挙動が変わる
▼ サンプルコード(Java)を見る
class Animal {
public void cry() { System.out.println("..."); }
}
class Dog extends Animal {
public void cry() { System.out.println("ワン!"); } // オーバーライド
}
class Cat extends Animal {
public void cry() { System.out.println("ニャー!"); }
}
Animal a1 = new Dog();
Animal a2 = new Cat();
a1.cry(); // → ワン!
a2.cry(); // → ニャー! (同じcry()でも結果が変わる)
3本柱の関係をまとめると
| 柱 | 役割 | キーワード |
|---|---|---|
| クラス/カプセル化 | データと処理を1つにまとめ、内部を隠蔽する | 情報隠蔽、属性、メソッド |
| 継承 | 親クラスの特徴を引き継ぎ、差分だけ書く | 汎化、特化、サブクラス |
| ポリモーフィズム | 同じ呼び出しで、相手によって異なる動作をする | 多態性、オーバーライド |
では、この用語が試験でどのように出題されるか見ていきましょう。
試験ではこう出る!
このテーマは、IP・FE・APすべてで安定して出題される定番領域です。3本柱それぞれの定義を選ばせる問題が中心で、特にポリモーフィズムの言い換えがひっかけとして頻出します。
📊 過去問での出題実績
| 試験回 | 出題内容 | 問われたポイント |
|---|---|---|
| FE R元秋 午前 問46 |
オブジェクト指向の特徴であるカプセル化の説明を選ぶ問題。 | 「データと操作を1つにまとめ、外部から内部構造を隠蔽する」が正解 |
| AP H30秋 午前 問47 |
継承(汎化/特化)の説明として正しいものを選ぶ問題。 | 「上位クラスの属性・操作を下位クラスが引き継ぐ」が正解 |
| FE H29春 午前 問46 |
ポリモーフィズムの説明として最も適切なものを選ぶ問題。 | 「同じメッセージでも、受け取るオブジェクトによって異なる動作をする」が正解 |
| IP R4 問80 |
クラスとインスタンスの関係を問う基本問題。 | クラス=設計図、インスタンス=実体という対応の理解 |
📝 IPA試験での出題パターン
パターン1:3本柱のうち1つの定義を選ばせる
「カプセル化」「継承」「ポリモーフィズム」のどれか1つの説明文を4択から選ばせる形式。ひっかけとして他の2柱の説明や、構造化設計の特徴が混ぜられる。
パターン2:用語の言い換え
「多態性」「多相性」「動的束縛」など、ポリモーフィズムの別名で出題されることがある。日本語訳と英語をセットで覚えるのが安全策。
頻出ひっかけキーワード:「処理の手順を順序立てて記述する」(→構造化設計)、「データの流れを矢印で表現する」(→DFD)。これらが選択肢に出たら除外して構いません。
試験ではここまででOKです。多重継承の制約や、抽象クラス・インタフェースの細かな違いまでは深追い不要です。
【確認テスト】理解度チェック
ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。
Q. オブジェクト指向における「ポリモーフィズム(多態性)」の説明として、最も適切なものはどれでしょうか?
- A. クラスの内部データを外部から直接アクセスできないようにし、公開されたメソッドを介してのみ操作させる仕組み。
- B. 同じメッセージ(メソッド呼び出し)に対して、受け取るオブジェクトの種類に応じて異なる動作をする仕組み。
- C. 既存クラスの属性や操作を引き継いだ新しいクラスを定義し、共通部分の重複を避ける仕組み。
正解と解説を見る
正解:B
解説:
ポリモーフィズムは、同じ呼び出し方をしても、対象オブジェクトの型によって実際の振る舞いが切り替わる性質です。Bがこれに正確に該当します。
選択肢Aはカプセル化の説明です。データと操作の隠蔽を意味するもので、ポリモーフィズムとは別の柱に位置づけられます。選択肢Cは継承(汎化/特化)の説明です。親クラスの特徴を子クラスが引き継ぐ仕組みであり、振る舞いの切り替えとは目的が異なります。
よくある質問(FAQ)
Q. オブジェクト指向設計と構造化設計の違いは何ですか?
構造化設計は「処理の手順」を中心に、機能を段階的に分解して設計する手法です。一方オブジェクト指向設計は「データと処理をまとめたモノ」を中心に組み立てます。大規模開発では、変更箇所が局所化しやすいオブジェクト指向のほうが保守性で優位です。試験では「処理中心=構造化/データと処理をまとめる=オブジェクト指向」と覚えれば十分です。
Q. 抽象クラスとインタフェースの違いは試験で問われますか?
FE・APでは選択肢の中に登場することがあります。抽象クラスは「実装を持つメソッドと持たないメソッドが混在できる」のに対し、インタフェースは原則「実装を持たないメソッドの集まり(仕様の約束事)」です。Javaでは多重継承は禁止ですが、インタフェースは複数実装できる、という点も押さえておくと安心です。
Q. オーバーロードとオーバーライドはどう違いますか?
オーバーロードは「同じクラス内に、同名で引数の型や数が異なるメソッドを複数定義する」こと。オーバーライドは「子クラスが親クラスのメソッドを上書きして再定義する」ことです。ポリモーフィズムを支えるのは主にオーバーライド側で、過去問でも両者を入れ替えたひっかけが出題されます。「上書き=オーバーライド」「多重定義=オーバーロード」と紐付けて記憶してください。
Q. 実務でオブジェクト指向はどんな場面で使われますか?
業務システム、Webアプリのバックエンド、ゲーム開発、スマホアプリなど現代の開発の大半で使われています。デザインパターン(GoF 23パターン)やSOLID原則といった設計のベストプラクティスも、すべてオブジェクト指向を前提に体系化されています。資格学習で基礎を押さえれば、実務での設計議論にも入っていけます。
Q. PythonやJavaScriptもオブジェクト指向ですか?
どちらもオブジェクト指向の機能を備えています。Pythonはクラス・継承・ポリモーフィズムをすべて標準サポート。JavaScriptは元々プロトタイプベースでしたが、ES6以降は`class`構文が導入され、Java系の感覚に近い書き方が可能です。言語ごとに細部の流儀は異なりますが、3本柱という考え方自体は共通しています。