基本情報技術者 2014年 春期 午前(科目A) 問47
問題文
オブジェクト指向に基づく開発では、オブジェクトの内部構造が変更されても利用者がその影響を受けないようにすることができ、それによってオブジェクトの利用者がオブジェクトの内部構造を知らなくてもよいようにすることができる。これを実現するための概念を表す用語はどれか。
選択肢
ア:カプセル化(正解)
イ:クラス化
ウ:構造化
エ:モジュール化
🔒 解説は解答すると表示されます
カプセル化【午前解説】
正解の理由
カプセル化はオブジェクト指向の基本概念の一つで、データ(状態)とそれを操作する手続きを一つの単位にまとめ、その内部実装を外部から隠す(アクセス制御する)ことを指します。問題文の「内部構造が変更されても利用者がその影響を受けない」「利用者が内部構造を知らなくてもよい」という記述は、まさに実装の隠蔽と公開インタフェースによって実現されるカプセル化の定義に一致します。よって正解はアです。
解法ステップ
- 問題文のキーワードを抽出:「内部構造が変更されても利用者が影響を受けない」「利用者が内部構造を知らなくてもよい」
- 各選択肢の定義を思い出す:カプセル化(情報隠蔽と公開インタフェース)、クラス化(クラス設計)、構造化(手続き的設計手法)、モジュール化(機能の分割)。
- 「内部の隠蔽」と「公開インタフェース」を直接指す概念がカプセル化であると判断する。
- 選択肢からアを選ぶ。
選択肢別の誤答解説
- ア: カプセル化 — 正解。データと操作をまとめ、内部実装を隠して公開インタフェースでのみやり取りさせる概念です。
- イ: クラス化 — 誤り。クラス化はオブジェクトの設計単位(クラス)を作ることであり、必ずしも情報隠蔽の手段を単独で示す概念ではありません。
- ウ: 構造化 — 誤り。構造化(構造化プログラミング)は制御構造の整理や手続きの分割に関する概念で、オブジェクトの内部隠蔽を直接示すものではありません。
- エ: モジュール化 — 誤り。モジュール化はシステムを部品化することにより依存を管理する設計技法で、モジュール内部の情報隠蔽は関係しますが、問題文が指す「オブジェクト単位での内部隠蔽」を最も直接的に表すのはカプセル化です。
よくある誤解
- 「クラス化=カプセル化」と混同する誤解:クラスは設計の枠組みであり、カプセル化はその中でどうアクセスを制御するかの概念です。
- 「モジュール化と同じ」と思う誤解:モジュール化はシステムを分割する設計手法で、カプセル化は各要素内部のデータ隠蔽に焦点を当てます。
- 公開メソッドだけ用意すれば良いと安易に考える誤り:データ整合性や不変条件を守るためのアクセス制御と不変条件の管理が必要です。
補足コラム
カプセル化は単に「見せない」にするだけでなく、不変条件の保証や副作用の管理、テスト容易性の向上にも寄与します。実装例として多くの言語はアクセス修飾子(private, protected, publicなど)を提供しますが、言語仕様がない場合でも設計ルールとしてカプセル化を適用可能です。設計パターンではFacadeやAdapterなどが外部に対する安定したインタフェース提供によりカプセル化の効果を高めます。
例(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
上記は内部状態を直接触らせず、公開メソッドを通じてのみ操作させることで状態変更の一貫性を保つ例です。
FAQ
Q1: カプセル化と抽象化は同じものですか?
A1: 違います。抽象化は重要な性質だけを抜き出して表現することで、カプセル化は内部実装を隠す技術です。両者は相互補完的です。
A1: 違います。抽象化は重要な性質だけを抜き出して表現することで、カプセル化は内部実装を隠す技術です。両者は相互補完的です。
Q2: モジュール化でも内部を隠蔽できるのでは?
A2: できますが、モジュール化はシステム単位の分割に関する概念で、オブジェクト単位での情報隠蔽を特に指すのはカプセル化です。
A2: できますが、モジュール化はシステム単位の分割に関する概念で、オブジェクト単位での情報隠蔽を特に指すのはカプセル化です。
Q3: カプセル化はなぜ試験でよく問われますか?
A3: オブジェクト指向設計の基礎であり、保守性・拡張性・安全性に直結する重要概念だからです。
A3: オブジェクト指向設計の基礎であり、保守性・拡張性・安全性に直結する重要概念だからです。
関連キーワード: オブジェクト指向、カプセル化、情報隠蔽、公開インタフェース、抽象化、クラス、アクセス制御、モジュール化、設計原則、SOLID

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

