オブジェクト指向において、データとメソッドを一つのオブジェクトに一体化したうえで、具体的な部分を外側から隠すことをいいます。
オブジェクトがどのようなデータ(フィールド)を持っているか、それはどのように表現されており、どのように処理されているか、といった具体的な部分(実装の詳細)を外側からは見えないようにし(情報隠蔽)、データを操作するために必要なメソッドだけを外部に公開します(内部の実装のために使うメソッドは非公開)。外部への公開と非公開を制御するために、多くのプログラミング言語で、アクセス指定子を用います。
カプセル化がうまくできていると、オブジェクト内部の実装を変更しても、そのオブジェクトの外部に与える影響がなくなります(実行速度やメモリの消費量が変わるといったことはあるにせよ)。また、実装が自身の内側に閉じていれば(外部のデータに依存していなければ)、外部の変更の影響を受けることもありません。さらに、データを操作するためのメソッドのみを公開するため、外部の都合で勝手な変更が行われることがなく、不整合を引き起こすことを防げます。
オブジェクト指向の重要な概念の1つとしてよく知られていますが、実際にはオブジェクト指向に限定されたものではありません。実装を不用意に公開せず、操作に必要なインターフェースのみを公開するということであり、この考え方は多くの場面で効果を発揮します。たとえば、オブジェクト指向プログラミング言語ではないC言語でも、ダイナミックメモリアロケーション(動的メモリ割り当て)によって、(オブジェクト指向の意味での)オブジェクトに見立てたものを生成し、ヘッダファイルに宣言した関数(実装はソースファイル側に記述)を通して操作するといった方法で、カプセル化の考え方を取り入れることができます。
アルゴリズムとデータ構造編【データ構造】第5章では、この考え方を使ってスタックを実装しています。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |