辞書: Objective-C

投稿日: 更新日:

Objective-Cとは

プログラミング言語の一種です。以下のような特徴を持ちます。

  • オブジェクト指向言語です。
  • C言語の拡張という意味ではC++と同じですが、拡張部分はC言語と全く異なります。Smalltalk由来の[obj message]といった文法になります。
  • C++と異なり、多重継承を認めません。その代わりに、プロトコルという仕組みがあります。プロトコルはJavaのinterfaceと同じです。

超マイナーな言語から世界中で使われる言語に

自分がObjective-Cを知ったのは、もちろんNEXTSTEPですが、 当時は超マイナー言語でした。C++も学んだのですが、 C++がどうも好きになれない1ので、 なんでこんないい言語が2評価されないのかなぁとモヤモヤしてました。

でも、AppleによるNeXTの買収(NeXTによるAppleの乗っ取り) によってMac OS Xの開発言語として復活し、 iPhoneのヒットによって、世界中で使われるメジャーな言語になりました。

Javaにも影響を与えた

Objective-Cの直系の子孫はAppleが開発したSwiftですが、傍系の子孫とも言えるのが、Javaです。 JavaとObjective-Cは似ているところもあれば似てないところもありますが、C++よりは似ていると思います。

  • 似ている箇所
    • 多重継承を許さず、インターフェースによる継承
      • Objective-Cではプロトコル、Javaではインターフェースを使用
      • C++では多重継承が可能です。
    • ルートクラスの存在
      • Objective-CではNSObject、JavaではObject
      • C++ではルートクラスが存在しません。
  • 似ていない箇所
    • Objective-Cではダック・タイピングが可能だが、Javaでは不可能。
      • Javaでも継承関係にかかわらず特定のメソッドを呼ぶことは可能なので、「インターフェースの定義や面倒な手続きをせずに任意のメソッドが呼び出せる」くらいの意味です。
      • ダック・タイピングは柔軟で楽ですが、静的チェックが困難になる弱点もあるので、欠点ではないです。
    • Objective-Cでは既存クラスの拡張が可能だが(カテゴリ)、Javaでは不可能。

  1. その後QtやKDEでC++に触りましたが、やっぱり無理という結論。 ↩︎

  2. もちろん当時の基準で、今はもっといい言語はたくさんあります。 ↩︎