Skip to the content.

最終更新日:2026年8月7日

まず結論

カプセル化(encapsulation)とは、オブジェクトが持つデータと処理をひとまとめにし、内部の実装を外部から直接扱わせない考え方です。

科目Aでは、次の表現を手掛かりに判断します。

内部データや実装を隠す
→ カプセル化

内部を変更しても、外部への影響を抑えやすい
→ カプセル化の効果

オブジェクト指向の代表的な性質は、次のように切り分けます。

内部を隠す
→ カプセル化

親の性質を引き継ぐ
→ 継承

同じ命令で異なる動作をする
→ 多態性

直感的な説明

カプセル化は、機械の操作盤に近い考え方です。

利用者は、機械内部の配線や制御回路を知らなくても、ボタンやスイッチを使って操作できます。

利用者
↓
公開された操作だけを使う
↓
内部で処理される

内部構造が変更されても、操作方法が同じなら、利用者は変更を意識せずに使い続けられます。

オブジェクト指向でも同様に、外部から使ってよい操作だけを公開し、内部のデータ構造や処理方法は隠します。

定義・仕組み

データと処理をひとまとめにする

オブジェクトは、データである属性と、そのデータを操作するメソッドを持ちます。

オブジェクト
├─ 属性
└─ メソッド

例えば、銀行口座をオブジェクトとして考えると、次のように表せます。

銀行口座
├─ 残高
├─ 入金する
└─ 出金する

残高を外部から自由に変更できると、不正な値が設定される可能性があります。

残高 = -1000000

そこで、残高は内部に隠し、入金や出金のメソッドを通して変更します。

外部との接点を限定する

カプセル化では、外部から利用できる操作を明確にします。

外部へ公開する
→ 入金する
→ 出金する
→ 残高を確認する

内部へ隠す
→ 残高の保存方法
→ 入力値の検査方法
→ 計算処理の詳細

外部は公開された操作だけを使うため、内部の実装を変更しても影響を抑えやすくなります。

情報隠蔽との関係

カプセル化と情報隠蔽は、試験では近い意味で扱われることがあります。

整理すると、次の関係です。

データと処理をまとめる
→ カプセル化

内部の詳細を外部から隠す
→ 情報隠蔽

カプセル化によって、情報隠蔽を実現しやすくなります。

変更の影響を小さくする

内部のデータ構造や処理方法を変更しても、外部向けの操作方法を維持できれば、利用側の修正を減らせます。

内部実装を変更
↓
公開されたインタフェースは維持
↓
ほかのオブジェクトへの影響を抑える

どんな場面で使う?

不正なデータ変更を防ぐ

データを直接変更させず、メソッドを通して値を確認できます。

入力値を確認する
値の範囲を確認する
権限を確認する

例えば、出金処理では、残高不足を確認してから残高を減らすようにできます。

プログラムの変更をしやすくする

内部の実装を変更しても、外部からの使い方が同じなら、利用側のプログラムを大きく修正せずに済みます。

保存方法を変更
計算方法を変更
内部データ構造を変更

オブジェクトごとの責任を分ける

各オブジェクトが、自分のデータと処理を管理するため、役割を分けやすくなります。

注文オブジェクト
→ 注文内容を管理

顧客オブジェクト
→ 顧客情報を管理

商品オブジェクト
→ 商品情報を管理

よくある誤解・混同

継承との違い

継承は、既存のクラスをもとに新しいクラスを作る仕組みです。

親クラス
↓ 属性やメソッドを引き継ぐ
子クラス

試験では、次の表現が目印です。

親クラス
子クラス
派生
属性を引き継ぐ
メソッドを引き継ぐ
内部を隠す
→ カプセル化

親から引き継ぐ
→ 継承

多態性との違い

多態性(ポリモルフィズム)は、同じ操作でも、対象となるオブジェクトによって処理内容が変わる性質です。

円.draw()
→ 円を描く

四角形.draw()
→ 四角形を描く

呼び出す側は同じ draw() を使っても、受け取るオブジェクトによって動作が変わります。

同じメッセージ
異なる動作
→ 多態性

抽象化との違い

抽象化は、対象の重要な特徴だけを取り出して表現する考え方です。

例えば、自動車をシステムで扱う場合、すべての部品情報を表す必要はありません。

必要な特徴
→ 車種
→ 速度
→ 燃料量

不要な詳細
→ ボルトの本数
→ 塗装工程
必要な特徴だけに注目
→ 抽象化

内部の詳細を隠す
→ カプセル化

カプセル化は、まとめるだけではない

データとメソッドを一つにまとめるだけでなく、外部からのアクセスを制限することが重要です。

まとめる
+
内部を隠す
→ カプセル化

ユーザー定義型の追加はカプセル化ではない

独自の型を定義できることは、カプセル化そのものの効果ではありません。

構造体や列挙型など、手続き型言語でもユーザー定義型を作れる場合があります。

独自の型を作れる
≠ カプセル化

科目Aでの切り分け

選択肢の動詞に注目すると判断しやすくなります。

隠す・影響を抑える
→ カプセル化

引き継ぐ・派生する
→ 継承

同じ命令・異なる動作
→ 多態性

特徴を取り出す
→ 抽象化

特に、次の表現があればカプセル化を疑います。

内部データを直接触らせない
内部実装を隠す
内部を変更しても影響を受けにくい
公開された操作だけを利用する

まとめ(試験直前用)

  • カプセル化は、データと処理をひとまとめにし、内部実装を隠す考え方
  • 外部からは公開された操作だけを利用する
  • 内部を変更しても、ほかのオブジェクトへの影響を抑えやすい
  • 親クラスの属性やメソッドを引き継ぐのは継承
  • 同じメッセージで異なる動作をするのは多態性
  • 必要な特徴だけを取り出すのは抽象化
隠す
→ カプセル化

引き継ぐ
→ 継承

同じ命令で動作が変わる
→ 多態性

© 2024-2026 stemtazoo. All rights reserved.