Objective-C
読み:オブジェクティヴスィー
外語:Objective-C

 Cを拡張したオブジェクト指向プログラミング言語C++とは別物である。
目次

言語概要

概要
 C++はCに対しSimula 67型のオブジェクト指向を導入したのに対し、Objective-CはSmalltalk型のオブジェクト指向を導入したものである。
 NEXTSTEPで採用された。当時は既にC++もObjective-Cもあったが、どちらも普及はしていなかった。この何れかを選択するにあたり、NeXTはObjective-Cを選択した。
 しかし時代はObjective-C側には傾かず、結果として普及したのはC++だった。このため、Objective-Cはマイナーな言語となっている。
 NEXTSTEPの後継であるMac OS XのCocoaも、同様にObjective-Cが選択された。

特徴

オブジェクト
 Objective-CはCに対してオブジェクト指向を取り入れた言語である。同様の言語にC++があるが、そのアプローチの方法が全く違っている。
 C++は構造体を拡張する形でクラスを導入した。Objective-Cは、オブジェクトの拡張に、Smalltalk風のCとは全く違う文法を取り込んでいる。
 つまり、一つのプログラミング言語に、由来の全く異なる二つの言語が同居していることになる。このためObjective-Cは分かりにくい、として普及しなかった。

書式概要

クラス定義
 オブジェクト指向プログラミングの機能等は、C++と大差ない。但し書式は全く違う。
 クラス関係の定義について、Objective-Cは新しい予約語や構文を定義するのではなく、コンパイラーディレクティブが使われる。
 クラスの定義は、@interface から始まり @end で終わる。ここで、クラス名と親クラス名、インスタンス変数メソッドの宣言を行なう。
 メソッド定義はクラス定義と分離されている。メソッド定義は、@implementation から始まり @end で終わる。

インスタンス
 クラスのインスタンス化は、一般的なオブジェクト指向プログラミング言語と全く違い、次のように記述する。
 [クラス名 メソッド名:引数リスト…]
 このメッセージ式はid型を返すため、「id obj = [ClassName method];」のように記述することができる。例えば、富士山(MtFUJI)が噴火(eruption)する処理は、次のように書かれる。
 id obj = [MtFUJI alloc];
 [obj eruption];
 allocメソッドでオブジェクトを生成し、生成したオブジェクトが返される。次に、そのオブジェクトのeruptionメソッドを実行している。
 objを使い捨てにするのであれば、次のように書くことも出来る。
 [[MtFUJI alloc] eruption];
 [MtFUJI alloc]によって返されたid型オブジェクトに対し、eruptionメソッドを呼び出す。

再検索