基本情報技術者 2010年 秋期 午前(科目A) 問46
問題文
オブジェクト指向において、属性と振る舞いを一つにまとめた構造にすることを何というか。
選択肢
ア:カプセル化(正解)
イ:クラス化
ウ:集約化
エ:汎化
オブジェクト指向において、属性と振る舞いを一つにまとめた構造にすることを何というか。【午前2 解説】
要点まとめ
- 結論→オブジェクト指向で属性(データ)と振る舞い(メソッド)を一つにまとめ、外部から内部状態を隠蔽する概念はカプセル化です。
- 根拠→クラスは設計図、集約は部品関係、汎化は一般化を示し、属性と振る舞いを結びつけるのがカプセル化だからです。
- 差がつくポイント→「隠蔽」と「公開インタフェース」を区別し、アクセス制御やアクセサ(getter/setter)の役割を具体的に理解してください。
正解の理由
正解は ア: カプセル化 です。
カプセル化(encapsulation)は、オブジェクトが持つデータ(属性)とそれを操作する手続き(振る舞い/メソッド)を一つの単位にまとめ、外部から内部の実装を隠すことで安全性と変更容易性を高める設計原則です。これにより内部表現を隠蔽し、公開されたインタフェースだけで操作させる設計が可能になります。
カプセル化(encapsulation)は、オブジェクトが持つデータ(属性)とそれを操作する手続き(振る舞い/メソッド)を一つの単位にまとめ、外部から内部の実装を隠すことで安全性と変更容易性を高める設計原則です。これにより内部表現を隠蔽し、公開されたインタフェースだけで操作させる設計が可能になります。
よくある誤解
- 「クラス化」が正解だと思い込む誤解:クラスはオブジェクトの設計図であり、クラス化はクラスを定義する行為であって、属性と振る舞いを隠蔽してまとめる概念そのものではありません。
- 「カプセル化=単にクラスにまとめれば良い」と考える誤解:単に属性とメソッドを同じクラスに置いただけでは不十分で、アクセス制御や公開インタフェース設計が伴わなければカプセル化とは言えません。
解法ステップ
- 問題文のキーワード(属性、振る舞い、一つにまとめる)を確認する。
- 各選択肢の定義を思い出す(カプセル化、クラス化、集約化、汎化)。
- 「属性+振る舞いをまとめる」=「データと操作を一体化し隠蔽する」=カプセル化と結び付ける。
- 他の選択肢の意味(設計図、部分関係、一般化)と合致しないことを確認して除外する。
選択肢別の誤答解説
- ア: カプセル化 — 正解。属性と振る舞いを一体化し、内部を隠蔽する概念。公開インタフェースで操作させる点が重要。
- イ: クラス化 — 誤り。クラス化はオブジェクトの設計や型を定義する行為であり、概念としての「まとめる」の一側面を指すが、隠蔽やインタフェース設計まで含意しない。
- ウ: 集約化 — 誤り。集約(aggregation)はオブジェクト同士の「部分/全体(has-a)」関係を表すもので、属性と振る舞いをまとめる概念ではない。
- エ: 汎化 — 誤り。汎化(generalization/継承)は共通点を抽出して一般化する関係(is-a)であり、属性と振る舞いのまとめとは異なる。
補足コラム
カプセル化はオブジェクト指向の三大原則(カプセル化、継承、ポリモーフィズム)の基礎となる考え方です。実装上はプライベート変数やプロパティ、アクセサ(getter/setter)、インタフェース設計などで表現されます。カプセル化がうまくできていると、内部実装を変更しても外部コードに影響を与えにくく、保守性が向上します。
例(Python):
class Account:
def __init__(self, balance):
self._balance = balance # 非公開扱いの属性(慣習)
def deposit(self, amount):
if amount > 0:
self._balance += amount
def withdraw(self, amount):
if 0 < amount <= self._balance:
self._balance -= amount
def get_balance(self):
return self._balance
# 外部は公開メソッドだけで操作する(カプセル化の実際例)
FAQ
Q1: 「クラス」と「カプセル化」は同じものですか?
A1: いいえ。クラスはオブジェクトの設計図であり、カプセル化はデータと振る舞いをまとめて隠蔽する設計原則です。クラスはカプセル化を実現する手段の一つです。
A1: いいえ。クラスはオブジェクトの設計図であり、カプセル化はデータと振る舞いをまとめて隠蔽する設計原則です。クラスはカプセル化を実現する手段の一つです。
Q2: カプセル化はなぜ重要ですか?
A2: 内部状態の保護、外部依存の低減、変更時の影響範囲の縮小、インタフェースを通した一貫した操作の保証など、保守性と安全性が向上します。
A2: 内部状態の保護、外部依存の低減、変更時の影響範囲の縮小、インタフェースを通した一貫した操作の保証など、保守性と安全性が向上します。
Q3: 集約と合成の違いは?(補足的に)
A3: 集約は「緩い所有」を示す(部品は独立して存在可能)、合成は「強い所有」で部品のライフサイクルが全体に依存します。どちらもカプセル化とは別の関係性の概念です。
A3: 集約は「緩い所有」を示す(部品は独立して存在可能)、合成は「強い所有」で部品のライフサイクルが全体に依存します。どちらもカプセル化とは別の関係性の概念です。
関連キーワード: オブジェクト指向、カプセル化、隠蔽、クラス、メソッド、属性、アクセス制御、集約、継承、ポリモーフィズム、設計原則、API設計

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

