オブジェクト指向言語とは?

オブジェクト指向言語ではないものは以下のうちどれか。


GAIT アプリケーション-リテラシ-初級

ア.Java
イ.FORTRAN
ウ.C#
エ.Smalltalk

正解:イ.FORTRAN




「FORTRAN」は、1954 年にIBMのジョン・バッカスによって考案された、オブジェクト指向言語ではなく、科学計算技術計算に向いた手続き型言語である。


オブジェクト指向プログラミング言語一覧

オブジェクト指向プログラミングをサポートする機能を備える代表的なプログラミング言語 (オブジェクト指向プログラミング言語)としては以下のようなものが挙げられる:

Simula 1962年
オブジェクトとクラスを導入した最初の言語。またC++が再定義したオブジェクト指向プログラミング言語の要件を満たすことから、最初のオブジェクト指向プログラミング言語とされることもある。クラスベース。当初はシミュレーション記述用で後に汎用化。
Smalltalk 1972年
オブジェクト間の相互作用にメッセージというメタファを導入した最初の言語。オブジェクト指向と言う言葉はSmalltalkのプログラミングスタイルを説明するために作られた。動的な型付けにより高い柔軟性を持つ。
C++ 1979年
C言語のオブジェクト指向拡張、Simula言語風にクラスを定義でき、C言語の型システムを強化している。当初はC言語に対して上位互換であった他、強い型付けによりC言語譲りの実行効率の高いコードが生成できる。
Objective-C 1983年
C言語のオブジェクト指向拡張。C言語のコードとSmalltalk型のオブジェクトシステムを混在させたもの。オブジェクトシステム自体はCで書かれたランタイム。
Eiffel 1986年
強い型付けを行う型システムや表明など堅牢性を強く意識して設計されたオブジェクト指向プログラミング言語。C++にテンプレートが導入される前に総称型を導入していた。
Self 1987年
最初のインスタンスベースのオブジェクト指向プログラミング言語。
CLOS 1988年
関数型言語Common Lispのオブジェクト指向仕様。
Modula-3 1988年
モジュールを実現していたModula-2言語のオブジェクト指向拡張。
Python 1990年
最初のオブジェクト指向スクリプト言語。
Sather 1990年
Eiffelを拡張したもの。実行効率面での工夫が見られる。
NewtonScript 1993年
PDA環境用に修正されたSelf言語。PDAの性質を生かすため永続オブジェクトをサポートしている。
Ruby 1993年
オブジェクト指向スクリプト言語。クラスのMix-inなどのユニークな機能を持つほか、正規表現に渡るまで全てがクラスとして実装されていることが特徴。
Perl 1994年
Perl 5.0にてオブジェクト指向に対応。既存のPerl言語に後付けで拡張されたため記法は特殊だが、機能面では他のオブジェクト指向言語に引けを取らない。
Adaのオブジェクト指向拡張 1995年
恐らく最も仕様が複雑なオブジェクト指向プログラミング言語。
Java 1995年
仮想マシン(Java仮想マシン)上で動作することによる高い可搬性、リフレクションやスレッドの標準サポートと充実したライブラリ群で知られているオブジェクト指向プログラミング言語。
Object Pascal (Delphi) 1995年
Pascal言語のオブジェクト指向拡張。
JavaScript 1996年
ウェブページ上で実行することを主目的に開発されたスクリプト言語。プロトタイプベースの言語である。
OCaml 1996年
関数型言語MLのオブジェクト指向拡張。クラスが型推論機構に組み込まれているという特徴がある。
C# 2000年
Javaとよく似た作りでJavaと同じく仮想マシン上で動作するが様々な部分で拡張されている。.NET Framework上で動く。
Visual Basic.NET 2002年
既存のVisual Basic(6.0以前)を大きく改訂してオブジェクト指向に対応。C#同様.NET Framework上で動く。
COBOL 2002年
2002年に制定された国際規格に、オブジェクト指向機能が採用された。1994年には、国際規格案を先取りした商用コンパイラ上で利用可能になった。オブジェクト指向構文を使わないCOBOLプログラムと混在できる。
Ceylon 2011年
Java をもとにつくられ、Java のもつ長所と短所を考慮しつつ、商用言語として再設計された言語。

これらは次の2つに分類できる。

ハイブリッド型オブジェクト指向プログラミング言語 (hybrid object-oriented language)
非オブジェクト指向プログラミング言語にオブジェクト指向機能を拡張したもの。Simula、C++およびObjective-C、CLOS、Object Pascal、COBOL、Javaなど。(Objective-CやCLOSはオブジェクト指向部分そのものは純粋。C++などは既存文法の拡張に当たる)。
純粋なオブジェクト指向プログラミング言語 (pure object-oriented language)
当初からオブジェクト指向プログラミング言語として設計されたもの。Smalltalk、Eiffel、Self、Rubyなど。

これらの言語では、クラスの定義、インスタンスの生成、オブジェクト間の通信を構文または専用の関数などでサポートしている。

オブジェクト指向プログラミング言語では継承の利用とあいまってオブジェクトへの参照やポインタが多用される関係で、オブジェクトのメモリへの割り当てのため自動ガベージコレクション機能を備えているものが多い。しかしすべての言語が備えているわけではない。例えば、C++はガベージコレクションを備えていない。

また、言語ではないがGObjectというC言語をオブジェクト指向に拡張するライブラリがあり、これを使用すればC言語でもオブジェクト指向プログラミングが可能である。