オブジェクト指向
2003年にアラン・ケイはオブジェクト指向の貢献でチューリング賞を受賞し、知人から改めてオブジェクト指向の意味を尋ねられたケイは以下のようにメール返信している。このメールは60年代末からの構想をさり気なく簡潔にまとめたものとしてしばしば引用される。ここでは文章順に各要点を抜粋していく。
上記はケイ本来のオブジェクトの在り方を述べたものであり、特に解説はしない。
ここでプログラムからデータを取り除きたいという考えが提示されている。
ここでの代数は、プロセス代数か、プログラミングに適用した代数的構造とも解釈できる。
メッセージングは造語に近く、メッセージパッシングに類似の概念であり、ただのリモートプロシージャコールとは異なることが明言されている。ステートプロセスは、データとコードの一元化概念であり、これも造語である。遅延バインディングは、シンボルと実体の結合をランタイムで決定する概念である。
ここで抽象データ型に対しての、非データ手順(non-data-procedure)というワードが登場する。振る舞いを通してデータを扱うというデータ抽象の概念を、更に抽象化したものが非データであり、代数学で言う写像だけでデータを表現するという概念を指している。これにケイの生物学専攻を背景にしたバイオ/ネット(bio/net)なる考えが加えられている。
非データ手順(non-data-procedure)に関連付けられるものとしては、代数的構造、圏論の射や関手の構造、Futuresとpromises(英語版)、ポイントフリースタイル(英語版)、プロセス代数、アクターモデル、自由モナドなどが挙げられる。
ここで歴史に戻る。
この和訳は以下のようになるが、ここでは長い説明を避けて特徴的な要点のみを解説する。
すべてはオブジェクトである。
オブジェクトはメッセージの送信と受信によってコミュニケーションする。
オブジェクトは自身の記憶を持つ。
すべてのオブジェクトはクラスのインスタンスである。クラスもまたオブジェクトである。
クラスはその各インスタンスで共有される振る舞いを保持する。振る舞いとはプログラムリスト・オブジェクトである。
プログラムリストの評価では、制御は最初のオブジェクトに渡され、残りはそのメッセージとして扱われる。
(2)は様々に解釈されるが、コミュニケーションするオブジェクトは、プロセスやアクターとしての性格が強くなる。(3)の記憶は簡単に言うとフィールドやプロパティや属性であるが、オブジェクトの振る舞いを制約するための私的環境を示唆している。(4)は、クラスもまたメタクラスのインスタンス化であるという再帰構成を示唆している。(5)の振る舞いは簡単に言うとメソッドであるが、LISPのフォームリストに似たオブジェクトとして保持されることを示唆している。(6)は、式内のオブジェクトはその時の並べられた順序によって、いずれもがコントローラ(関数式)になり、いずれもがそれへのメッセージ(引数)になることを示唆している。