対象試験と出題頻度
オブジェクト指向言語は、ITパスポート・基本情報技術者・応用情報技術者のいずれでも出題されるテーマです。
カプセル化・継承・ポリモーフィズムといった三大概念の定義問題が定番であり、Java・C++・Pythonなど代表的な言語の特徴を問う設問も繰り返し登場しています。
FE 科目Aサンプル問題 問38、AP R6春期 午前 問45、FE R3年度免除 問10など、複数の試験区分で継続的に出題されています。
詳細をクリックして確認
ITパスポート
基本情報技術者
応用情報技術者
★★★★☆
ランクA(重要)必ず覚えておくべき
用語の定義
情報処理試験を勉強していると、「オブジェクト指向って結局何?手続型と何が違うの?」と混乱しがちです。
オブジェクト指向言語(Object-Oriented Language)とは、一言で言うと
「データ(属性)と処理(メソッド)をひとまとめにした”オブジェクト”を基本単位としてプログラムを構築する言語」
のことです。
イメージとしては、「たい焼きの型(クラス)から、あんこ入り・クリーム入りなど具体的なたい焼き(インスタンス)を量産する仕組み」です。
設計図(クラス)を1つ作れば、そこから性質の異なる実体を何個でも生成でき、設計図を拡張して新しい種類も効率よく作れる。これがオブジェクト指向の考え方です。
📊 オブジェクト指向言語の基本情報
| 項目 | 内容 |
|---|---|
| 英語名 | Object-Oriented Programming Language |
| 代表的な言語 | Java、C++、Python、C#、Ruby、Swift など |
| 三大特徴 | カプセル化・継承(インヘリタンス)・ポリモーフィズム(多態性) |
| 対比される概念 | 手続型言語(C、COBOL等)、関数型言語(Haskell等) |
詳細解説
従来のプログラム開発では、処理の手順を上から順に記述する「手続型」のアプローチが主流でした。
小規模なプログラムには向いていたものの、大規模化するにつれて「どのデータをどの関数が触っているか」が見えにくくなり、修正時の影響範囲が膨らむ問題が顕在化しました。
なぜオブジェクト指向が必要になったのか
ソフトウェアが大規模化・複雑化する中で、「データと処理をバラバラに管理する」やり方は限界を迎えました。
関連するデータと処理をひとかたまりにして外部に余計な中身を見せない設計にすれば、部品の独立性が高まり、変更の影響を局所化できます。
さらに、一度作った部品を別のプログラムで使い回せるため、開発効率も大幅に向上します。この発想を言語レベルで実現したのがオブジェクト指向言語です。
三大特徴の仕組み
オブジェクト指向言語を支える中核概念は3つあります。それぞれの関係を図で整理します。
📊 三大特徴の比較
| 特徴 | 何をするか | 日常の例え |
|---|---|---|
| カプセル化 | データとメソッドを1つにまとめ、内部の実装を外部から隠蔽する | 自動販売機:利用者はボタンを押すだけで内部構造を知る必要がない |
| 継承 | 既存クラス(スーパークラス)の属性やメソッドをサブクラスが引き継ぐ | 「乗り物」→「自動車」→「電気自動車」と性質を段階的に受け継ぐ |
| ポリモーフィズム | 同じメッセージ(メソッド呼び出し)に対し、オブジェクトごとに異なる動作をする | 「鳴け」と命令すると犬は「ワン」、猫は「ニャー」と応答する |
▶ コードで見る三大特徴(Pythonの例)(クリックで展開)
① カプセル化:属性を非公開(_名前)にし、メソッド経由でのみアクセスさせる。
class BankAccount:
def __init__(self, balance):
self._balance = balance # 外部から直接触れない
def deposit(self, amount):
self._balance += amount
def get_balance(self):
return self._balance
② 継承:スーパークラス Animal の性質をサブクラス Dog が引き継ぐ。
class Animal:
def speak(self):
pass
class Dog(Animal):
def speak(self):
return "ワン"
③ ポリモーフィズム:同じ speak() 呼び出しで、オブジェクトごとに結果が変わる。
class Cat(Animal):
def speak(self):
return "ニャー"
animals = [Dog(), Cat()]
for a in animals:
print(a.speak()) # ワン → ニャー
代表的な言語の特徴比較
IPA試験で名前が登場する主要なオブジェクト指向言語を、用途と特徴で整理します。
📊 代表的なオブジェクト指向言語の比較
| 言語 | 実行方式 | 主な用途 | 試験で問われる特徴 |
|---|---|---|---|
| Java | コンパイル+JVM(仮想マシン)上で実行 | 業務システム、Androidアプリ | 「Write Once, Run Anywhere」=OS非依存。ガベージコレクションによる自動メモリ管理。 |
| C++ | コンパイル(ネイティブコード生成) | OS、ゲームエンジン、組込みシステム | C言語を拡張。ポインタ操作やメモリの手動管理が可能で実行速度が速い。多重継承をサポート。 |
| Python | インタプリタ | AI・機械学習、データ分析、Web | インデントでコードブロックを指定する言語仕様。シンプルな文法で可読性が高い。 |
プログラミング言語の分類(他のパラダイムとの比較)
IPAシラバスでは、プログラム言語論の用語例として「手続型言語、関数型言語、論理型言語、オブジェクト指向言語」が並列で記載されています。
これらの違いは「プログラムをどう構造化するか」の思想の差です。
| パラダイム | 考え方 | 代表言語 |
|---|---|---|
| 手続型 | 処理手順を上から順に記述する | C、COBOL、FORTRAN |
| 関数型 | 数学的な関数の適用と合成で計算を表現する | Haskell、Lisp、Erlang |
| 論理型 | 事実とルールを記述し、推論エンジンが解を導く | Prolog |
| オブジェクト指向 | データと処理をオブジェクト単位でまとめて管理する | Java、C++、Python |
ここだけは確実に押さえてください。Pythonのように複数のパラダイムを兼ね備えた言語(マルチパラダイム)も存在するため、「1つの言語=1つのパラダイム」とは限りません。
では、この用語が試験でどのように出題されるか見ていきましょう。
💡 オブジェクト指向言語の核心を3行で
・データと処理をオブジェクトとしてまとめ、クラスという設計図から生成する言語
・カプセル化(隠蔽)・継承(再利用)・ポリモーフィズム(多態性)の3概念がセット
・Java=JVM上で動作しOS非依存、C++=高速+手動メモリ管理、Python=インタプリタ+インデント構文
試験ではこう出る!
オブジェクト指向に関する出題は、科目Aの知識問題と科目Bの擬似言語問題の両方で登場します。
科目Aでは用語の定義・概念問題、科目Bではクラス図や継承を使ったコード読解問題が中心です。出題パターンは大きく3つに分かれます。
📊 過去問での出題実績
| 試験回 | 出題内容 | 問われたポイント |
|---|---|---|
| FE 科目A サンプル 問38 |
データとメソッドを一つにまとめ、実装の詳細を隠すことを何と呼ぶか選ぶ問題。 | ・正解は「カプセル化」 ・インスタンス・抽象化がひっかけ選択肢 |
| AP R6春期 午前 問45 |
クラス間の関係(継承、関連、多重度)について適切なものを選ぶ問題。 | ・サブクラスはスーパークラスのメソッドをオーバーライドできる ・クラス間の関連は3つ以上でも定義可能 |
| FE R3年度 免除 問10 |
インデントでコードブロックを指定するオブジェクト指向言語を選ぶ問題。 | ・正解はPython ・JavaScript、Perl、Rubyとの構文上の違い |
📝 IPA試験での出題パターン
パターン1:「三大概念の定義を選べ」
カプセル化・継承・ポリモーフィズムの説明文が選択肢に並び、問われた概念に合致するものを選ぶ形式。ひっかけとして「インスタンス」「抽象化」「クラスタ化」が紛れ込む。キーワードは「データとメソッドをまとめる=カプセル化」「上位クラスの特性を引き継ぐ=継承」「同じメッセージで異なる動作=ポリモーフィズム」。
パターン2:「言語の特徴を選べ」
Java・C++・Pythonなどの実行方式や文法上の特徴を問う形式。Pythonの「インデントでブロックを指定」は特に頻出。
パターン3:「クラスの関係を読み解け」(科目B)
擬似言語で書かれたクラス定義・継承・メソッドのオーバーライドを読み、実行結果を答える形式。概念を「知っている」だけでなく「コードを読める」レベルが求められる。
試験では深追い不要です。パターン1と2は三大概念の一言定義と各言語の代表的な特徴を押さえれば得点できます。パターン3はサンプル問題で慣れておくのが近道です。
【確認テスト】理解度チェック
ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。
Q. オブジェクト指向プログラミングにおいて、データとメソッドを一つにまとめ、オブジェクトの実装の詳細を外部から隠蔽することを何と呼ぶか。最も適切なものを選んでください。
- A. カプセル化。データとそのデータに対する操作(メソッド)を一体化し、外部に対しては公開されたインタフェースだけを提供する設計手法。
- B. 継承(インヘリタンス)。既存のスーパークラスが持つ属性やメソッドをサブクラスが引き継ぎ、差分だけを追加・変更して新しいクラスを定義する仕組み。
- C. ポリモーフィズム(多態性)。同一のメッセージ送信に対して、受け取るオブジェクトの型に応じて異なるメソッドが実行される性質。
正解と解説を見る
正解:A
解説:
カプセル化は、データとメソッドをひとまとめにして内部の実装詳細を外部から隠す設計手法です。FE科目Aサンプル問題 問38でも同様の問われ方をしています。
選択肢Bは継承の説明です。これは上位クラスの性質を下位クラスが引き継ぐ仕組みであり、「実装の隠蔽」ではなく「既存資産の再利用」が目的です。選択肢Cはポリモーフィズムの説明です。同じ呼び出しに対してオブジェクトごとに異なる処理を行う性質であり、「データとメソッドをまとめる」こととは異なります。
よくある質問(FAQ)
Q. JavaとC++の「多重継承」の違いは何ですか?
C++は複数のクラスを同時に継承する「多重継承」を直接サポートしています。一方、Javaはクラスの多重継承を許可しておらず、代わりに「インタフェース」を複数実装する仕組みで同等の柔軟性を実現しています。多重継承はダイヤモンド継承問題(同じメソッドを持つ複数の親クラスからの衝突)を引き起こすリスクがあるため、Javaはこれを言語設計で回避しました。
Q. 「オブジェクト指向言語」と「オブジェクト指向設計(OOD)」は別物ですか?
別物です。オブジェクト指向言語はプログラムを記述するための道具であり、オブジェクト指向設計はシステムをオブジェクト単位で分析・設計する方法論です。設計にはUML(統一モデリング言語)のクラス図やシーケンス図が使われます。IPA試験ではUMLに関する出題が別カテゴリで頻出するため、合わせて押さえておくと効率的です。
Q. Pythonは「スクリプト言語」とも呼ばれますが、オブジェクト指向言語ではないのですか?
Pythonはオブジェクト指向言語です。「スクリプト言語」は実行方式の分類(インタプリタで逐次実行)であり、「オブジェクト指向」はプログラムの構造化手法の分類です。Pythonはスクリプト言語かつオブジェクト指向言語であり、さらに関数型プログラミングの要素も備えた「マルチパラダイム言語」に該当します。
Q. 科目Bのオブジェクト指向問題はどう対策すればよいですか?
IPAが公開しているサンプル問題(科目B)にクラス定義・継承・メソッド呼び出しを扱った擬似言語の問題が複数含まれています。まずはこれらを実際に手を動かしてトレースし、「どのクラスのメソッドが呼ばれるか」を追跡する練習を繰り返すのが最も効果的です。特にオーバーライド(メソッドの上書き)の挙動を正確に追えるかが合否を分けます。