基本情報技術者 2010年 秋期 午前(科目A) 問47
問題文
オブジェクト指向におけるクラスとインスタンスとの関係のうち、適切なものはどれか。
選択肢
ア:インスタンスはクラスの仕様を定義したものである。
イ:クラスの定義に基づいてインスタンスが生成される。(正解)
ウ:一つのインスタンスに対して、複数のクラスが対応する。
エ:一つのクラスに対して、インスタンスはただ一つ存在する。
オブジェクト指向におけるクラスとインスタンスとの関係【午前2 解説】
要点まとめ
- 結論→クラスはオブジェクトの設計図であり、イのとおりクラス定義に基づいて具体的なインスタンスが生成されます。
- 根拠→クラスは属性(フィールド)や操作(メソッド)を定義する型で、インスタンスはその定義内容を持つ具体的な実体です。
- 差がつくポイント→「クラスとインスタンスの方向」や「シングルトンや多重継承など特殊例との違い」を正しく区別して理解すること。
正解の理由
正解は イ です。クラスはオブジェクトの設計図(型・テンプレート)であり、その定義(属性やメソッド、コンストラクタ等)に基づいて実行時にインスタンス(オブジェクト)が生成されます。従って「クラスの定義に基づいてインスタンスが生成される」という記述が最も適切です。
よくある誤解
- 「インスタンスがクラスを定義する」と考える混同:実際はクラスが先にあり、インスタンスはそれから作られます。
- 「一つのインスタンスが複数クラスに対応する」との思い込み:型やインターフェースの関係で複数の型を満たすことはあるが、基本の生成元は明確なクラス(またはプロトタイプ)です。
- シングルトンを一般規則と誤認:シングルトンは設計パターンの例外であり、通常は一つのクラスから複数インスタンスが作成されます。
解法ステップ
- 問題文の語句を定義で置き換える:「クラス=設計図」「インスタンス=その設計図から生成された実体」。
- 各選択肢が定義に合致するか照合する。
- 例外規則(シングルトン、プロトタイプ、継承等)が選択肢の主張を覆すか確認する。
- 最も一般的かつ基本的な関係を示す選択肢を選ぶ。
選択肢別の誤答解説
- ア: インスタンスはクラスの仕様を定義したものである。
誤り。仕様(クラス)は設計側であり、インスタンスはその仕様に従う具体的な実体です。方向が逆です。 - イ: クラスの定義に基づいてインスタンスが生成される。
正解。クラスがテンプレート、インスタンスがテンプレートに基づく実体という基本関係を正確に表しています。 - ウ: 一つのインスタンスに対して、複数のクラスが対応する。
誤り。通常、インスタンスは生成元となる一つのクラス(またはプロトタイプ)を持ちます。インターフェースの実装や多重継承により複数の型として振る舞うことはありますが、「複数のクラスが対応する」とは言えません。 - エ: 一つのクラスに対して、インスタンスはただ一つ存在する。
誤り。通常は一つのクラスから複数のインスタンスが生成されます(シングルトンは特例に過ぎません)。
補足コラム
実装例を通してイメージを固めましょう(Python)。クラスを定義して複数インスタンスを生成する例です。
class Car:
def __init__(self, color):
self.color = color
car1 = Car("red")
car2 = Car("blue")
print(car1.color) # red
print(car2.color) # blue
上記では Car がクラス(設計図)、car1 と car2 がそのインスタンス(実体)です。JavaやC++でも同様の概念です。JavaScript のプロトタイプベースの言語でも「オブジェクトを生成する元」と「生成されたオブジェクト(インスタンス)」という考え方は対応します。
注意点として、多重継承やインターフェースの実装、プロトタイプチェーン、シングルトンパターンなど言語や設計パターンによる特殊ケースは存在しますが、午前試験では基本概念を問う場合がほとんどです。
FAQ
Q1: インスタンスとオブジェクトは同じですか?
A1: 実務・試験ではほぼ同義に扱われます。「インスタンス」は「あるクラスのオブジェクト」という意味で使います。
A1: 実務・試験ではほぼ同義に扱われます。「インスタンス」は「あるクラスのオブジェクト」という意味で使います。
Q2: 多重継承があると一つのインスタンスが複数クラスに属することがありますか?
A2: 多重継承や複数インターフェースの実装により「複数の型として振る舞う」ことはありますが、生成元(コンストラクタやプロトタイプ)は特定のクラスや組み合わせに基づきます。選択肢のような単純な「一つのインスタンスに複数のクラスが対応する」は誤解を招きます。
A2: 多重継承や複数インターフェースの実装により「複数の型として振る舞う」ことはありますが、生成元(コンストラクタやプロトタイプ)は特定のクラスや組み合わせに基づきます。選択肢のような単純な「一つのインスタンスに複数のクラスが対応する」は誤解を招きます。
Q3: シングルトンは問題の記述と矛盾しますか?
A3: シングルトンは「そのクラスのインスタンスがただ一つしか存在しない」設計パターンであり例外です。設問は一般的な関係を問うため該当しません。
A3: シングルトンは「そのクラスのインスタンスがただ一つしか存在しない」設計パターンであり例外です。設問は一般的な関係を問うため該当しません。
関連キーワード: オブジェクト指向、クラス、インスタンス、オブジェクト、継承、多重継承、インターフェース、コンストラクタ、シングルトン、プロトタイプ

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

