アラン・ケイのオブジェクト指向(Smalltalk)を誤解していたようです
「 プログラマーのジレンマ 」に、わずか2ページほどですが、アラン・ケイのオブジェクト指向を紹介しているページがあります。これを読んでアラン・ケイのオブジェクト指向を誤解していたことを知りました。
アラン・ケイの、あるいはSmalltalk的なオブジェクト指向と、C++的なオブジェクト指向、つまりJavaやRubyなどの、いわゆる現在主流のオブジェクト指向に違いがある、という話は聞いたことがありました。
この違いを、ぼくは勝手に、Smalltalk的オブジェクト指向はオブジェクト中心、C++的オブジェクト指向はクラス(型)中心、つまり今風の言葉を使うと、前者がプロトタイプベース、後者がクラスベースの違いだろうと思っていました。断片的な知識からの勝手な想像でした。この想像は間違っていたようです。
アラン・ケイに関する記述の一部を引用します。
コンピュータ用語でいうと、スモールトークはコンピュータ自体の概念の再帰である。「コンピュータというもの」を、プログラミング言語にたいてい付随するデータ構造、手続き、関数といった諸々の「全体より強度の弱いもの」に分割するのではなく、スモールトーク・オブジェクトはコンピュータの可能性全体の再帰である。つまり、そのセマンティクスは、無数のコンピュータがすべて超高速ネットワークでつながっているようなものだ。
書籍「 パーフェクトJava 」でも繰り返し唱えていますが、現在主流のC++的オブジェクト指向は、分割統治の上に立つ技法です。全体を部分に分割してソフトウェアの複雑さを軽減します。データと手続きを一体化することの意味は、分割した部品の独立性を上げるためや、部品相互の関係性を整理するための必要性から導かれます(逆に言えば、この目的を達成できないのなら、データと手続きの一体化にこだわる必要はありません)。
アラン・ケイ的、あるいはSmalltalk的オブジェクト指向は、上記の説明を見ると、分割統治ベースのオブジェクト指向とは、還元論と全体論ぐらいに正反対なモノに見えます。
C++的オブジェクト指向、分割統治の技法としてのオブジェクト指向はまさに還元主義です。独立性が高い部分に分割することで、全体の複雑さを軽減できるという考えです。
Smalltalk的オブジェクト指向は還元論的プログラミングを否定するかのように読めます。
オブジェクトが必要なすべてのモノ(データと手続き)と一緒に移動することの意味は、部品の独立性とは関係せず、むしろ分割への否定ですらあります。オブジェクトは、それ自体、コンピュータ全体の投影なので分割しようもないと主張しています。
プログラミング言語のSmalltalkは、自分の知る限り、ここまでの過激さは感じませんでしたが(プログラミング言語Smalltalkの印象はRubyからLispっぽさを抜いた感じです...冗談です)。
わずか2ページでアラン・ケイを分かったように語るのは気がひけるので、アラン・ケイに関する本を読んでみようと思います。と言っても、何を読めばいいのか分かりませんが。
- Category(s)
- カテゴリなし
- The URL to Trackback this entry is:
- http://dev.ariel-networks.com/Members/inoue/smalltalk-oo/tbping
Re:アラン・ケイのオブジェクト指向(Smalltalk)を誤解していたようです
http://metatoys.org/oxymoron/oxymoron.html
http://www.purl.org/stefan_ram/pub/doc_kay_oop_en
Re:アラン・ケイのオブジェクト指向(Smalltalk)を誤解していたようです
リンク先を読んでみると、Smalltalk vs. C++を全体論vs.還元論と見たのは深読みだった気がしてきました。単なる、動的型vs.静的型の対立軸しか読み取れませんでした。