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

削除された内容 追加された内容
3行目:
 
== オブジェクト指向の来歴 ==
オブジェクト指向(''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''だよ」と咄嗟の造語で答えたのが発端だという。なお、ケイがSmalltalkを開発する中で提唱したオブジェクト指向と、1980年頃からSimulaに結び付けられるようになったタームとしてのオブジェクト指向の性格は全く異なるものであったが、結果的に[[オブジェクト (プログラミング)|オブジェクト]]というプログラム概念が注目を集めた事で、そのルーツである[[クラス (コンピュータ)|クラス]]と[[オブジェクト (プログラミング)|オブジェクト]]の設計を備えたSimulaもオブジェクト指向の草分けと見なされるようになった<ref>[http://kristennygaard.org/FORSKNINGSDOK_MAPPE/F_OO_start.html How Object-Oriented Programming Started]</ref>。データとコードの複合体であるオブジェクト(''object'')という用語を確立したのはSimulaであったが、その設計は[[手続き型プログラミング]]の機能拡張に近いもの<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>。それに対してSmalltalkの方で[[関数型プログラミング]]の原型と目されている「[[LISP]]」の影響の方が強調されていた<ref name="EarlyHistoryOfSmalltalk" />。その後、計算機科学者[[ビャーネ・ストロヴストルップ]]が1983年に公開した「[[C++]]」が契機になってオブジェクト指向に関連する様々な考え方が再定義されている。C++はSimulaの方をモデルにしていた。
 
1986年から[[Association for Computing Machinery|ACM]]が[[OOPSLA]](オブジェクト指向会議)を年度開催するようになり、オブジェクト指向は[[コンピュータサイエンス]]の一つのムーブメントになった。[[OOPSLA]]初期のチェアパーソンは、[[Smalltalk]]が生まれた[[ゼロックス|ゼロックス社]][[パロアルト研究所]]のフェローが務めることが多かった。Smalltalkは正確にはプログラミング言語と[[グラフィカルユーザインタフェース|GUI]]運用環境を合わせた[[フレームワーク]]であり、[[Alto|ゼロックスAlto]]機上の[[ミドルウェア]]として開発されていた。Smalltalkは70年代の[[アラン・ケイ]]が構想していた[[ダイナブック]]のための[[グラフィカルユーザインタフェース|GUI]]環境でもあった。[[ダイナブック]]はパーソナルコンピュータの原型に位置付けられているものである。[[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]]が1997年に策定した[[統一モデリング言語|UML]]は[[オブジェクト指向ソフトウェア工学]]に準拠したものとして発表されている。
 
==オブジェクト指向の分野==
14行目:
* [[オブジェクトデータベース]] - 1980年代から
* {{仮リンク|オブジェクト指向オペレーティングシステム|en|Object-oriented operating system|label=}} - 1980年代から
* {{仮リンク|オブジェクト指向ユーザーインターフェース|en|Object-oriented user interface|label=}} - 1990年から
* [[Common Object Request Broker Architecture|CORBA]] - 1991年から
* [[オブジェクト関係データベース]] - 1990年代から
* [[オブジェクト指向分析設計]] - 1990年代から ←({{仮リンク|オブジェクト指向デザイン|en|Object-oriented design|label=オブジェクト指向設計}})
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のオブジェクト指向性質は大変示唆的であると前置きした上でこう述べている。{{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}}オブジェクト(対象)の重視と並行して、ケイはあらゆる物事からモード(決められた方法や形態)を取り除くべきだとするモードレス(''modeless'')の考え方も提唱している。オブジェクトとモードレスを融合させたユーザーインターフェースのデザインについて、ケイはテキストエディタの操作を例にした興味深い説明を加えている。テキストエディタの「挿入」「削除」「置換」といった操作は上述のモーダルな操作に当たり、基本的であるがゆえに上述の対象と欲求に分解してのモードレスに再解釈できる余地がないように見える。ケイはこのような解答を示している。{{Quotation|Thus, there could be a zero-width selection, and thus every operation could be a replace.<br/>(「ゼロ幅選択枠」があれば、全ての操作は「置換」にできるだろう)|Alan Kay}}ゼロ幅選択枠という対象をあえて作り出す事で、「挿入」ではまず任意の文字間にあるゼロ幅選択枠を指定して次に置換→任意の文字列という欲求をする。「削除」ではまず任意の選択文字列を指定して次に置換→ゼロ幅選択枠という欲求をする。「置換」は選択文字列→置換→文字列である。始めに対象を選択しても自由に他の操作にも移れることがモードレスと言われる所以である。文字実体のない抽象的なオブジェクトであるゼロ幅選択枠が、具体的なモーダル操作をモードレスに再解釈する役目を果たしてる。これが具象と抽象の一体化であると説明されている。
 
==== 1993年頃 ====