Objective-Cとは?


オブジェクト指向型C言語

オブジェクト指向型プログラミング言語といえば、多くの人は C++ や Java、C# 言語を思い浮かべるでしょう。 言語系にややマニアックな日本人であれば、Smalltalk と答えるかもしれません。 Objective-C も、Smalltalk と同じか、それ以上にマニアックなオブジェクト指向型のプログラミング言語でしょう。 特に、AT互換機と Windows でシステムを構成している技術者は、この言語に触れる機会すらないかもしれません。

しかし、一方でオブジェクト指向言語といえば Objective-C だろうと考えている技術者も存在します。 おそらく、その人は Mac OS の技術者か、スティーブ・ジョブズのファンでしょう。 現代のコンピュータで最も Objective-C を実用しているのは Apple 社の Mac OS X なのです。

ソフトウェアの開発に Objective-C を実用しているのは、Mac OS X 専用の便利なフリーソフトウェアがインターネットで公開されない原因の一つかもしれません。 なぜ、このようなマイナーな言語を用いているのかというと、Mac OS X が NeXT 社の NEXTSTEP の開発言語として採用されていたという歴史的理由です。 Mac OS X の GUI は、NEXTSTEP の API を引き継いでいるため、開発言語も、主に Objective-C を用いているのです。

しかし、脅える必要はありません。 Objective-C は C 言語と完全に互換性のある言語なので、C 言語のソースコードをコンパイルすることができます。 そして、C 言語にオブジェクト指向を実現するためのいくつかの機能を追加しているのです。 幸いに Objective-C のオブジェクト指向は C++ 言語よりはシンプルな構造です。

また、様々な言語の解説文書を記述してきた筆者の経験では、最も学習手順の構成が難しい言語でした。 Objective-C 言語の基本部分の特定の機能を学習するためには、Objective-C 言語全体の構造を理解しなければならないという難しさがあるため、オブジェクト指向の初心者はこの言語の基本部分の本質を理解するのは困難でしょう。 できれば、C++ 言語の知識と本質的なオブジェクト指向の理解が必要です。


Objective-C と C++

Objective-C は C 言語の基本構造をベースにして、Smalltalk 言語を取り入れた言語であり、C++ 言語とは歴史的にも言語仕様もまったく異なる存在です。 現代の主要なオブジェクト指向言語はそのほとんどが Java 言語をベースにしたものが多く、Smalltalk を基本としている Objective-C のコードを見ると、目を丸くすることでしょう。

さらに、C++ などの他の言語はクラスの実体のメモリ構造などを隠蔽するのに対し、Objective-C は C 言語を基本にクラスを実現しているため、ある程度の仕組みが C 言語から見れてしまいます。 つまり、言語仕様として新たにオブジェクト指向的性質を加えた現代のオブジェクト指向型言語に反し、Objective-C は C 言語にデザインパターンとしてオブジェクト指向のシステムを追加したという立場と考えることができます。

Java や C++ では、クラス型の概念やオブジェクトの生成方法を言語仕様として定めています。 しかし、Objective-C ではクラス型や生成方法すらヘッダファイルで定義されているため、その実体は C 言語の構造体を typedef 文で隠蔽しているだけです。 C 言語に親和性が高いのは良いのですが、他のオブジェクト指向言語を習得している技術者には、受け入れがたいものがあるかもしれません。 逆に、C 言語プログラミングにオブジェクト指向をデザインパターンとして採用することを好む開発者にとっては、追加された言語仕様と基盤の仕組みがサポートしてくれるので、都合が良いかもしれません。


Objective-C の実装

Mac OS X を利用しているのであれば、付属している開発環境をインストールするだけで Objective-C を使うことができるようになります。 しかし、Objective-C は Mac OS のためだけの言語ではありません。 すばらしいことに GCC コンパイラでもコンパイルすることができるので、Linux でもこの言語を利用することができます。 Windows でも、Windows 専用にコンパイルされた GCC コンパイラをインストールすることで使うことができます。



戻る次のページへ