見出し画像

アラン・ケイのオブジェクト指向プログラミング

アラン・ケイがオブジェクト指向プログラミング (OOP) をどう考えていたか。

ぼくのしっている中では、以下のケイ自身のメールがいちばん簡潔で分かりやすい説明のひとつと思います。2003年にかかれたもので、メールで質問したステファン・ラム Stefan Ram さんが、ケイの了解を得て公開したメールです。

Dr. Alan Kay on the meaning of object-oriented programming

その後もケイの考えは変化していると思いますが、大筋は今もこの文章で説明されたものに近いと、ぼくは理解しています。

このメールには、メッセージングや局所での状態の保持や隠ぺい、そして遅延結合が重要、といったことがクリアに説明されています。

で、ここで注目したいのは2点。ケイの考えているオブジェクトは「ある程度」自立した存在であり、かつ、単独ではなくメッセージをとおして相互作用するそれらの集まりを想定している点です。

たとえば以下の説明で、彼はオブジェクトを生きものの細胞、あるいはコンピュータにたとえていますが、それぞれあるひとつの細胞やコンピュータではなく、それらの集まりをイメージしていると、ぼくは理解しています。

- I thought of objects being like biological cells and/or individual computers on a network, only able to communicate with messages (so messaging came at the very beginning -- it took a while to see how to do messaging in a programming language efficiently enough to be useful).
(最初のメールのか条書き最初の項目)
- 私は、オブジェクトが生きものの細胞、あるいはあるネットワーク上にある個々のコンピュータのような存在だと考えています。それらは、メッセージだけでコミュニケーションをとります (だからメッセージングというアイディアは最初からあったのですが、プログラミング言語でうまく使うしくみが分かるまでに少し時間がかかりました)。

日本語にした場合、単独ではなくグループであるという点がぼやけるかくどくなってしまうのですが、生きものの細胞の場合に cells、コンピュータではあるひとつのネットワーク上の computers とされています。ここから、ケイのイメージはたがいに相互作用しあうオブジェクトの集まりとするのが妥当と考えているワケです。

では、自立した存在とはどのようなものなのでしょうか。具体的には、いくつかの代数式 algebra をもつ存在かもしれないと、ケイは説明しています。

- My math background made me realize that each object could have several algebras associated with it, and there could be families of these, and that these would be very very useful.
(最初メールのか条書き3番目)
- 数学を学んだ私は、それぞれのオブジェクトが、自分に関係するいくつかの代数式をもっているかも知れないこと、そしてそれらにはファミリー (似た属性のグループ) があり、とても便利なものかも知れないことに気づきました。

代数式とは、おそらくオブジェクトのふるまいを記述したものだと、ぼくは考えています。

そのふるまいにファミリーがある (there could be families of these) という性質は、のちに「多態性 polymorphism」とよばれるようになります (同じか条書き3番目の真ん中あたり)。でもケイは多態性という用語を気に入っていないようで、「genericity」としています。ぴったりの日本語が浮かびませんが、「属性」をやや柔らかくしたような意味でしょうか。

つまり、ケイの考えていた OOP は、すべてオブジェクトでできているけれど、それらは自分で行動できるほどに自立した存在であり、かつメッセージをとおして相互作用しあうものの集まりを想定している (この行動は広い意味で使っています)。

そして、自立したオブジェクトがメッセージをやりとりしながら形づくる全体は、個々のオブジェクトの総和よりも高い機能を発揮する可能性がある。

この仮説 theory をもとにプログラミングするスタイルが、ケイの OOP ではないかと、とぼくは考えています。

相互作用する自立したオブジェクトの集まり、という想定を理解しておくことは、とくに OOP というスタイルをプログラミング以外の分野に応用する場合に重要だと考えています。

もちろん、ケイの以外の応用自体がダメという意味ではありません。自立していないオブジェクトをたくさん集めても、そこから(ケイの説く OOP の効果を予想しながら)オブジェクトの総和より大きなものを期待するのはまちがっているかもしれない、というアイディアです。

勘ちがいしている可能性もありますが、たとえば、デジタル情報カードをあるデータベースにたくさん貯め込んでも、ただそれだけから新しいアイディアが生まれてくることは、少なくともケイのモデルからは期待できない、ということだとぼくは理解しています。

自立とは何か。ケイがオブジェクトにみた代数式のようなものとは何か。そのあたりも、おもしろい問題だと思います。これについては、自立した存在である生命の定義などで散々苦労してきた生物学の体系が、もしかすると役立つのではないかと予想しています。

この記事が気に入ったらサポートをしてみませんか?