基本情報技術者 2009年 秋期 午前(科目A) 問07
問題文
オブジェクト指向プログラムの特徴はどれか。
選択肢
ア:計算順序は制御フローではなくデータの流れによって規定される。命令は、入力となるすべてのデータがそろったときに実行可能となる。
イ:計算の制御は命令から命令へ順次渡される。命令間でのデータの受渡しは、“変数”を介するメモリへの参照によって間接的に行う。命令とデータの定義は分離されている。
ウ:データを外部から隠ぺいし、メソッドと呼ばれる手続によって間接的に操作することができる。プログラムは、データとメソッドをひとまとまりにしたものの集まりである。(正解)
エ:プログラムは、入れ子構造の演算式、関数を表現する命令(演算記号)、データによって構成され、“命令実行”に対応するのは“演算式又は関数の値の計算(評価)”である。
オブジェクト指向プログラムの特徴はどれか。【午前2 解説】
要点まとめ
- 結論→オブジェクト指向はデータとその操作を一体化し、外部からの直接操作を避けてデータを隠ぺいする設計思想です。
- 根拠→オブジェクトは「状態(データ)」と「振る舞い(メソッド)」を持ち、メッセージ送信で操作するため情報隠蔽が成立します。
- 差がつくポイント→「データとメソッドの一体化(カプセル化)」と「メッセージによる操作」が設計・再利用性の鍵になります。
正解の理由
正解は ウ: 「データを外部から隠ぺいし、メソッドと呼ばれる手続によって間接的に操作することができる。プログラムは、データとメソッドをひとまとまりにしたものの集まりである。」
この記述はカプセル化(情報隠蔽)とオブジェクト=データ+メソッドの集合というオブジェクト指向の本質を的確に表しています。外部から直接データを変更させず、メソッドを通して振る舞いを制御する点が一致します。
この記述はカプセル化(情報隠蔽)とオブジェクト=データ+メソッドの集合というオブジェクト指向の本質を的確に表しています。外部から直接データを変更させず、メソッドを通して振る舞いを制御する点が一致します。
よくある誤解
- 「オブジェクト指向=ただクラスを使うこと」ではなく、設計の原則(カプセル化・継承・ポリモorphism)が重要です。
- データ隠蔽は完全な隔離ではなく、公開インタフェース(メソッド)を通じて必要な操作を許可することです。
解法ステップ
- 各選択肢がどのプログラミングパラダイムを示すかを把握する(データフロー、手続き型、オブジェクト指向、関数型)。
- オブジェクト指向の特徴(カプセル化、継承、ポリモーフィズム、メッセージ送信)と照らし合わせる。
- 選択肢文のキーワード(「データを隠ぺい」「メソッド」「データとメソッドの一体化」)を満たすものを選ぶ。
- 該当する選択肢が正解であることを確認し、他の選択肢が指す別パラダイムとの相違点を確認する。
選択肢別の誤答解説
- ア: データの流れで計算順序が決まる記述はデータフロー型プログラミングやストリーム処理の説明であり、オブジェクト指向の説明ではありません。
- イ: 命令から命令へ制御が渡る、変数を介したメモリ参照でデータを受け渡す、命令とデータの分離という記述は手続き型(命令型)プログラミングの特徴です。オブジェクト指向では命令とデータは密接に結びつきます。
- ウ: 正しい。カプセル化(情報隠蔽)とオブジェクト=データ+メソッドという定義をそのまま表現しています。
- エ: 入れ子構造の演算式や関数評価に着目する記述は関数型プログラミングや式評価の説明で、オブジェクト指向とは異なります。
補足コラム
- カプセル化(Encapsulation): データ(属性)をクラス内部に隠し、公開メソッドだけでアクセスさせることで整合性を保ちます。
- 継承(Inheritance)とポリモーフィズム(Polymorphism): コード再利用と振る舞いの切替を可能にし、設計の柔軟性を高めます。
- 実例(Python):
class Account:
def __init__(self, balance):
self._balance = balance # _は非公開の慣習
def deposit(self, amount):
if amount > 0:
self._balance += amount
def get_balance(self):
return self._balance
a = Account(100)
a.deposit(50)
print(a.get_balance()) # 150
この例はデータを直接触らせず、メソッドを通じて操作するカプセル化を示します(Pythonは厳密なprivateを持ちませんが慣習で表現)。
FAQ
Q: オブジェクト指向では継承が必須ですか?
A: いいえ。継承は有用な機能ですが、オブジェクト指向の本質はカプセル化とメッセージによる振る舞いの表現にあり、継承は設計上の選択肢の一つです。
A: いいえ。継承は有用な機能ですが、オブジェクト指向の本質はカプセル化とメッセージによる振る舞いの表現にあり、継承は設計上の選択肢の一つです。
Q: カプセル化と抽象化は同じですか?
A: 異なります。カプセル化は実装の隠蔽を指し、抽象化は重要な性質だけを取り出してモデル化することを指します。両者は連携して使われます。
A: 異なります。カプセル化は実装の隠蔽を指し、抽象化は重要な性質だけを取り出してモデル化することを指します。両者は連携して使われます。
関連キーワード: オブジェクト指向、カプセル化、情報隠蔽、継承、ポリモーフィズム、メソッド、クラス、オブジェクト、手続き型、関数型、データフロー、制御フロー

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

