オブジェクト指向
アラン・ケイのオブジェクト指向とは > 2000年代の言及

2003年にアラン・ケイはオブジェクト指向の貢献でチューリング賞を受賞し、知人から改めてオブジェクト指向の意味を尋ねられたケイは以下のようにメール返信している。このメールは60年代末からの構想をさり気なく簡潔にまとめたものとしてしばしば引用される。ここでは文章順に各要点を抜粋していく。
I thought of objects being like biological cells and/or individual computers on a network, only able to communicate with messages.
（さながら生物の細胞、もしくはネットワーク上の銘々のコンピュータ、それらはただメッセージによってコミュニケーションする存在、僕はオブジェクトをそう考えている）
上記はケイ本来のオブジェクトの在り方を述べたものであり、特に解説はしない。
I wanted to get rid of data. The B5000 almost did this via its almost unbelievable HW architecture. I realized that the cell/whole-computer metaphor would get rid of data, ...
（僕はデータを取り除きたかった。これをバロースB5000は驚くべきHWアーキテクチャでほとんど実現していた。僕は気付いた。細胞/全体コンピュータメタファはデータを除去できるであろうと、）
ここでプログラムからデータを取り除きたいという考えが提示されている。
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.
（僕の数学専攻経験がこれを気付かせた。各オブジェクトは幾つかの関連付けられた代数を持ち、またその系統群もあるかもしれない。それらは大変有用になるだろうと）
ここでの代数は、プロセス代数か、プログラミングに適用した代数的構造とも解釈できる。
OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things.
（僕にとってのOOPとは、メッセージング、ステートプロセスの局所保持かつ保護かつ隠蔽、徹底的な遅延バインディング、これだけの意味だった）
メッセージングは造語に近く、メッセージパッシングに類似の概念であり、ただのリモートプロシージャコールとは異なることが明言されている。ステートプロセスは、データとコードの一元化概念であり、これも造語である。遅延バインディングは、シンボルと実体の結合をランタイムで決定する概念である。
One of the things I should have mentioned is that there were two main paths that were catalysed by Simula. The early one (just by accident) was the bio/net non-data-procedure route that I took. The other one, which came a little later as an object of study was abstract data types, and this got much more play.
（僕が触れるべきだった一つは、Simulaを触媒にした二本の道があったということだ。最初の一本はバイオ/ネットな非データ手順で僕が選んだ方。少し遅れたもう一本は抽象データ型でこっちの方がずっと賑わっている）
ここで抽象データ型に対しての、非データ手順（non-data-procedure）というワードが登場する。振る舞いを通してデータを扱うというデータ抽象の概念を、更に抽象化したものが非データであり、代数学で言う写像だけでデータを表現するという概念を指している。これにケイの生物学専攻を背景にしたバイオ/ネット（bio/net）なる考えが加えられている。
And the very first problems I solved with my early Utah stuff was the "disappearing of data" using only methods and objects. At the end of the 60s (I think) Bob Balzer wrote a pretty nifty paper called "Dataless Programming", and shortly thereafter John Reynolds wrote an equally nifty paper "Gedanken" (in 1970 I think) in which he showed that using the lamda expressions the right way would allow data to be abstracted by procedures.
（ユタでの専攻知識で僕が解決した最初期の問題はメソッドとオブジェクトのみを用いてのデータの消滅だった。1960年代末にBob Balzerはデータレス・プログラミングというものを書き示した。直後の1970年にJohn Reynoldsはラムダ式を用いての手順によるデータ抽象化の方法を書き示した）
非データ手順（non-data-procedure）に関連付けられるものとしては、代数的構造、圏論の射や関手の構造、Futuresとpromises（英語版）、ポイントフリースタイル（英語版）、プロセス代数、アクターモデル、自由モナドなどが挙げられる。
The people who liked objects as non-data were smaller in number,
（非データとしてのオブジェクトを好む者は少なかった、）
ここで歴史に戻る。1970年前後になるとソフトウェア危機としても語られるプログラム規模拡大に対応するために、サブルーチンとデータをまとめたプログラムモジュールという機能が登場した。それと同時期の1967年にオルヨハン・ダールらはクラスという機能を備えたSimula67を開発し、1969年からエドガー・ダイクストラは抽象データ構造という概念を備えた構造化プログラミングを提唱した。1974年からIBM社中心の研究者たちが構造化分析/設計と総称される技法を発表し、構造化プログラミングはこちらに取って代わられた。1972年からアラン・ケイはメッセージングという概念を備えたオブジェクト指向を誕生させている。オブジェクト指向は後にクラス・パラダイムにマウントされている。
構造化設計は、サブルーチン複合体とデータ構造を扱っている具象データ（concrete data）技術である。Simula発のクラスとダイクストラ発の抽象データ構造は、プログラムモジュールにカプセル化・継承・多態性を備えて抽象体として扱おうとする抽象データ（abstract data）技術である。そしてアラン・ケイ本来のオブジェクトとは、プログラムモジュールを生物学と代数学の観点から再解釈した非データ（non data）技術であった。構造化開発は1980年代までの主流であり、続けてオブジェクト指向が主流になったが、現在においてもクラスをただのデータとメソッドの複合体として扱っているようなオブジェクト指向は、構造化開発と大差ないものになり「具象データ」から「抽象データ」への思考転換の難しさを物語っている。モジュールの抽象化が提唱され始めたのは1970年代であったが、同時期にアラン・ケイは「抽象データ」を更に抽象化した「非データ」を構想していた。