コンテンツにスキップ

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

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
タグ: 2017年版ソースエディター
6行目: 6行目:
'''オブジェクト指向'''(オブジェクトしこう、{{lang-en-short|''object-oriented''}})は、[[ソフトウェア]]設計と[[プログラム (コンピュータ)|プログラム]]記述の際に用いられる考え方である。元々は特定の[[プログラミングパラダイム|プログラミング・パラダイム]]を説明する為に考案された言葉だった。''object-oriented programming''のように修飾語として用いられるのが常であり、それ単体で扱われる事はない漠然とした設計構想でもある。{{main|オブジェクト指向プログラミング}}
'''オブジェクト指向'''(オブジェクトしこう、{{lang-en-short|''object-oriented''}})は、[[ソフトウェア]]設計と[[プログラム (コンピュータ)|プログラム]]記述の際に用いられる考え方である。元々は特定の[[プログラミングパラダイム|プログラミング・パラダイム]]を説明する為に考案された言葉だった。''object-oriented programming''のように修飾語として用いられるのが常であり、それ単体で扱われる事はない漠然とした設計構想でもある。{{main|オブジェクト指向プログラミング}}


== オブジェクト指向の成り立ち ==
== オブジェクト指向の来歴 ==
オブジェクト指向(''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-02-01}}</ref>。エピソードによると、1967年公開された「[[Simula|Simula 67]]」を当時大学院生だったケイが知っ''object-oriented''という咄嗟の造語で評論したのが発端だという。なお、Simula 67に結び付けられたオブジェクト指向と、後にケイ自身がSmalltalkを開発する中で提唱したオブジェクト指向の性格は全く異なるものであったが、結果的に[[オブジェクト (プログラミング)|オブジェクト]]というプログラム概念が注目を集めた事で、そのルーツである[[クラス (コンピュータ)|クラス]]と[[オブジェクト (プログラミング)|オブジェクト]]の設計を備えたSimula 67もオブジェクト指向の草分けと見なされるようになった<ref>[http://kristennygaard.org/FORSKNINGSDOK_MAPPE/F_OO_start.html How Object-Oriented Programming Started]</ref>。データとコードの複合体であるオブジェクト(''object'')という用語を確立したのはSimula 67であったが<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|author=Jonathan Aldrich and Charlie Garrod|date=2014|accessdate=2019-02-01}}</ref>、その設計は[[手続き型プログラミング]]の機能拡張に近いものである。ケイ自身は「[[LISP]]」の影響の方を強調しており<ref name="EarlyHistoryOfSmalltalk" />、実際に彼がSmalltalkで示したオブジェクト指向設計は全くの別物であった。その後、計算機科学者[[ビャーネ・ストロヴストルップ]]が1983年に公開した「[[C++]]」が契機なって、オブジェクト指向に関連する様々な考え方が再定義されている。C++の設計はSimula 67の方をモデルにしていた。
オブジェクト指向(''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-02-01}}</ref>。また本人述懐によると、大学院時代のケイが1967年公開の言語「[[Simula|Simula67]]」に感化されて日夜プログラミング・アーキテクチャの思索に耽てい折、今何をしているのかと尋ねてき知人対して「''object-oriented programming''だよ」答えたのが発端だという。なお、Simula67に結び付けられたオブジェクト指向と、後にケイ自身がSmalltalkを開発する中で提唱したオブジェクト指向の性格は全く異なるものであったが、結果的に[[オブジェクト (プログラミング)|オブジェクト]]というプログラム概念が注目を集めた事で、そのルーツである[[クラス (コンピュータ)|クラス]]と[[オブジェクト (プログラミング)|オブジェクト]]の設計を備えたSimula67もオブジェクト指向の草分けと見なされるようになった<ref>[http://kristennygaard.org/FORSKNINGSDOK_MAPPE/F_OO_start.html How Object-Oriented Programming Started]</ref>。データとコードの複合体であるオブジェクト(''object'')という用語を確立したのはSimula67であったが<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|author=Jonathan Aldrich and Charlie Garrod|date=2014|accessdate=2019-02-01}}</ref>、その設計は[[手続き型プログラミング]]の機能拡張に近いものである。ケイ自身は「[[LISP]]」の影響の方を強調しており<ref name="EarlyHistoryOfSmalltalk" />、実際に彼がSmalltalkで示したオブジェクト指向は全くの別物であった。その後、計算機科学者[[ビャーネ・ストロヴストルップ]]が1983年に公開した「[[C++]]」が契機なって、オブジェクト指向に関連する様々な考え方が再定義されている。C++の設計はSimula67の方をモデルにしていた。


上述の様にオブジェクト指向とは元々[[プログラミング・パラダイム]]として編み出された理論であったが、1980年代から[[データベース]]と[[オペレーティングシステム|OS]]の開発にもその設計構想が活かされるようになり、1990年代になるとソフトウェア工学の幅広い面にも応用されて、オブジェクト指向を土台にした様々な分野が開拓される事になった。
上述の様にオブジェクト指向とは元々[[プログラミング・パラダイム]]として編み出された理論であったが、1980年代から[[データベース]]と[[オペレーティングシステム|OS]]の開発にもその設計構想が活かされるようになり、1990年代になるとソフトウェア工学の幅広い面にも応用されて、オブジェクト指向を土台にした様々な分野が開拓される事になった。
20行目: 20行目:
オブジェクト指向は、プログラミング・パラダイムとして誕生した理論である。そのデータ(変数またはプロパティ)とコード(関数またはメソッド)のセットを基本要素にして物事を解析する考え方が、1980年代から大きく注目され始めた事で、ソフトウェア工学のあらゆる局面に''object-oriented''を接頭辞にした分野が立ち上げられた。大まかな特徴としては、情報資源と処理手順を別々にして分析ないし設計を行っていた従来の標準的な手法に対し、オブジェクト指向と名が付く分野ではこの双方をひとまとめにして物事の解析と組み立てを行う点が共通している。
オブジェクト指向は、プログラミング・パラダイムとして誕生した理論である。そのデータ(変数またはプロパティ)とコード(関数またはメソッド)のセットを基本要素にして物事を解析する考え方が、1980年代から大きく注目され始めた事で、ソフトウェア工学のあらゆる局面に''object-oriented''を接頭辞にした分野が立ち上げられた。大まかな特徴としては、情報資源と処理手順を別々にして分析ないし設計を行っていた従来の標準的な手法に対し、オブジェクト指向と名が付く分野ではこの双方をひとまとめにして物事の解析と組み立てを行う点が共通している。


上記の他にも以下のような数々の分野が存在する。
上記の他にも、オブジェクト指向オペレーティングシステム、[[オブジェクト関係データベース]]、[[オブジェクト関係マッピング]]、オブジェクト指向ユーザーインターフェース、[[オブジェクト指向ソフトウェア工学]]、オブジェクト指向プロジェクト管理、[[Booch法|ブーチメソッド]]、[[オブジェクトモデル化技法]]といった数々の分野が存在する。

* {{仮リンク|オブジェクト指向オペレーティングシステム|en|Object-oriented operating system|label=}}
* [[オブジェクト関係データベース]]
* [[オブジェクト関係マッピング]]
* {{仮リンク|オブジェクト指向ユーザーインターフェース|en|Object-oriented user interface|label=}}
* [[Booch法|ブーチメソッド]]
* [[オブジェクトモデル化技法]]
* [[オブジェクト指向ソフトウェア工学]]
* {{仮リンク|オブジェクト指向マネージメント|en|Object-oriented Management|label=}}


==オブジェクト指向とは==
==オブジェクト指向とは==
45行目: 54行目:


また、2003年にオブジェクト指向の意味を再び尋ねられたケイは、恐らく巷のプログラミングで言われる「カプセル化、継承、多態性」を意識した上でこのように答えている。{{Quotation|''OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things.''
また、2003年にオブジェクト指向の意味を再び尋ねられたケイは、恐らく巷のプログラミングで言われる「カプセル化、継承、多態性」を意識した上でこのように答えている。{{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}}
<br>(僕にとってのオブジェクト指向とは、メッセージングと、ローカルな記憶保持および保護と、実行状態の隠蔽と、あらゆる物同士の徹底的な遅延バインディングだけだ)|Alan Kay}}オブジェクト指向を提唱する中でケイは「[[LISP]]」の影響を受けた事を言及しているが、具体的に参考とされたのは、''lambda''のキーワードで表現される[[高階関数]]および[[第一級関数]]の仕組みと、''atom''を内包する''cons''の再帰で''list''を形成するようないわゆる[[代数的データ型|代数的]](''algebraic'')なデータ表現であったという<ref name="EarlyHistoryOfSmalltalk" />。それらに加えて、初期に発表された六つの要約と、後にケイが明かした三つのコンセプトを踏まえた上でオブジェクト指向を読み解いていく。
<!--誤訳を修正して頂き感謝致します。僭越ながら"of all things"は文全体にかかる副詞句と愚考しましたので浅はかながらこうしました-->
「''messaging''」「''state-process''」「''late-binding''」この三項目いずれもが''object-oriented''と同様にケイの造語なので注意が必要である。一番目は[[メッセージパッシング|メッセージ・パッシング]]の派生語である。二番目のステートプロセスは状態処理が適訳と思われるが、元々が造語であるため詳細は漠然としている。三番目はあえてハイフンが付けられてる点に留意せねばならず、ケイ流の[[ダイナミックバインディング|遅延バインディング]]と言ったところである。

オブジェクト指向を提唱する中でケイは「[[LISP]]」の影響を言及している。オブジェクト指向の実装言語である[[Smalltalk]]のメッセージング構文はLISPの式構文に似ており、また[[関数型プログラミング|関数型言語]]の構文にも似ている。LISPの設計の中で比較的重視されたのは[[高階関数|高階ロジック]]と[[S式|S式ストラクチャ]]であったという。それらに加えて初期に発表された六つの要約と、後にケイが明かした三つのコンセプトを踏まえた上でオブジェクト指向を読み解いていく。


=== その解釈 ===
=== その解釈 ===

2020年5月12日 (火) 13:58時点における版

オブジェクト指向(オブジェクトしこう、: object-oriented)は、ソフトウェア設計とプログラム記述の際に用いられる考え方である。元々は特定のプログラミング・パラダイムを説明する為に考案された言葉だった。object-oriented programmingのように修飾語として用いられるのが常であり、それ単体で扱われる事はない漠然とした設計構想でもある。

オブジェクト指向の来歴

オブジェクト指向(object-oriented)という言葉自体は、1972年から80年にかけてプログラミング言語「Smalltalk」を公開した計算機科学者アラン・ケイが、その言語設計を説明する中で初めて生み出されている[1]。また本人の述懐によると、大学院時代のケイが1967年公開の言語「Simula67」に感化されて日夜プログラミング・アーキテクチャの思索に耽っていた折、今何をしているのかと尋ねてきた知人に対して「object-oriented programmingだよ」と答えたのが発端だという。なお、Simula67に結び付けられたオブジェクト指向と、後にケイ自身がSmalltalkを開発する中で提唱したオブジェクト指向の性格は全く異なるものであったが、結果的にオブジェクトというプログラム概念が注目を集めた事で、そのルーツであるクラスオブジェクトの設計を備えたSimula67もオブジェクト指向の草分けと見なされるようになった[2]。データとコードの複合体であるオブジェクト(object)という用語を確立したのはSimula67であったが[3]、その設計は手続き型プログラミングの機能拡張に近いものである。ケイ自身は「LISP」の影響の方を強調しており[1]、実際に彼がSmalltalkで示したオブジェクト指向は全くの別物であった。その後、計算機科学者ビャーネ・ストロヴストルップが1983年に公開した「C++」が契機になって、オブジェクト指向に関連する様々な考え方が再定義されている。C++の設計はSimula67の方をモデルにしていた。

上述の様にオブジェクト指向とは元々プログラミング・パラダイムとして編み出された理論であったが、1980年代からデータベースOSの開発にもその設計構想が活かされるようになり、1990年代になるとソフトウェア工学の幅広い面にも応用されて、オブジェクト指向を土台にした様々な分野が開拓される事になった。

オブジェクト指向の分野

オブジェクト指向は、プログラミング・パラダイムとして誕生した理論である。そのデータ(変数またはプロパティ)とコード(関数またはメソッド)のセットを基本要素にして物事を解析する考え方が、1980年代から大きく注目され始めた事で、ソフトウェア工学のあらゆる局面にobject-orientedを接頭辞にした分野が立ち上げられた。大まかな特徴としては、情報資源と処理手順を別々にして分析ないし設計を行っていた従来の標準的な手法に対し、オブジェクト指向と名が付く分野ではこの双方をひとまとめにして物事の解析と組み立てを行う点が共通している。

上記の他にも以下のような数々の分野が存在する。

オブジェクト指向とは

コンセプト

オブジェクト指向(object-oriented)の言葉を生み出した計算機科学者アラン・ケイは、1970年代に発表した文書の中でその設計構想を六つの要約で説明している[1]

1, EverythingIsAnObject.

2, Objects communicate by sending and receiving messages (in terms of objects).

3, Objects have their own memory (in terms of objects).

4, Every object is an instance of a class (which must be an object).

5, The class holds the shared behavior for its instances (in the form of objects in a program list).

6, To eval a program list, control is passed to the first object and the remainder is treated as its message. — Alan Kay

以下はその和訳である。

  1. すべてはオブジェクトである。
  2. オブジェクトはメッセージの受け答えによってコミュニケーションする。
  3. オブジェクトは自身のメモリーを持つ。
  4. どのオブジェクトもクラスのインスタンスであり、クラスもまたオブジェクトである。
  5. クラスはその全インスタンスの為の共有動作を持つ。インスタンスはプログラムにおけるオブジェクトの形態である。
  6. プログラム実行時は、制御は最初のオブジェクトに渡され、残りはそのメッセージとして扱われる。

また、2003年にオブジェクト指向の意味を再び尋ねられたケイは、恐らく巷のプログラミングで言われる「カプセル化、継承、多態性」を意識した上でこのように答えている。

OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things.
(僕にとってのオブジェクト指向は、メッセージングと、ステートプロセスの局所保持かつ保護かつ隠蔽と、徹底的なレイトバインディング、なんとこれらだけを意味してたんだ) — Alan Kay

messaging」「state-process」「late-binding」この三項目いずれもがobject-orientedと同様にケイの造語なので注意が必要である。一番目はメッセージ・パッシングの派生語である。二番目のステートプロセスは状態処理が適訳と思われるが、元々が造語であるため詳細は漠然としている。三番目はあえてハイフンが付けられてる点に留意せねばならず、ケイ流の遅延バインディングと言ったところである。

オブジェクト指向を提唱する中でケイは「LISP」の影響を言及している。オブジェクト指向の実装言語であるSmalltalkのメッセージング構文はLISPの式構文に似ており、また関数型言語の構文にも似ている。LISPの設計の中で比較的重視されたのは高階ロジックS式ストラクチャであったという。それらに加えて初期に発表された六つの要約と、後にケイが明かした三つのコンセプトを踏まえた上でオブジェクト指向を読み解いていく。

その解釈

脚注

  1. ^ a b c Alan C. Kay. “The Early History Of Smalltalk”. 2019年2月1日閲覧。
  2. ^ How Object-Oriented Programming Started
  3. ^ Jonathan Aldrich and Charlie Garrod (2014年). “OO History: Simula and Smalltalk”. 2019年2月1日閲覧。

関連項目

外部リンク