1990年代の言及
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/12/24 07:39 UTC 版)
「オブジェクト指向」の記事における「1990年代の言及」の解説
1992年にACMからプログラミング言語史編纂の一環として執筆を依頼されたアラン・ケイは、翌93年の「The Early History Of Smalltalk」でオブジェクト指向の原点としてのSmalltalkについて解説している。冒頭の序章で設計理念が説明され、第一章から第三章まではその着想元になったバロースB5000、Sketchpad、Simula、Flex machine、LISPなどの技術史が記され、第四章から第六章まではSmalltalkの開発史が綴られている。ここでは序章から特徴的な要点のみを抜粋する。 Smalltalk's design—and existence—is due to the insight that everything we can describe can be represented by the recursive composition of a single kind of behavioral building block that hides its combination of state and process inside itself and can be dealt with only through the exchange of messages.(Smalltalkの設計―及び存在―とは、私たちの思い描ける全てが、自己の状態とプロセスの結合を内部隠蔽した個々の振る舞い組立ブロックの再帰構成によって表現され、徹底的なメッセージの交換のみによって処理されるということだ。) 再帰構成すなわち再帰の概念は、後続文にも繰り返し登場している。もっとも再帰は一般知識であり、例えばジョン・マッカーシーもLISPの設計をrecursive functions of symbolic expressions and their computation by machine.(記号式の再帰関数群と機械によるその計算)と概略していた。メッセージ交換は、徹底的な疎結合および情報隠蔽(英語版)を示唆している。 In computer terms, Smalltalk is a recursion on the notion of computer itself. Instead of dividing "computer stuff" into things each less strong than the whole—like data structures, procedures, and functions which are the usual paraphernalia of programming languages—each Smalltalk object is a recursion on the entire possibilities of the computer.(Smalltalkは計算概念の自己再帰である。コンピュータプログラムをその全体からの劣化要素―データ構造、手続き、関数といった言語機能の諸々に分割していくのではなく、Smalltalkのオブジェクトはそれぞれが計算の総体可能性を備えた再帰要素になる。) ケイが理想とする計算の総体可能性の反対である劣化要素への分割とは、いわゆる型システムの導入を指している。他の論考でもケイは特に静的な型システムに対して否定的な見解を示していた。 Philosophically, Smalltalk's objects have much in common with the monads of Leibniz and the notions of 20th century physics and biology. Its way of making objects is quite Platonic in that some of them act as idealizations of concepts—Ideas—from which manifestations can be created. (哲学面でのSmalltalkオブジェクトは、ライプニッツのモナドや20世紀の物理・生物学思考との共通点を見出せる。オブジェクトの構築は、イデアから現象が創生されるという全くのプラトニックである。) ここでのモナドはObjectの情報隠蔽を示唆しており、イデア論はクラスのインスタンス化を示唆している。ただし、クラスもまたメタクラスのインスタンス化とするような哲学は、非実用的であったと言及されている。Objectを再帰構成するMetaobjectによる拡張性と、機能注入の視点から継承を再解釈したMix-inによる拡張性は重視されており、それらを初めてアプローチしたCLOSのMetaobject Protocolを、ケイは1997年のOOPSLAでOOPへの最も深い洞察と評している。Objectがモナドで言う”窓のない部屋”であるのに対して、Metaobjectは”部屋のない窓”であり、窓の向こう側にある部屋の中の窓の向こう側に~という風に、他者との繋がり(縁)で左右される自己対象を表現していた。 第四章では、Smalltalkの言語仕様が六つに概略されている。 1, EverythingIsAnObject.2, Objects communicate by sending and receiving messages (in terms of objects). 3, Objects have their own memory (in terms of objects). 4, Every object is an instance of a class (which must be an object). 5, The class holds the shared behavior for its instances (in the form of objects in a program list). 6, To eval a program list, control is passed to the first object and the remainder is treated as its message. この和訳は以下のようになるが、ここでは長い説明を避けて特徴的な要点のみを解説する。 すべてはオブジェクトである。 オブジェクトはメッセージの送信と受信によってコミュニケーションする。 オブジェクトは自身の記憶を持つ。 すべてのオブジェクトはクラスのインスタンスである。クラスもまたオブジェクトである。 クラスはその各インスタンスで共有される振る舞いを保持する。振る舞いとはプログラムリスト・オブジェクトである。 プログラムリストの評価では、制御は最初のオブジェクトに渡され、残りはそのメッセージとして扱われる。 (2)は様々に解釈されるが、コミュニケーションするオブジェクトは、プロセスやアクターとしての性格が強くなる。(3)の記憶は簡単に言うとフィールドやプロパティや属性であるが、オブジェクトの振る舞いを制約するための私的環境を示唆している。(4)は、クラスもまたメタクラスのインスタンス化であるという再帰構成を示唆している。(5)の振る舞いは簡単に言うとメソッドであるが、LISPのフォームリストに似たオブジェクトとして保持されることを示唆している。(6)は、式内のオブジェクトはその時の並べられた順序によって、いずれもがコントローラ(関数式)になり、いずれもがそれへのメッセージ(引数)になることを示唆している。
※この「1990年代の言及」の解説は、「オブジェクト指向」の解説の一部です。
「1990年代の言及」を含む「オブジェクト指向」の記事については、「オブジェクト指向」の概要を参照ください。
- 1990年代の言及のページへのリンク