オブジェクト指向プログラミング
読み:オブジェクトしこう-プログラミング
外語:OOP: Object Oriented Programming

 オブジェクト指向を用いてプログラムを記述するプログラミング手法のこと。略して「OOP」。
目次

概要

発想
 プログラムが扱うデータなどはオブジェクトというまとまりで扱い、その操作をメソッドとして記述する。
 オブジェクト化することで、処理の再利用が容易になるなどのメリットがある。

言語
 オブジェクト指向プログラミング言語(OOPL)と呼ばれるプログラミング言語で、主に用いられる手法である。
 代表例としては、C++C#JavaObjective-Cなどがある。
 但し、言語と手法は異なるものなので、注意が必要である。C++だろうがJavaだろうが、全くオブジェクト指向でないコードを書くことは可能である。実際にプロでも、そのようなコードを書く者が存在する。

由来
 「オブジェクト指向」プログラミングの「発案者」は様々な論がある。
 OOPは、少なくとも次のような異なった概念が存在している。
 メッセージ指向型の代表はSmalltalkで、アラン・カーティス・ケイが産み出した。
 C++やJavaに代表される形式はクラス指向で、C++の作者ビョーン・ストラウストラップが体系化した。

特徴

メッセージ指向
 アラン・カーティス・ケイが発案したダイナブックを暫定的に実現するSmalltalkシステムで使用されたプログラミング言語Smalltalkで対応した概念である。
 電子計算機に関する全ては、「オブジェクト」と「メッセージ送信」で表現する、という発想である。
 この概念で重要なのはオブジェクトではなく「メッセージ送信」という考え方である。

クラス指向
 現在、一般に「オブジェクト指向」を説明する場合は、無意識にこちらクラス指向を説明することが多い。
 これは、ビョーン・ストラウストラップC++の開発を通じて体系づけた概念である。但しC++が目指したのはオブジェクト指向ではなくマルチパラダイムなので、この概念とC++をイコールで結ぶことは誤りである。
 クラス指向では、カプセル化と情報隠蔽、継承ポリモルフィズムといった概念を有し、抽象データ型(ユーザー定義のデータ型)、継承、仮想関数といった動的なプログラミングを実現する。
 このため、Simulaで実現されたclassを用いることが、クラス指向では必須となる。
 クラス指向におけるオブジェクト指向においては、重要なことは「オブジェクト」である。先のメッセージ送信などは、オブジェクトを実現するための一手法に過ぎないもので、重要ではない。ケイのオブジェクト指向とは別の概念と言って良い。

手続きによる抽象化
 メッセージ指向とクラス指向から、都合の良い部分を抜き出して好き勝手な俺的概念が広まる中、AppleScriptの開発者であるウィリアム・クックが発表したものが「手続きによる抽象化」である。
 抽象データ型は「型」による抽象化であるが、オブジェクト指向は「手続き」により行なわれるものとし、クラス指向のオブジェクト指向とは対極に位置する概念である。

機能
 オブジェクト指向プログラミングでは、従来のそれとは事なる特徴的な機能、技術が多く存在する。
 但し上述のように、オブジェクト指向は一つではなく様々な発想があるため、あるプログラミング言語に、下記するすべての機能があるとは限らない。

再検索