オブジェクト指向言語
オブジェクト指向言語とは、プログラミング言語の分類[1]の1つで、オブジェクト指向プログラミングを行うために特化した機能・仕様を持つプログラミング言語を指す用語である。
概要[編集]
オブジェクト指向プログラミングとは、オブジェクトを中心としたプログラミングによってプログラムを組むプログラミング手法である。オブジェクト指向言語とは、それを可能にするための構文などの仕様を組み込んだプログラミング言語を指す。
実装されたプログラミング言語によって詳細は異なるが、主軸となるのは以下の点である。
- オブジェクトにはインターフェイス[2]となるメソッドを持たせ、メソッドによるオブジェクト同士での相互作用[3]によってプログラミングを行う。
- メソッドは通常、オブジェクト自体でなくオブジェクトの原型に実装する。
- オブジェクトの状態はオブジェクト内部で管理し、情報を参照する場合は直接参照させずに必ずメソッドを介して行うようにする。非公開の場合は、メソッドを設けないか、アクセスを制限する。
オブジェクトの説明として「現実のモノとオブジェクトを対応させる」のような表現がされることがあるが、ほとんどの場合はそのようにはならない。この説明は、オブジェクト指向プログラミングにおける継承という概念の説明のための便宜的なものである。
オブジェクト指向言語の開発手法は、他のプログラミング手法とは必ずしも相反しない。
例えば、C++、Ruby、Javaなどは、オブジェクト指向言語であるが、メソッドの実装は多くの場合で手続き型となる。一部、関数型プログラミングの手法を取り入れることもある。
オブジェクト指向言語の始祖とされるSmalltalkでは、メソッドを呼び出すというのとは違って「オブジェクトに対してメッセージを送る」という概念でオブジェクト指向プログラミングを表しているが、それ以外の言語は必ずしもそのようにはなっていない。
クラスベースとプロトタイプベース[編集]
有名なオブジェクト指向言語の多くは、クラスベースである[4]。これは、クラスという型システムに基づいてオブジェクトの拡張を行う方式である。クラスは継承という仕組みで機能を拡張することができ、継承されたクラスは継承元(親クラス)との型互換性がある。
一方、プロトタイプベースは、継承ではなくオブジェクトのプロトタイプに対して機能を付け足すことでオブジェクトの拡張を行う方式である。広く知られている言語では、JavaScriptがプロトタイプベースである。
脚注[編集]
- ↑ プログラミングパラダイムやプログラミング手法などに基づいて分類される。
- ↑ Javaの
interface
とは別の意味。 - ↑ 個人的には、メソッドを呼び合うような書き方はあまりしないので、相互というのは微妙な表現かもしれない。
- ↑ 概要に挙げている言語はクラスベース。