「オブジェクト指向」の版間の差分
削除された内容 追加された内容
オブジェクト指向とは |
|||
3行目:
== オブジェクト指向の来歴 ==
オブジェクト指向(''object-oriented'')という言葉自体は、1972年から80年にかけてプログラミング言語「[[Smalltalk]]」を公開した[[パロアルト研究所]]の計算機科学者[[アラン・ケイ]]がその設計を説明する中で初めて作り出されている<ref name="EarlyHistoryOfSmalltalk">{{Cite web|url=http://worrydream.com/EarlyHistoryOfSmalltalk/|title=The Early History Of Smalltalk|author=Alan C. Kay|accessdate=2019
1986年から[[Association for Computing Machinery|ACM]]が[[OOPSLA]](オブジェクト指向会議)を年度開催するようになり、オブジェクト指向は[[コンピュータサイエンス]]の一つのムーブメントになった。[[OOPSLA]]初期のチェアパーソンは、[[Smalltalk]]が生まれた[[ゼロックス|ゼロックス社]][[パロアルト研究所]]のフェローが務めることが多かった。Smalltalkは正確にはプログラミング言語と[[グラフィカルユーザインタフェース|GUI]]運用環境を合わせた[[フレームワーク]]であり、[[Alto|ゼロックスAlto]]機上の[[ミドルウェア]]として開発されていた。Smalltalkは70年代の[[アラン・ケイ]]が構想していた[[ダイナブック]]のための[[グラフィカルユーザインタフェース|GUI]]環境でもあった。[[Alto]]は[[GUI]]を初めて汎用的にサポートしたコンピュータと[[オペレーティングシステム|OS]]であり、かの[[スティーブ・ジョブズ|スティーブ・ジョブス]]を啓発して[[Macintosh]]のモデルになったことはよく知られている。こうした背景からオブジェクト指向は、上述のプログラミング云々よりも、[[グラフィカルユーザインタフェース|GUI]](グラフィカル・ユーザー・インターフェース)を始めにした当時の先進的な[[ソフトウェア設計|ソフトウェアデザイン]]と[[ソフトウェアアーキテクチャ]]のための開拓的なモデル理論として受け止められる方が好まれた。[[デザインパターン (ソフトウェア)|デザインパターン]]、[[リファクタリング (プログラミング)|リファクタリング]]、[[モデル駆動工学]]、[[ドメインモデル]]、[[ドメイン固有言語]]、[[アジャイルソフトウェア開発]]といった数々のトピックが[[OOPSLA]]から生まれている。具体的に応用された最初の例は[[データベース]]開発と[[NEXTSTEP|NeXTSTEP]]などの[[オペレーティングシステム]]開発であった。
26行目:
=== コンセプト ===
1970年代に[[パロアルト研究所]]で誕生し、1981年頃から知名度を得るようになったオブジェクト指向(''object-oriented'')は同時に発案者である[[アラン・ケイ]]の手を離れて[[プログラミングパラダイム]]から[[ソフトウエア工学知識体系|ソフトウェア工学]]分野へと認識拡大し、1986年以降は[[Association for Computing Machinery|ACM]](計算機学会)開催の[[OOPSLA]](オブジェクト指向会議)が
==== 1993年頃 ====
51行目:
==== 1998年頃 ====
1998年にAn Introduction To Object-Oriented Programming''を出版した[[オレゴン大学]]コンピュータサイエンス教授ティム・バッドによると、この時期のアラン・ケイの構想はこのようになっていた''<ref>{{Cite web|url=http://wiki.c2.com/?AlanKaysDefinitionOfObjectOriented|title=Alan Kays Definition Of Object Oriented|accessdate=2020-1|publisher=}}</ref>''。''{{Quotation|1, ''EverythingIsAnObject.
2, ''Communication is performed by objects communicating with each other, requesting that objects perform actions. Objects communicate by sending and receiving messages. A message is a request for action, bundled with whatever objects may be necessary to complete the task.
3, ''Objects have their own memory, which consists of other objects.
4, ''Every object is an instance of a class. A class simply represents a grouping of similar objects, such as integers or lists.
5, ''The class is the repository for behavior associated with an object. That is, all objects that are instances of the same class can perform the same actions.
6, ''Classes are organized into a singly-rooted tree structure, called the inheritance hierarchy. Memory and behavior associated with instances of a class are available to any class associated with a descendent in this tree structure.|Alan Kay}}''この和訳は以下のようになる。''
# すべてはオブジェクトである。
# コミュニケーションはオブジェクトに動作実効を要求するオブジェクトの相互通信で実効される。オブジェクトはメッセージの送受信でコミュニケーションする。メッセージはタスク遂行に必要なオブジェクトが付帯された動作要求である。
# オブジェクトは自身の記憶を持つ。記憶は他のオブジェクトたちで構成されている。
# すべてのオブジェクトはクラスのインスタンスである。クラスは数値やリストといった類似オブジェクトのグループをシンプル表現する。
# クラスはオブジェクトに関連付けられた振る舞いのリポジトリである。同じクラスのインスタンスである全てのオブジェクトは共通動作を実効できる。
# クラスは継承階層と呼ばれる単一ツリー構造で組成される。クラスのインスタンスの記憶と振る舞いは、ツリー構造下の子孫であるクラスからも利用できる。
オブジェクトに動作を求めるメッセージ自体にもオブジェクトが含まれていることや、オブジェクトの記憶もオブジェクトの集合であることが示されており、メッセージと記憶の意味がより明らかにされている。プログラムリスト評価の考えが、単一継承を重視する考えに置き換えられており、これは1993年時と決定的に異なっている。
==== 2003年頃 ====
2003年にオブジェクト指向の意味を再び尋ねられたケイは、恐らく巷で言われる「カプセル化、継承、多態性」を意識した上でこのようにメールから答えている<ref>{{Cite web|url=http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_en|title=E-Mail of 2003-07-23|accessdate=2019-
<br>(僕にとってのオブジェクト指向は、メッセージングと、ステートプロセスの局所保持かつ保護かつ隠蔽と、あらゆるもの同士の徹底的な遅延バインディングだけだ)|Alan Kay}}
「''messaging''」「''state-process''」「''late-binding''」のうち一番目と二番目は、''object-oriented''と同様にケイの造語なので注意が必要である。一番目は[[メッセージパッシング|メッセージ・パッシング]]の派生語である。二番目のステートプロセスは状態処理が適訳と思われるが、元々が造語であるため詳細は漠然としている。
====
=== その解釈 ===
== 脚注 ==
|