日付:2003年7月23日水曜日09:33:31 -0800宛先:Stefan Ram [プライバシー保護のため削除]送信者:Alan Kay [プライバシー保護のため削除]件名:Re:「オブジェクト指向」の明確化
こんにちはステファン-
遅れてすみませんが、休暇中です。
6:27 PM +0200 7/17/03、Stefan Ramは次のように書いています。
親愛なるケイ博士、
このテーマに関するチュートリアルページでは、「オブジェクト指向プログラミング」という用語に信頼できる言葉を付けたいと思います。私が「信頼できる」と考える唯一の2つのソースは、「ISO / IEC 2382-15」で「オブジェクト指向」を定義する国際標準化機構です。
私はやったと確信しています。
残念ながら、その用語の定義または説明を含むWebページまたはソースを見つけることは困難です。この点であなたが言ったことについていくつかの報告がありますが(「継承、ポリモーフィズム、カプセル化」など)、これらは直接の情報源ではありません。また、後で「メッセージング」に重点を置くことも承知していますが、それでも「オブジェクト指向」について知りたいです。
記録、私のチュートリアルページ、およびさらなる配布と公開については、説明してください:
「オブジェクト指向」という用語が最初に使用されたのはいつですか?
11月66日以降、ユタ州でスケッチパッド、Simula、ARPAnetのデザイン、バローズB5000、および生物学と数学の私のバックグラウンドの影響を受けて、プログラミングのアーキテクチャを考えました。おそらく私がやっていることを誰かが私に尋ねたのは1967年で、「私はオブジェクト指向プログラミングだ」と言いました。
当初のコンセプトは次の部分で構成されていました。
オブジェクトは、生物学的細胞やネットワーク上の個々のコンピューターのようなものであり、メッセージとのみ通信できると考えました(そのため、メッセージングは最初から始まりました-プログラミング言語でメッセージングを効率的に行う方法を見るのに時間がかかりました便利である)。
データを取り除きたかった。B5000は、ほとんど信じられないほどのHWアーキテクチャを介してこれをほぼ実現しました。セル/コンピューター全体のメタファーはデータを取り除き、「<-」は単なる別のメッセージトークンになることを認識しました(これらすべてのシンボルを関数と手順。
数学の背景から、各オブジェクトには複数の代数が関連付けられている可能性があり、それらのファミリーが存在する可能性があり、これらは非常に有用であることがわかりました。「ポリモーフィズム」という用語はかなり後に付けられたもので(ピーターウェグナーによると思います)、それは実際には関数の命名法に由来するため、あまり有効ではありません。私は、準代数形式で一般的な動作を処理するための「汎用性」という用語を作成しました。
Simula IまたはSimula 67が継承を行う方法が好きではありませんでした(NygaardとDahlは単なる素晴らしい思想家でありデザイナーだと思っていましたが)。そこで、理解が深まるまで、継承を組み込み機能として除外することにしました。
このアーキテクチャを使用した私の最初の実験は、van WijngaartenとWirthの「Algolの一般化」とWirthのEulerを改造したモデルを使用して行われました。これらはどちらもかなりLISPに似ていますが、より一般的な読みやすい構文です。そのとき、私は具体的なメタ言語のモンスターLISPのアイデアを理解していませんでしたが、IronsのIMPを含むさまざまなソースから引き出される拡張可能な言語についてのアイデアに少し近づきました。
この第2段階では、最終的にLISPを理解し、この理解を使用して、より良く、小さく、より強力で、より遅いバインドされた下部構造を作成しました。Dave Fisherの論文は「McCarthy」スタイルで行われ、拡張可能な制御構造に関する彼のアイデアは非常に役立ちました。当時のもう1つの大きな影響は、カール・ヒューイットのプランナーでした(Prologをどれだけ早く、どれだけ早く予測できるかを考えると、それにふさわしい評価を得たことはありません)。
Xerox PARCの元々のSmalltalkは上記のものから生まれました。後続のSmalltalkについては、Historyの章の終わりに不満があります。Simulaに逆戻りし、拡張メカニズムをより有用な安全メカニズムに置き換えませんでした。
「オブジェクト指向[プログラミング]」とはどういう意味ですか?(チュートリアルのような導入は必要ありません。可能であれば、それらに精通した読者のための他の概念の観点からの簡単な説明[「継承、ポリモーフィズム、カプセル化」など)。また、「オブジェクト「これは、「Smalltalkの初期の歴史」の「オブジェクト」について説明した資料をすでに持っているからです。)
(私は型に反対ではありませんが、完全な苦痛ではない型システムは知りませんので、動的型付けは今でも好きです。)
私にとってのOOPとは、メッセージング、ローカルの保持と状態プロセスの保護と隠蔽、およびすべてのものの極端な遅延バインディングのみを意味します。SmalltalkおよびLISPで実行できます。これが可能なシステムは他にもあるかもしれませんが、私はそれらを知りません。
[また]言及すべきことの1つは、Simulaによって触媒された2つの主な経路があったことです。初期の(偶然の)ものは、私が取ったバイオ/ネットの非データ手順ルートでした。もう1つは、少し遅れて調査対象として来たもので、抽象データ型でした。
歴史全体を見ると、OOPの原型はADTで始まり、私が「オブジェクト」と呼んでいるものに少し分岐していることがわかります。それがSmalltalkなどにつながりましたが、小さな分岐の後、 CSの設立はほとんどADTを行い、データ手順のパラダイムに固執したかった。歴史的には、USAFバローズ220ファイルシステム(Smalltalkの歴史で説明した)、データ構造にプロシージャポインタを埋め込むことを提唱したMITのダグロス(AED以前)の初期の作品、Sketchpadを見る価値があります。完全なポリモーフィズム-たとえば、データ構造内の同じオフセットが「表示」を意味し、構造が表すオブジェクトのタイプなどに適切なルーチンへのポインタがある場合、およびバローズB5000 そのプログラム参照テーブルは真の「ビッグオブジェクト」であり、「データ」と「プロシージャ」の両方へのポインタを含んでいたが、データを追ってプロシージャポインタを見つけようとした場合、しばしば正しいことができた。そして、初期のユタのもので最初に解決した問題は、メソッドとオブジェクトのみを使用した「データの消失」でした。60年代の終わりに(私が思うに)ボブ・バルザーは「データレスプログラミング」と呼ばれるかなり気の利いた論文を書き、その後すぐにジョンレイノルズは同様に気の利いた論文「ゲダンケン」(1970年に思う)を書きました。式が正しい方法であれば、プロシージャによってデータを抽象化できます。しかし、データの後に行こうとしてプロシージャポインタを見つけようとしていた場合、正しいことを行うことができました。そして、初期のユタのもので最初に解決した問題は、メソッドとオブジェクトのみを使用した「データの消失」でした。60年代の終わりに(私が思うに)ボブ・バルザーは「データレスプログラミング」と呼ばれるかなり気の利いた論文を書き、その後すぐにジョンレイノルズは同様に気の利いた論文「ゲダンケン」(1970年に思う)を書きました。式が正しい方法であれば、プロシージャによってデータを抽象化できます。しかし、データの後に行こうとしてプロシージャポインタを見つけようとしていた場合、正しいことを行うことができました。そして、初期のユタのもので最初に解決した問題は、メソッドとオブジェクトのみを使用した「データの消失」でした。60年代の終わりに(私が思うに)ボブ・バルザーは「データレスプログラミング」と呼ばれるかなり気の利いた論文を書き、その後すぐにジョンレイノルズは同様に気の利いた論文「ゲダンケン」(1970年に思う)を書きました。式が正しい方法であれば、プロシージャによってデータを抽象化できます。
オブジェクトを非データとして好きだった人たちの数は少なく、私、カールヒューイット、デイブリード、その他数人が含まれていました。 ARPAnetの設計→計算の基本単位がコンピューター全体であるインターネット。しかし、70年代から80年代を通じて、アイデアがどれほど頑固に持ちこたえるかを示すために、オブジェクトやメッセージについて考えるのではなく、「リモートプロシージャコール」で対処しようとした人が多くいました。シックトランジットグロリアムンディ。
乾杯、
アラン・ケイ