カプセル化とは?
カプセル化とは、オブジェクト指向プログラミングにおいて、互いに関連するデータの集合とそれらに対する操作をオブジェクトとして一つの単位にまとめ、外部に対して必要な情報や手続きのみを提供することを意味する。外から直に参照や操作をする必要のない内部の状態や構造は秘匿される。
カプセル化のあれこれ!
オブジェクトは外部に公開された手続き(メソッド)により機能を提供される。内部の状態を表す変数なども、外部からの参照・操作が必要なものだけが専用の手続きによってアクセスが可能となり、それ以外は外から見えない存在となる。
十分にカプセル化されたオブジェクトを組み合わせてプログラムを構築していくことにより、オブジェクトの内部の仕様の変更が外部に予期せぬ影響を及ぼしたり、外部からの予期せぬ干渉でオブジェクトの状態が壊されることを防ぐことが可能となる。
○通信におけるカプセル化
データ通信においてカプセル化といった場合には、ある通信手順(プロトコル)によるデータ表現の内部に、別のプロトコルによるデータ表現を埋め込んで伝送することを指している。
通信プロトコルの多くは、送受信するデータの基礎単位(パケットやフレームなど)の構造を定義しており、先頭に制御情報などを含むヘッダ領域、その後に運びたいデータの本体(ペイロードやボディ)が続いている(末尾にも制御情報などが付加される場合もある)。このデータ本体部分に、より上位のプロトコルの送受信単位を埋め込むことをカプセル化という。
カプセル化は多段階に行われることが多く、各階層のプロトコルは自らの機能に専念し、上位あるいは下位のプロトコルの詳細を気にしなくても良くなる。また、インターネットのように様々な伝送媒体や異なる管理主体のネットワークをまたいで通信するのも容易となる。
○ポリモーフィズム(polymorphism)
ポリモーフィズムとは、プログラミング言語の持つ性質の一つで、ある関数やメソッドなどが、引数や返り値の数やデータ型などの違う複数の実装を持ち、呼び出し時に使い分けるようにできることを意味する。
静的型付けの言語で関数などを定義する場合には、引数や返り値のデータ型を指定しなければならないため、処理内容が同じでもデータ型ごとに整数用、浮動小数点数用、複素数型用…といったように異なる(名前の)関数を何度も繰り返し定義しなくてはいけなくなり、呼び出し側も型ごとに異なる関数を呼び分けなければならない。
オブジェクト外からでもカプセル化されたデータを変更する方法が存在します。