読み方:カプセルか

カプセル化 【encapsulation】

概要

カプセル化(encapsulation)とは、オブジェクト指向プログラミングにおいて、互いに関連するデータの集合とそれらに対する操作を一つの単位にまとめ、外部に対して必要な情報や手続きのみを提供すること。外から直に参照や操作をする必要のない内部の状態や構造は秘匿される。
カプセル化のイメージ画像

古い時代のプログラミングでは、プログラム中のデータはどのプログラムコードからでも参照したり書き換えることができ、大人数で大規模なプログラムを作ろうとすると、コード中のどこでデータの参照や書き換えが発生するのか把握しきれなくなる問題があった。

オブジェクト指向では、密接に関連するデータ群と、データに対する処理を「オブジェクト」という単位で一体化して管理し、原則としてオブジェクト内のデータはオブジェクト内の手続き(メソッド)からしかアクセスできないようにした。これをカプセル化という。

オブジェクト外のコードからオブジェクトの持つデータや機能を利用したい場合には、オブジェクトが外部に公開しているメソッドを呼び出す形を取る。これにより、データに直接触れるコードをオブジェクト内にまとめることができ、プログラムの規模が大きくなっても変更による影響を局所化しやすい。

十分にカプセル化されたオブジェクトを組み合わせてプログラムを構築していくことにより、オブジェクトの内部の仕様の変更が外部に予期せぬ影響を及ぼしたり、外部からの予期せぬ干渉でオブジェクトの状態が壊されることを防ぐことができるようになる。

通信におけるカプセル化

データ通信においてカプセル化といった場合には、ある通信手順(プロトコル)によるデータ表現の内部に、別のプロトコルによるデータ表現を埋め込んで伝送することを指す。

通信プロトコルの多くは、送受信するデータの基礎単位(パケットやフレームなど)の構造を定義しており、先頭に制御情報などを含むヘッダ領域、その後に運びたいデータの本体(ペイロードやボディ)が続いている。末尾にも制御情報などが付加される場合もある。

このデータ本体部分に、より上位のプロトコルの送受信単位を埋め込むことをカプセル化という。カプセル化は入れ子状に多段階で行うこともできる。各階層のプロトコルは自らの機能に専念し、上位あるいは下位のプロトコルの詳細を気にしなくても良くなる。また、インターネットのように様々な伝送媒体や異なる管理主体のネットワークをまたいで通信するのも容易となる。

例えば、LAN上をWebデータが流れる場合、イーサネットフレームのペイロードにIPデータグラムがカプセル化され、IPデータグラムのペイロードにTCPセグメントがカプセル化され、TCPセグメントのペイロードにHTTPメッセージがカプセル化されて伝送される。

(2025.9.6更新)

資格試験などの「カプセル化」の出題履歴

他の用語辞典による「カプセル化」の解説 (外部サイト)