回答:
ブラッドコックスとその仲間たちは、Cの上にSmalltalkの薄層を追加しました。
したがって、Objective-Cは、C ++よりもSmalltalkの非常に動的なメッセージ送信スタイルOOとの共通点がはるかに多くなります。
主な違いの1つは、Objective-Cでは、クラスが何かについてあまり気にしないことです。つまり、何かが理解するメッセージに関心があります。実行時に、理解するメッセージのセットを変更するオブジェクトを持つことができます。
2つの言語はオブジェクト指向とはまったく異なる概念を持っていると言いましたが、継承、委任、ポリモーフィズムなど、多くの概念/原則がまだ共有されています。どちらの言語で書かれたコードでも、さまざまなOOパターンの多くの例を簡単に見つけることができます。
馬の口:
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であり、Smalltalkのレイヤーがあります。
ウィキペディアによると:
Objective-Cは、Cプログラミング言語にSmalltalkスタイルのメッセージングを追加する、反射型のオブジェクト指向プログラミング言語です。
これはオブジェクト指向ですが、C ++から直接のものではありません。
そう、そうです、それはSmalltalkの OO能力のいくつかを備えたC です。
virtual
。オブジェクトは、メッセージを理解する必要さえありません。それはメッセージを理解できる内部オブジェクトにメッセージを静かに転送することができ、透過的なプロキシが例えばデータベースからのインスタンスの遅延ロードをサポートすることを可能にします。