next up previous contents index
Next: オブジェクト指向プログラミング Up:  C++ 言語とプログラミングの基礎 Previous: C から派生した他の言語   Contents   Index

C++ とオブジェクト指向言語

C を基礎に作られたC++ は、 C のもつ良い特徴をすべて受け 継いでいます。さらに、比較的新しいオブジェクトという概念を使え るようにした言語です。

C++ は手続き型の言語 C に SmallTalk などで実現されていたオブジェクト指向 の概念が取り入れられて改良されたオブジェクト指向言語です。AT&T 社のベル 研究所の Bjarne Stroustrup によって、1980 年頃から開発された「クラス付き C」とよばれた言語が元になっており、1983 年に C++ の名前になりました。

ですから、C++ は C とプログラムの作り方の思想は全く異なります。C を知って いる人が C++ になかなか入れないのもその辺に理由があります。

それでは、オブジェクト指向言語とはどういうものでしょうか。手続き型の言 語とどう違うのでしょうか。手続き型言語に対して、オブジェクト指向言 語では作業を実行す る対象であるオブジェクトの性質や 振る舞い方を定義し、このオブジェクトに特定の振る舞いをするようにメッ セージを送るという形でプログラムを記述しま す。

人によってはこの動作してもらうオブジェクトのことを擬人化して、俳優 アクター)とよぶこ とがあります。プログラムは、ある機能をもった俳優に登場してもらい、その俳 優にいろいろなことを頼んで実行してもらい、最後にその俳優に退場してもらう、 そんな形で記述されます。

各オブジェクトのもっているメンバ変数メンバ関数(メッセージを送る ことにより実行してもらえる機能)は、クラスと いう形で定義されます。このように、クラスとはオブジェクトのもつ機能を記述 したもので、プログラムにはまずクラスの定義を書きます。

オブジェクト(俳優)とは、この機能をもったクラスに属する一員ということに なります。したがって、オブジェクト(俳優)は一人とは限りません。同じクラ スに属するオブジェクト(俳優)は、すべて同じ型のメンバ変数をもち、同じメ ンバ関数によりメッセージを受けることができます。だからといって、メンバ変 数の中身はそれぞれ独立に管理されます。

C++ では、今までの C にあった構造体という概念を拡張し、要素として単なる 変数だけでなく関数も含められるようにしました。クラスは、こうした変数と関 数を要素としてもてる構造体として定義されています。こうすることにより比較 的容易にオブジェクト指向言語に対応させたのが C++ なのです。

以上のことからわかるように、オブジェクト指向のプログラムを作るということ は、このオブジェクトの機能を記述するクラスのプログラムと、オブジェクトに 仕事を頼むプログラムを作ることになります。

オブジェクト指向言語でもっとも特徴となることは、オブジェクトの振る舞いを 記述するクラスのプログラムと、メッセージを送る側のプログラムは、かなり独 立して開発できることです。クラスを利用する側はオブジェクトの振る舞い方の 定義の詳細について知らなくてもかまいません。どのように振る舞うかはクラス の側で定義されており、利用者は定義されたメンバ関数を通してしかそのオブジェ クトのメンバ変数を利用することができません。一方、クラス側は利用者側とは 独立にプログラムの改善を図ることができます。

このことをカプセル化とよびます。クラ スがいったん適切に定義されれば、クラスの利用者はその詳細を知らなくても簡単に それを利用してプログラムを組むことができます。一方、クラス側は内部仕様を 自由に変更することができます。


next up previous contents index
Next: オブジェクト指向プログラミング Up:  C++ 言語とプログラミングの基礎 Previous: C から派生した他の言語   Contents   Index
Yoichi OKABE 2006-05-20