Objective-Cはどこから来たのですか?C ++またはC?


8

このプログラミング言語であるObjective-Cは、iOSアプリケーションの開発に使用されていると聞いています。

OOPの原則を使用していることは知っています。すでにC ++を知っていると、より簡単に学習できますか?名前は?Cプログラミング言語とC ++で使用するOOP原則の組み合わせですか?

回答:


12

ブラッドコックスとその仲間たちは、Cの上にSmalltalkの薄層を追加しました。

したがって、Objective-Cは、C ++よりもSmalltalkの非常に動的なメッセージ送信スタイルOOとの共通点がはるかに多くなります。

主な違いの1つは、Objective-Cでは、クラスが何かについてあまり気にしないことです。つまり、何かが理解するメッセージに関心があります。実行時に、理解するメッセージのセットを変更するオブジェクトを持つことができます。

2つの言語はオブジェクト指向とはまったく異なる概念を持っていると言いましたが、継承、委任、ポリモーフィズムなど、多くの概念/原則がまだ共有されています。どちらの言語で書かれたコードでも、さまざまなOOパターンの多くの例を簡単に見つけることができます。


2

他の人は、Objective-CはCに追加されたSmallTalkスタイルのOOレイヤーであることを指摘しました。C++は、Cに追加されたSimulaスタイルのOOレイヤーとして開始したことを追加します(その後、テンプレートは適切な手段として追加されました)。


1

馬の口

Objective-Cは、C言語の台木にSmalltalk-80スタイルのオブジェクト指向プログラミングを移植することによって形成されたハイブリッドプログラミング言語です。Objective-Cは、Cがすでに提供しているオブジェクトに、1つの新しいデータ型であるオブジェクトを追加し、1つの新しい操作であるメッセージ式を追加します。Smalltalk-80と同様に、Objective-Cはオブジェクトの異なる種類(クラス)をコンパイル時に区別しません。

「C ++をすでに知っていると、もっと簡単に習得できますか?」私はそうは思いませんが、それが害になるとは思いません。すでにC ++を知っている場合は、クラスやオブジェクトなどの概念に慣れているかもしれませんが、Objective-CはC ++とはまったく異なる方法でクラスを実装していることがわかります。Stroustrupからいくつかの用語を借用するために、すべてのObjCメッセージは「仮想」であり、サブクラスによって再定義することができます。または、実装を定義クラスで交換することもできます。これと他の微妙さは、おそらくC ++を知ることから得られるであろう頭のスタートのいくつかをキャンセルします。


Objective-Cのメソッドは、C ++のメソッドよりもはるかに仮想的です(「明らかに存在するだけ」)virtual。オブジェクトは、メッセージを理解する必要さえありません。それはメッセージを理解できる内部オブジェクトにメッセージを静かに転送することができ、透過的なプロキシが例えばデータベースからのインスタンスの遅延ロードをサポートすることを可能にします。
Frank Shearar、2012

確かに、私は専門用語を借りてアイデアを馴染ませていました。C ++はvtableを使用して仮想メソッドをディスパッチします。ObjCは最近、パフォーマンスの最適化として追加しました。

0

Objective-CはCであり、Smalltalkのレイヤーがあります。

ウィキペディアによると:

Objective-Cは、Cプログラミング言語にSmalltalkスタイルのメッセージングを追加する、反射型のオブジェクト指向プログラミング言語です。

これはオブジェクト指向ですが、C ++から直接のものではありません。

そう、そうです、それはSmalltalkの OO能力のいくつかを備えたC です。


5
実際、C ++からのものでもありません。C ++はSimulaからクラスモデルを借用しており、2つの言語はほぼ同時に開発されていました。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.