基本情報技術者 2012年 春期 午前(科目A) 問46
問題文
オブジェクト指向プログラミングの特徴はどれか。
選択肢
ア:オブジェクトが相互にメッセージを送ることによって、協調して動作し、プログラム全体の機能を実現する。(正解)
イ:オブジェクトの外部からオブジェクトの内部のデータを直接変更できるので、自由度が高い。
ウ:下位クラスは上位クラスの機能や性質を引き継ぐので、下位クラスに必要な性質は全て上位クラスに含まれる。
エ:個々のオブジェクトが使用するデータ(属性)は、あらかじめデータ辞書に登録しておく。
🔒 解説は解答すると表示されます
オブジェクト指向の基本特性【午前解説】
正解の理由
選択肢の中で正しいのは ア です。オブジェクト指向の本質は「オブジェクトが責務を持ち、互いにメッセージ(メソッド呼び出し)を行って協調してシステムの機能を実現する」点にあります。オブジェクトはデータ(属性)と操作(メソッド)をひとまとめにし、公開されたインタフェースを介して相互作用します。よって「オブジェクトが相互にメッセージを送ることによって協調して動作する」という記述が正解となります。
解法ステップ
- 各選択肢のキーワードを抽出する(メッセージ送信、外部からデータ変更、継承の包含、データ辞書)。
- オブジェクト指向のコア概念(カプセル化、継承、ポリモーフィズム、メッセージパッシング)と照合する。
- 「直接データ変更」や「上位クラスが全てを含む」といった記述とカプセル化・継承の実態を比較して、矛盾する選択肢を除外する。
- 残ったものが設問の求める特徴(協調する)に合致するか確認する。
選択肢別の誤答解説
- ア: 正解。オブジェクトはインタフェース(メソッド)を通じて相互作用し、協調してシステム機能を実現します。
- イ: 誤り。外部から内部データを直接変更できるとするのはカプセル化の否定です。オブジェクト指向では通常、データは隠蔽しメソッドを通じて操作します。
- ウ: 誤り。下位クラスは上位クラスを継承して拡張・特殊化しますが、下位クラスに必要な性質が必ず上位クラスに含まれているとは限らず、継承の誤用(適切でない設計)につながります。
- エ: 誤り。オブジェクトの属性をあらかじめデータ辞書に登録するという運用は必須ではなく、言語や設計によって属性の定義はクラス内で行います。データ辞書は必須要件ではありません。
よくある誤解
- 「オブジェクトの内部データを外から直接変更できる」は誤りで、カプセル化は外部からの直接操作を制限する考え方です。
- 「下位クラスに必要な性質はすべて上位クラスに含まれる」と考えるのは誤解で、継承は上位クラスの性質を受け継ぐが、必要な機能が上位クラスに無い場合も多々あります。
- 「オブジェクト指向 = クラスをたくさん作ればよい」ではなく、責務分割、インタフェース設計、コンポジションの活用が重要です。
補足コラム
オブジェクト指向を実際に運用する際は、単に継承を多用するのではなく「コンポジション(委譲)」や「インタフェース設計」を重視することが良い設計につながります。プロトタイプベースの言語も含め、オブジェクト指向の核は「状態と振る舞いをまとめ、外部とはメッセージでやり取りする」点です。以下は簡単な Python の例で、オブジェクト同士がメッセージ(メソッド呼び出し)で協調する様子を示します。
class Light:
def __init__(self):
self._on = False # カプセル化(慣習で非公開)
def turn_on(self):
self._on = True
def turn_off(self):
self._on = False
def is_on(self):
return self._on
class Switch:
def __init__(self, device):
self.device = device
def press(self):
if self.device.is_on():
self.device.turn_off()
else:
self.device.turn_on()
light = Light()
switch = Switch(light)
switch.press() # Switch が Light にメッセージを送り状態を変える
この例では Switch が Light の公開 API(メソッド)を呼び出して協調しています。外部から直接 Light._on を変更するべきではありません。
FAQ
Q: メッセージ送信とメソッド呼び出しは同じ意味ですか?
A: 実務上は概ね同義です。オブジェクト指向の文脈では「メッセージを送る=オブジェクトの公開メソッドを呼ぶ」と理解して差し支えありません。
A: 実務上は概ね同義です。オブジェクト指向の文脈では「メッセージを送る=オブジェクトの公開メソッドを呼ぶ」と理解して差し支えありません。
Q: 継承とポリモーフィズムは別物ですか?
A: 別の概念ですが関連します。継承はコードや性質の再利用手段で、ポリモーフィズムは同一の操作を異なるオブジェクトが異なる振る舞いで実行できる性質を指します。継承やインタフェース実装がポリモーフィズムを実現する手段になります。
A: 別の概念ですが関連します。継承はコードや性質の再利用手段で、ポリモーフィズムは同一の操作を異なるオブジェクトが異なる振る舞いで実行できる性質を指します。継承やインタフェース実装がポリモーフィズムを実現する手段になります。
Q: 属性をデータ辞書に登録する必要はありますか?
A: いいえ。データ辞書は設計やドキュメントの補助にはなりますが、オブジェクト指向の必須要件ではありません。
A: いいえ。データ辞書は設計やドキュメントの補助にはなりますが、オブジェクト指向の必須要件ではありません。
関連キーワード: オブジェクト指向、カプセル化、継承、ポリモーフィズム、メッセージパッシング、コンポジション、クラス設計、責務分割

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

