トップへ戻る

オブジェクト指向プログラミング(Java)

オブジェクトとは

概要

オブジェクトとは何か、これはオブジェクト指向プログラミングがどのようにして作られたものか、その起源についてを知ると言うことになる。
まずは、このオブジェクトとその起源についてから述べていく

オブジェクトとその起源

オブジェクト指向という考え方はパーソナルコンピュータの父として知られるアラン・ケイさんによって発案されたプログラミング手法の一つである。
アラン・ケイさんはオブジェクト指向について以下のように述べている。

私はコンピュータに関して発明をする際に、コンピュータに関する知識は全く使いません。生物や音楽など関係のない分野の知識と類推を利用します。私がオブジェクト指向の考え方を考えついた際も、普通の人が コンピュータについて考える様なことは考えずに、生物がどの様にして複雑な構造を作るか考えました。

このように、オブジェクト指向プログラミングはコンピュータが起源の考え方ではなく、生物の構造をもとに考えられたプログラミング手法であるということがわかると思う。
そのためプログラミングとしてオブジェクト指向を捉えるのではなく生物として捉えてみるとまた違う世界が見えてくるのではないだろうか?
さて、本題のオブジェクトについてであるが、上記までの点を踏まえて簡単に類推できるものは細胞である。
細胞には様々なものが含まれています。DNAを保管している核、エネルギー管理を行うミトコンドリア、ゴミを貯めておく液胞、貯蔵庫となるゴルジ体などがあり、これを他の細胞などとの通信を行う細胞膜が覆うことによって一つの細胞を成している。
一方、オブジェクトについて見てみると、オブジェクト内部にはデータ領域としてインスタンス変数と呼ばれる領域、メソッドと呼ばれる処理をする領域、それを覆い他のメソッドなどと通信を行うアンテナのようなものがついていると考えられる。 このことから、オブジェクトとは細胞を簡略化したものであると考えられる。

また、細胞は複数集まることで一つの役割をもつ臓器と呼ばれるものに進化をする。そして、その臓器が集まることによって一つの生物を作り上げていることは小中学の授業で習っていることである。
これをプログラムに置き換えるならば、オブジェクトの集合体がクラスと呼ばれるものに進化し、さらにはそのクラスなどが集まることによって一つのプログラムを構成していると考えられる。

そして、1858に医師で生物学者のルドルフ・ウィルヒョウさんは以下の様に述べている。

全ての細胞は細胞から(All cells come from cells)

これは、生物の基本単位が細胞であるということが言われています。このことからオブジェクト指向に置き換えるならば「全てのオブジェクトはオブジェクトから(All objects come from objects)」と言えるのではないでしょうか?

複製と差異

生物が成長する際に行われることは細胞分裂です。細胞分裂を行う際は「体細胞分裂」と呼ばれる、一つの細胞からコピーを行い二つの細胞に分かれるということである。これを細胞周期というサイクルで反復して増えていくというのが一般的な考えになる。
つまり、オブジェクトが行える根本的なメソッドはコピーです。もしくはインスタンスを生成するということです。また、上記のウィルヒョウさんの言葉から根本は複製の反復であるということが紐付けられます。
しかしながら、ただ反復して複製をするだけでは生物や臓器は作られません。複製をする際に大同小異様々な差異が生じることによってある細胞は脳細胞に、ある細胞は消化器官、ある細胞は神経に変化していく。ここに介在するのは細胞膜を通して受け取るホルモンになどによる刺激や環境などが影響を与えることで変化を生じている。
オブジェクトにおけるこの差異はアンテナを介して受信するメッセージになる。メッセージに差異が生じることによってオブジェクトでの複製が異なる動作をとるということになる。
この考えこそがオブジェクト指向における根幹であり、一番大切な部分である。クラスやインヘリタンスなどの前に、オブジェクトが複製して増えること、メッセージによって差異が生じて多様性(ポリモーフィズム)につながるということ。