「オブジェクト指向」の版間の差分
削除された内容 追加された内容
編集の要約なし |
Goldensundown2 (会話 | 投稿記録) 関連項目 |
||
(同じ利用者による、間の16版が非表示) | |||
1行目:
'''オブジェクト指向'''(オブジェクトしこう|英語:''object-oriented'')は、[[ソフトウェア工学]]構想の一つであり、ソフトウェア設計とプログラム記述の際に用いられる考え方である。1950年代後半に[[マサチューセッツ工科大学]]の[[人工知能|人口知能]]研究グループの間で最初に発案され、プログラム開発環境の構築を通して体系化されていき、1960年代に一つの[[プログラミング・パラダイム]]として確立された。1980年代には[[データベース]]と[[オペレーティングシステム]]の開発にも活かされるようになった。1990年代になるとソフトウェア設計の幅広い面にも応用されるようになり、[[ソフトウェア工学]]その他にオブジェクト指向を土台にした様々な分野が開拓された。
オブジェクト指向は脳機能を形成する[[人工ニューラルネットワーク|ニューラル・ネットワーク]]をヒントに発案された。[[オブジェクト (プログラミング)|オブジェクト]]は[[人工ニューロン|ニューロン]]の投影物であった。ニューロンはそれぞれが記憶を持ち、網の目のように結ばれて相互に影響し合い高度な思考を表現した。コンピュータ・プログラムも同様に[[オブジェクト (プログラミング)|オブジェクト]]のネットワークとして構築し、無数の[[オブジェクト (プログラミング)|オブジェクト]]が互いに作用し合うようにして任意のプロセスを実現する事がオブジェクト指向の理念であった。ここでのオブジェクトとは対象物を意味する言葉であり、対象物とは大まかにCPU演算処理(コード)が扱うデータ全般を指す。「どの様にデータを扱うか」ではなく「データがどの様に扱われるか」を念頭に置いてプログラムを組み立てる構想から、データにそれを扱う為のコードを付随させたオブジェクトの概念が生み出された。
==
#[[オブジェクト指向プログラミング|オブジェクト指向・プログラミング]] 1960年代から
#[[オブジェクトデータベース|オブジェクト指向・データベース]] 1980年代から
#[[オブジェクト指向分析設計|オブジェクト指向・アナリシス&デザイン]] 1990年代から
#[[オブジェクト指向モデリング|オブジェクト指向・モデリング]] 1990年代から
<br/>
オブジェクト指向は、プログラミング・パラダイムとして誕生した知識体系であり、そのデータとコードのセットを基本要素にして物事を解析する考え方が、特に1980年代から大きく注目され始め、ソフトウェア工学のあらゆる局面に''object-oriented''(OO)を接頭辞にした分野が立ち上げられた。他にも、OOオペレーティングシステム、OOプロジェクトマネージメント、[[オブジェクト指向ソフトウェア工学|OOソフトウェアエンジニアリング]]、OOユーザーインターフェース、[[Booch法|ブーチメソッド]]、[[オブジェクトモデル化技法|オブジェクトモデリングテクニック]]など複数の分野が存在するが、上記リストの四種と知識範囲が重なり合っているか、または内包される副次分野となっている事から、明確な一つの分野として扱われる事は少ない。
==オブジェクト指向プログラミング
{{Main|オブジェクト指向プログラミング}}
オブジェクト指向プログラミングを構成する概念は次のようなものである。▼
=== 主な仕様 ===
[[カプセル化|エンカプセレーション]](内部隠蔽)
[[インヘリタンス]](継承)
;[[ポリモーフィズム]] (多態性)▼
:
==オブジェクト指向の方式==▼
: 同名メソッドの呼び出し時に、オブジェクトによって処理内容が変化する機能。こちらは実行時の状況によって変化する多態性本来のダイナミックな機能である。また、引数とするクラス型に従って、呼び出されるメソッドと生成されるオブジェクトが変化する機能もあり、こちらはコンパイル時に決まるスタティックな機能となる。
*[[プロトタイプベース]]方式 — 既存の[[インスタンス]]を元に、新たな[[インスタンス]]を生成する方式である。'''インスタンスベース'''ともいう。▼
===オブジェクト
[[クラスベース]]
: ユーザーが任意の[[クラス (コンピュータ)|クラス]]を定義し、それを元に[[インスタンス]]を生成する方式である。ベンダー側が用意したクラスライブラリ内のクラスを元にして、ユーザーが任意の派生クラスを定義する開発場面も多く、これは継承ベースとも言われる。
[[プロトタイプベース]]
▲
[[ミックスイン]]
: 任意のインスタンス生成時に、ランタイム環境に用意された様々な機能コンポーネントを追加する方式である。各コンポーネントは同時にスーパークラスと同等となり、手軽で重複の無い多重継承が保証された。
オブジェクト指向プログラミングは、歴史的に1962年に公開されたクラス構造を中心とする''Simula''系統と、1970年代から研究開発が進められていたメッセージ機能を主体とする''Smalltalk''系統に大別されており、オブジェクト指向本来の形態を正しく表現してるのは後者の''Smalltalk''の方だと評されていた。しかし、当時のCPU処理能力の問題からより少ない処理量で、ポリモーフィズムその他の仕様を「継承クラス構造」を活かして実現出来る''Simula''系統(''C++''や''Javaなど)の方''が主流となった。こうして''クラス構造がオブジェクト指向の中心的役割を占めるようになった事から、Smalltalk''制作者の一人であり、オブジェクト指向開発環境のパイオニアと見なされているアラン・ケイは「''Smalltalk''をオブジェクト指向言語と定義付けたのは、間違いだったかもしれない。」というコメントを残すに到った<ref>http://www.infoq.com/jp/news/2010/07/objects-smalltalk-erlang</ref>。
''Smalltalk''が主体とする「メッセージング」は、それ自体が高度に柔軟なエンカプセレーションとポリモーフィズムの機能を自然に表現出来る仕組みだった。それに対して、''C++''や''Javaに見られる''「継承クラス構造」をベースにした同様の機能の実現はトリッキーと言えた。しかし、現実的に「継承クラス構造」重視の言わば亜流の方がオブジェクト指向の主流となってしまった以上、もはや「メッセージング」主体の''Smalltalk''はオブジェクト指向としての看板を降ろすべきではないか、という自嘲的な見解がそのコメントの根底にあった。オブジェクト指向言語の進化に伴い、オブジェクトとクラス構造の側面ばかりが強調される現状の中で、アラン・ケイは「''Smalltalk''が最高に好きという訳ではないが、他の言語に比べればマシである。」とも述べて、OOP本来の支柱は「メッセージ・パッシング」である事を暗に示唆している。
==脚注==
34 ⟶ 47行目:
==関連項目==
*[[オブジェクト指向モデリング]]▼
*[[構造化プログラミング]]
*[[アスペクト指向]]
*[[ソフトウェア工学]]
*[[デザインパターン (ソフトウェア)]]
*[[
*[[オブジェクトデータベース]]
*[[オブジェクト関係データベース]]
*[[オブジェクト指向
*[[オブジェクト指向分析設計]]
**[[オブジェクト **[[統一モデリング言語|UML(統一モデリング言語)]]
**[[Booch法|ブーチメソッド]]
**[[CRCカード]]▼
*[[
*[[NEXTSTEP]] - オブジェクト指向OSとしてその先進性をアピール。後続OSや開発環境に大きな影響を与えた。
*[[Cocoa]] - NEXTSTEPの後身のフレームワーク。
▲*[[CRCカード]]
==外部リンク==
|