最終更新日:2026年8月7日
fe technology software object-oriented
まず結論
カプセル化(encapsulation)とは、オブジェクトが持つデータと処理をひとまとめにし、内部の実装を外部から直接扱わせない考え方です。
科目Aでは、次の表現を手掛かりに判断します。
内部データや実装を隠す
→ カプセル化
内部を変更しても、外部への影響を抑えやすい
→ カプセル化の効果
オブジェクト指向の代表的な性質は、次のように切り分けます。
内部を隠す
→ カプセル化
親の性質を引き継ぐ
→ 継承
同じ命令で異なる動作をする
→ 多態性
直感的な説明
カプセル化は、機械の操作盤に近い考え方です。
利用者は、機械内部の配線や制御回路を知らなくても、ボタンやスイッチを使って操作できます。
利用者
↓
公開された操作だけを使う
↓
内部で処理される
内部構造が変更されても、操作方法が同じなら、利用者は変更を意識せずに使い続けられます。
オブジェクト指向でも同様に、外部から使ってよい操作だけを公開し、内部のデータ構造や処理方法は隠します。
定義・仕組み
データと処理をひとまとめにする
オブジェクトは、データである属性と、そのデータを操作するメソッドを持ちます。
オブジェクト
├─ 属性
└─ メソッド
例えば、銀行口座をオブジェクトとして考えると、次のように表せます。
銀行口座
├─ 残高
├─ 入金する
└─ 出金する
残高を外部から自由に変更できると、不正な値が設定される可能性があります。
残高 = -1000000
そこで、残高は内部に隠し、入金や出金のメソッドを通して変更します。
外部との接点を限定する
カプセル化では、外部から利用できる操作を明確にします。
外部へ公開する
→ 入金する
→ 出金する
→ 残高を確認する
内部へ隠す
→ 残高の保存方法
→ 入力値の検査方法
→ 計算処理の詳細
外部は公開された操作だけを使うため、内部の実装を変更しても影響を抑えやすくなります。
情報隠蔽との関係
カプセル化と情報隠蔽は、試験では近い意味で扱われることがあります。
整理すると、次の関係です。
データと処理をまとめる
→ カプセル化
内部の詳細を外部から隠す
→ 情報隠蔽
カプセル化によって、情報隠蔽を実現しやすくなります。
変更の影響を小さくする
内部のデータ構造や処理方法を変更しても、外部向けの操作方法を維持できれば、利用側の修正を減らせます。
内部実装を変更
↓
公開されたインタフェースは維持
↓
ほかのオブジェクトへの影響を抑える
どんな場面で使う?
不正なデータ変更を防ぐ
データを直接変更させず、メソッドを通して値を確認できます。
入力値を確認する
値の範囲を確認する
権限を確認する
例えば、出金処理では、残高不足を確認してから残高を減らすようにできます。
プログラムの変更をしやすくする
内部の実装を変更しても、外部からの使い方が同じなら、利用側のプログラムを大きく修正せずに済みます。
保存方法を変更
計算方法を変更
内部データ構造を変更
オブジェクトごとの責任を分ける
各オブジェクトが、自分のデータと処理を管理するため、役割を分けやすくなります。
注文オブジェクト
→ 注文内容を管理
顧客オブジェクト
→ 顧客情報を管理
商品オブジェクト
→ 商品情報を管理
よくある誤解・混同
継承との違い
継承は、既存のクラスをもとに新しいクラスを作る仕組みです。
親クラス
↓ 属性やメソッドを引き継ぐ
子クラス
試験では、次の表現が目印です。
親クラス
子クラス
派生
属性を引き継ぐ
メソッドを引き継ぐ
内部を隠す
→ カプセル化
親から引き継ぐ
→ 継承
多態性との違い
多態性(ポリモルフィズム)は、同じ操作でも、対象となるオブジェクトによって処理内容が変わる性質です。
円.draw()
→ 円を描く
四角形.draw()
→ 四角形を描く
呼び出す側は同じ draw() を使っても、受け取るオブジェクトによって動作が変わります。
同じメッセージ
異なる動作
→ 多態性
抽象化との違い
抽象化は、対象の重要な特徴だけを取り出して表現する考え方です。
例えば、自動車をシステムで扱う場合、すべての部品情報を表す必要はありません。
必要な特徴
→ 車種
→ 速度
→ 燃料量
不要な詳細
→ ボルトの本数
→ 塗装工程
必要な特徴だけに注目
→ 抽象化
内部の詳細を隠す
→ カプセル化
カプセル化は、まとめるだけではない
データとメソッドを一つにまとめるだけでなく、外部からのアクセスを制限することが重要です。
まとめる
+
内部を隠す
→ カプセル化
ユーザー定義型の追加はカプセル化ではない
独自の型を定義できることは、カプセル化そのものの効果ではありません。
構造体や列挙型など、手続き型言語でもユーザー定義型を作れる場合があります。
独自の型を作れる
≠ カプセル化
科目Aでの切り分け
選択肢の動詞に注目すると判断しやすくなります。
隠す・影響を抑える
→ カプセル化
引き継ぐ・派生する
→ 継承
同じ命令・異なる動作
→ 多態性
特徴を取り出す
→ 抽象化
特に、次の表現があればカプセル化を疑います。
内部データを直接触らせない
内部実装を隠す
内部を変更しても影響を受けにくい
公開された操作だけを利用する
まとめ(試験直前用)
- カプセル化は、データと処理をひとまとめにし、内部実装を隠す考え方
- 外部からは公開された操作だけを利用する
- 内部を変更しても、ほかのオブジェクトへの影響を抑えやすい
- 親クラスの属性やメソッドを引き継ぐのは継承
- 同じメッセージで異なる動作をするのは多態性
- 必要な特徴だけを取り出すのは抽象化
隠す
→ カプセル化
引き継ぐ
→ 継承
同じ命令で動作が変わる
→ 多態性