オブジェクト指向

出典: Wikipedio


オブジェクト指向(オブジェクトしこう)とは、オブジェクト同士の相互作用としてシステムの振る舞いをとらえる考え方である。英語の object-oriented (直訳は、「対象物志向の」・「目的重視の」という意味の形容詞) の日本語訳である。

オブジェクト指向は、当初プログラムの構造をオブジェクト群の相互作用の関係として捉えてプログラムコードを書き表すオブジェクト指向プログラミング (OOP; object-oriented programming) から始まっているが、その後、システム開発における要求分析フェイズにおいて、開発しようとする対象領域の構成要素をオブジェクトとして発見・定義していくオブジェクト指向分析 (OOA; object-oriented analysis) 、システムの動作や構造をオブジェクトとクラスとして記述するオブジェクト指向設計 (OOD; object-oriented design) のための、技術としても広く発展・普及することとなった。

オブジェクト指向の枠組みが持つ道具立ては、一般的で強力な記述能力を持つ。特に複雑なシステム記述、巨大なライブラリ(特に部品間で緊密で複雑な相互関係を持つもの)の記述においては、現実問題としてオブジェクト指向の考え方は必須であるといえる。

目次

「オブジェクト指向」の定義

オブジェクト指向」という用語はときとして曖昧に使われることがある。

これらのどれかのことを指してオブジェクト指向と呼ぶことがある。

パラダイムとしてのオブジェクト指向

オブジェクト指向分析が提唱される以前には、システム分析のレベルにおいては、データ構造を中心としたシステムの分析技法である構造化技法が存在した。

また、プログラミングのレベル (プログラミングパラダイム) では、プログラムの実行の流れを決められた制御構造の組み合わせとして書き下す構造化プログラミングや、カプセル化を促すモジュールプログラミング、多態に対応するデータ指向プログラミングという技法が存在していた。

これらに対し、オブジェクト指向手法はそれらを一般化しさらに推し進めたものであるという考え方がある。

オブジェクト指向分析オブジェクト指向設計に基づいてシステムを実際に開発する際には、オブジェクト指向プログラミング言語 (OOPL; object-oriented programming language) を用いる必要は必ずしもない。ただし、オブジェクト指向によるシステム分析結果を実装するには、プログラム構造とのセマンティクスギャップが少ないオブジェクト指向プログラミング言語を用いるのが普通である。

なおオブジェクトという用語は時に「もの」という直訳語で認識される場合があるが、英語のobjectには「目的語」、または「目的となる対象物」という意味がある。従ってオブジェクト指向は本来「述語(機能)よりもその対象を中心に据える」というニュアンスをもつ用語である。

オブジェクト指向開発方法論・プロセス

オブジェクト指向開発の方法論として、Booch法オブジェクトモデル化技法 (OMT) 、オブジェクト指向ソフトウェア工学 (OOSE/Objectory) などが提唱されていた。 近年、これらの各種の方法論で使用するダイアグラムの表記法は、OMG (Object Management Group) によって UML (Unified Modeling Language; 統一モデリング言語) として1997年に標準化されており、以降はほとんどのオブジェクト指向開発方法論においてUMLが採用されている。

オブジェクト指向プログラミングの構成要件

Template:Main

オブジェクト指向プログラミングを構成する概念は次のようなものである。

カプセル化 (情報隠蔽)
オブジェクトの振る舞いを隠蔽したり、オブジェクト内部のデータを隠蔽したり(データ隠蔽)、オブジェクトの実際の型を隠蔽したりすることをいう。これは古典的な可視性の定義である。

また、オブジェクト指向プログラミングの概念拡大に伴い、必須と表現するのが不適切になりつつあるが、旧来の多くのオブジェクト指向言語が備えている性質には以下のものがある。

インヘリタンス (継承)
あるオブジェクトが他のオブジェクトの特性を引き継ぐ場合、両者の間に「継承関係」があると言われる。クラスベースのオブジェクト指向に固有の概念である。
ポリモーフィズム (多態性)
あるオブジェクトへの操作が呼び出し側ではなく、受け手のオブジェクトによって定まる特性。クラスベースのオブジェクト指向の場合には、派生クラスの複数分岐として多態性を実現する。 プロトタイプベースのオブジェクト指向の場合では関係がない概念とされる。
ダイナミックバインディング (動的束縛)
ある変数オブジェクトの型が実行時に動的に定まる特性。これはオブジェクト指向の本質的な概念ではあるが、実行時性能に制約が生じる為、この特性を備えていないオブジェクト指向言語もある。

オブジェクト指向の方式

関連項目

Template:Wikibooks

af:Objekgeoriënteerde programmering ar:برمجة كائنية التوجه be:Аб'ектна-арыентаванае праграмаванне be-x-old:Аб'ектна-арыентаванае праграмаваньне bg:Обектно-ориентирано програмиране bn:অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং bs:Objektno orijentisano programiranje ca:Programació orientada a objectes cs:Objektově orientované programování da:Objektorienteret programmering de:Objektorientierte Programmierung el:Αντικειμενοστρεφής προγραμματισμός en:Object-oriented programming eo:Objektema programado es:Programación orientada a objetos et:Objektorienteeritud programmeerimine eu:Objektuei orientatutako programazio fa:برنامه‌نویسی شیء گرا fi:Olio-ohjelmointi fr:Programmation orientée objet gl:Programación orientada a obxectos he:תכנות מונחה עצמים hr:Objektno orijentirano programiranje hu:Objektumorientált programozás id:Pemrograman berorientasi objek io:Objektema programado is:Hlutbundin forritun it:Programmazione orientata agli oggetti ka:ობიექტურად ორიენტირებული პროგრამირება ko:객체 지향 프로그래밍 lt:Objektinis programavimas mk:Објектно-ориентирано програмирање ms:Pengaturcaraan berorientasi objek nl:Objectgeoriënteerd no:Objektorientert programmering pl:Programowanie obiektowe pt:Orientação a objetos ro:Programare orientată pe obiecte ru:Объектно-ориентированное программирование scn:Prugrammazzioni urientata all'uggetta sh:Objektno orijentisano programiranje simple:Object-oriented programming sk:Objektové programovanie sq:Programimi i orientuar në objekte sr:Објектно-оријентисано програмирање sv:Objektorienterad programmering ta:பொருள் நோக்கு நிரலாக்கம் th:การเขียนโปรแกรมเชิงวัตถุ tr:Nesne Yönelimli Programlama uk:Об'єктно-орієнтоване програмування ur:برمجہ شئے التوجہ vi:Lập trình hướng đối tượng wuu:面向对象程式编制 zh:面向对象程序设计

個人用ツール