「オブジェクト指向」の版間の差分

削除された内容 追加された内容
特徴
3行目:
 
== オブジェクト指向の来歴 ==
[[ファイル:Alan Kay (3097597186) (cropped).jpg|サムネイル|222x222ピクセル|Alan Kay]]
オブジェクト指向(''object-oriented'')という言葉自体は、1972年から80年にかけてプログラミング言語「[[Smalltalk]]」を開発した[[ゼロックス|ゼロックス社]][[パロアルト研究所]]の計算機科学者[[アラン・ケイ]]がその言語設計を説明する中で初めて生み出されている<ref name="EarlyHistoryOfSmalltalk">{{Cite web|url=http://worrydream.com/EarlyHistoryOfSmalltalk/|title=The Early History Of Smalltalk|accessdate=2019-01|publisher=}}</ref>。本人の述懐によると、大学院時代のケイがプログラミング言語「[[Simula]]」に感化されて日夜プログラミング・アーキテクチャの思索に耽っていた1967年頃、今何をしているのかと尋ねてきた知人に対して「''object-oriented programming''だよ」と咄嗟の造語で答えたのが発端だという。このオブジェクト指向が知名度を得るようになったのは1981年頃からであり、当時のマイコン専門誌[[バイト (雑誌)|BYTE]]によるSmalltalkの誌上紹介が契機になっている。オブジェクト指向の中でケイ自身は[[メッセージング]]という設計概念考え方を重視していたが、世間の技術的関心は[[クラス (コンピュータ)|クラス]]と[[インスタンス]]の仕組みの方に集まり、オブジェクト指向の解釈はケイの考えとは異なる方向性で推移していった。[[クラス (コンピュータ)|クラス]]を初めて導入した言語はSimulaの1967年版だったので、こちらも後付けでオブジェクト指向の源流に位置付けられている<ref>[http://kristennygaard.org/FORSKNINGSDOK_MAPPE/F_OO_start.html How Object-Oriented Programming Started]</ref>。Simulaに結び付けられたオブジェクト指向と、Smalltalkで提唱されたオブジェクト指向の性格は全く異なるものだったので、双方の解釈に数々の齟齬を生じさせている<ref>{{Cite web|url=https://www.cs.cmu.edu/~charlie/courses/15-214/2014-fall/slides/25-history-oo.pdf|title=OO History: Simula and Smalltalk|accessdate=2019-02|publisher=}}</ref>。1983年に計算機科学者[[ビャーネ・ストロヴストルップ]]がSimulaのオブジェクト指向をモデルにした言語「[[C++]]」を公開し、このC++が人気を博した事でオブジェクト指向は本来のSmalltalkではなく、後付けのSimulaスタイルの方で認識されるようになった。
 
1986年から[[Association for Computing Machinery|ACM]](計算機協会)が[[OOPSLA]](オブジェクト指向会議)を年度開催するようになり、オブジェクト指向は[[コンピュータサイエンス]]の一つのムーブメントになった。[[OOPSLA]]初期のチェアパーソンは、[[Smalltalk]]が生まれた[[ゼロックス|ゼロックス社]][[パロアルト研究所]]のフェローが務めることが多かった。Smalltalkは正確にはプログラミング言語と[[グラフィカルユーザインタフェース|GUI]]運用環境を合わせた[[フレームワーク]]であり、[[Alto|ゼロックスAlto]]機上の[[オペレーティングシステム|OS]]または[[ミドルウェア]]として開発されていた。Smalltalkは70年代の[[アラン・ケイ]]が構想していた[[ダイナブック]]のための[[グラフィカルユーザインタフェース|GUI]]環境でもあった。[[ダイナブック]]はパーソナルコンピュータの原型に位置付けられているものである。[[Alto|ゼロックスAlto]]は[[GUI]]を初めて汎用的にサポートしたコンピュータと[[オペレーティングシステム|OS]]であり、かの[[スティーブ・ジョブズ|スティーブ・ジョブス]]を啓発して[[Macintosh]]のモデルになったことはよく知られている。こうした背景からオブジェクト指向は、上述のプログラミング云々よりも、[[グラフィカルユーザインタフェース|GUI]](グラフィカル・ユーザー・インターフェース)を始めにした当時の先進的な[[ソフトウェア設計|ソフトウェアデザイン]]と[[ソフトウェアアーキテクチャ]]のための開拓的なモデル理論として受け止められる方が好まれた。[[デザインパターン (ソフトウェア)|デザインパターン]]、[[リファクタリング (プログラミング)|リファクタリング]]、[[モデル駆動工学]]、[[ドメインモデル]]、[[ドメイン固有言語]]、[[アジャイルソフトウェア開発]]といった数々のトピックが[[OOPSLA]]から生まれている。具体的に応用された最初の例は[[データベース]]開発と[[NEXTSTEP|NeXTSTEP]]などの[[オペレーティングシステム]]開発および各種システムに向けた[[ユーザーインターフェース]]デザインであった。
 
1989年には[[IBM|IBM社]]、[[アップル (企業)|アップル社]]、[[ヒューレット・パッカード|ヒューレットパッカード社]]、[[サンマイクロシステムズ|サンマイクロシステムズ社]]、[[アメリカン航空]]などの11社がコンピュータ産業共同事業団体[[Object Management Group|OMG]](Object Management Group)を設立した。OMGの目的は、企業システムネットワークの基盤になる[[分散コンピューティング]]を構築するための基礎要素になる分散オブジェクト設計の標準化を図ることであった。ここでのオブジェクトもデータとメソッド(=コード)の組み合わせと定義されていたので、この業務用システムないしネットワークの構築を目的にした技術アーキテクチャも人々の共通認識としてオブジェクト指向にそのまま包括された。1991年に分散オブジェクトの規格パラダイムとなる[[CORBA]]が公開された。また1997年に[[Object Management Group|OMG]]が策定標準モデリング言語として採用した[[統一モデリング言語|UML]]は[[オブジェクト指向ソフトウェア工学]]に準拠したものとして発表されている。
 
==オブジェクト指向の分野==
14 ⟶ 15行目:
* [[オブジェクトデータベース]] - 1980年代から
* {{仮リンク|オブジェクト指向オペレーティングシステム|en|Object-oriented operating system|label=}} - 1980年代から
* {{仮リンク|オブジェクト指向ユーザーインターフェース|en|Object-oriented user interface|label=}} - 19901980から
* [[Common Object Request Broker Architecture|CORBA]] - 1991年から
* [[オブジェクト関係データベース]] - 1990年代から
27 ⟶ 28行目:
 
=== コンセプト ===
1970年代に[[ゼロックス|ゼロックス社]][[パロアルト研究所]]で誕生し、1981年頃から知名度を得るようになったオブジェクト指向(''object-oriented'')は同時に発案者である[[アラン・ケイ]]の手を離れて[[プログラミングパラダイム]]から[[ソフトウエア工学知識体系|ソフトウェア工学]]分野へと認識拡大し、1986年以降は[[Association for Computing Machinery|ACM]](計算機会)開催の[[OOPSLA]](オブジェクト指向会議)が中心的な担い手の役割を果たしていた。70年代から80年代前半にかけてのオブジェクト指向は[[Smalltalk]]言語仕様の一環としてそれに当たることで一定の理解を得られたが、80年代後半以降は事情が異なっている。
 
==== 1989年頃 ====
1989年に上梓発表されたUser Interface A Personal Viewという記事の中でアラン・ケイは、Smalltalkのオブジェクト指向性は大変示唆的であると前置きした上でこう述べている<ref>{{Cite web|url=http://worrydream.com/refs/Kay%20-%20User%20Interface,%20a%20Personal%20View.pdf|title=User Interface A Personal View|accessdate=2020-1|publisher=}}</ref>。{{Quotation|''object-oriented means that the object knows what it can do.''<br/>(オブジェクト指向とは、オブジェクトが出来るなにかを知っているいう意味なんだしている)|Alan Kay}}オブジェクトを指向(重視)することの意味について、ケイは抽象的シンボル視点のプロセスと、具体的ユーザーインターフェース視点のプロセスを対照させながら説明している。前者では我々はまずオブジェクトの名前を示し、次にそのオブジェクトが行なうなにかを理解させるメッセージを続かせることになる。後者では我々はまず対象を選択し、次にその対象が提供するなにかの一覧を表示させることになる。この双方を踏まえた上でケイはこう結論している。{{Quotation|''In both case we have the object first and the desire second. this unifies the concrete with the abstract in highly satisfying way.''<br/>(具象と抽象の両視点においてオブジェクト(対象)を第一とし、欲求を第二とする。これは高い満足度で具象と抽象を一体化する)|Alan Kay}}オブジェクトの重視と並行して、ケイはあらゆる物事からモード(''mode'')を取り除くべきだとするモードレス(''modeless'')の考え方も提唱している。ここでのモードとは決められた作業手順を指しており、モーダルはタスクの指向(重視)を意味することになる。モードレスは作業手順が特に決められていないことを意味している。オブジェクトとモードレスを融合させたユーザーインターフェースのデザインについて、ケイはテキストエディタの操作を例にした興味深い説明を加えている。テキストエディタの「挿入」「削除」「置換」といった操作はモーダルに当たる。それらは余りに基本的であるがゆえに対象と欲求に分解してのモードレスに再解釈できる余地がないように見える。ケイはこの命題から''Thus, there could be a zero-width selection, and thus every operation could be a replace.(もしゼロ幅選択枠というものがあるならば、全ての操作は置換になるだろう)といった解答を示している。「''ゼロ幅選択枠」という抽象的対象を導入することで「挿入」は、始めに任意の文字間にあるゼロ幅選択枠を指定し、次に置換→任意の文字列という欲求を伝えるという対象第一の操作に変えられる事ができる。「削除」は始めに任意の選択文字列を指定して、次に置換→ゼロ幅選択枠という欲求を伝えるという対象第一の操作に変えられる事ができる。「置換」は選択文字列→置換→文字列である。文字実体のない抽象的なオブジェクトであるゼロ幅選択枠が、モーダルな操作をモードレスに再解釈する役目を果たしている。始めに対象を選択しても自由に他の対象または他の表示中の操作にも移れることがモードレスと言われる所以である。これが具象と抽象の一体化であると説明されている。
 
==== 1993年頃 ====
78 ⟶ 79行目:
==== 2003年頃 ====
 
2003年にとある知人からオブジェクト指向の意味を尋ねられた[[アラン・ケイ]]はこのようにメール上で答えている<ref>{{Cite web|url=http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_en|title=Dr. Alan Kay on the Meaning of “Object-Oriented Programming”|accessdate=2019-1|publisher=}}</ref>。{{Quotation|''OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things.''
<br>(僕にとってのオブジェクト指向は、メッセージング、ステートプロセスの局所保持かつ保護かつ隠蔽あらゆるもの同士の徹底的な遅延バインディング、なんとこれだけの意味った。)|Alan Kay}}
 
「''messaging''」「''state-process''」「''late-binding''」のうち一番目と二番目は、''object-oriented''と同様にケイの造語なので注意が必要である。一番目は[[メッセオブジェクト同士のコミュニケジパッグ|を指しており[[メッセージパッシング]]に類似の言葉であるが、プログラム用語的にはケイ派生語である。二番目のステートプロセスは状態処理が適訳と思われるが、元々が造語であるため詳細は漠然としている。
 
==== 2020年頃 ====
Q&Aサイトの[[Quora]]で「66年ないし6766~67年のオブジェクト指向という造語を発したアラン・ケイに誰かが影響を与えていたのか?」という質問に対して本人がこう回答している。なお、rotationとは「一つのコンピュータはどこかのコンピュータができることをできる、相互通信によってあらゆる規模の計算可能性を表現できる」を意味している。{{Quotation|''In the 1960s, software composites that were more complex than arrays, were often called “objects”, and all the schemes I had seen involved structures that included attached procedures. A month or so after the “rotation” someone asked me what I was doing, and I foolishly said “object-oriented programming”.''
<br>(60年代、配列より複雑なソフトウェア構成体はしばしばオブジェクトと呼ばれていた。手続きを付けた構造体を僕もそう見ていた。rotation構想の後、今何をしているのかと尋ねられた僕は愚かにもこう言った。オブジェクト指向プログラミングと。)|Alan Kay}}
{{Quotation|''The foolish part is that “object” is a very bad word for what I had in mind — it is too inert and feels too much like “data”. Simula called its instances “processes” and that is better.“Process-oriented programming” would have been much better, don’t you think?''
<br>(僕の考えを表現するのにオブジェクトはとても悪い言葉だった。不活性的でデータを過剰に意識させたからだ。Simulaはプロセスと呼んでいた。これはいい。プロセス指向プログラミングの方がずっと良かったんじゃないか?)|Alan Kay}}
 
=== その解釈 ===