Objective-C の protocol とか


今回の件であちこちからでてきた Objective-C の protocol について。後で探したくなるなと思ったので、まとめてみたものの、このネタで引っ張るのも いい加減しつこい感じでどうしようかと思ってお蔵入りさせていたのだけれど、本家がまだまだ引っ張る気まんまんなので遠慮無く。


プロトコルの意図するもの(トーフサロン)

いろいろなところに便乗して…と思って資料あさってみたけど、まとめるのが面倒になってヤメ。資料だけ並べておく。

とのことなのでちょっぴり残念。(関係ないけど carverさんは、しょっちゅう新しい料理か新しい言語処理系をつくっているような気がする。)

プロトコルは、多重継承の問題を扱います。多重継承するオブジェクトを設計した時、通常はオブジェクトAとオブジェクトBの性質のすべてを継承したいのではなく、Aの性質のうちXというセットと、BのうちYというセットが欲しいのです。これらの性質がメソッドなら、プロトコルにXとYをカプセル化することで、まさに新しいオブジェクトのものにすることができます。さらに、だれかがオブジェクトAまたはBを変更した場合でも、プロトコルも新しいオブジェクトも破壊されません。プロトコルが扱うのはメソッドだけで、AやBのインスタンス変数の問題については扱いません。

http://wwwa.dcns.ne.jp/~nito/objective-c/answer-8.html

Objective-C は @interface で クラスの宣言をして @implementation で実装を書くのですが、@interface に メンバフィールドが入っちゃうのですよね。非常に惜しい(?)とおもったり。

Java Was Strongly Influenced by Objective-C

はてなブックマーク - Java の「インターフェイス」という機能の元ネタ - Smalltalkのtは小文字ですid:terazzo さんの発言や、インターフェースの系譜 - カレーなる辛口Javaな転職日記 の 川谷ぽこ さんのコメントより。

誰が最初かという議論はさておき、JavaObjective-C およびNextStepに強い影響を受けていることはまぎれもない事実です。

Javaの開発者のひとり Patrick Naughton自身がそう言っています。

http://cs.gmu.edu/~sean/stuff/java-objc.html

> I’m pretty sure that Java’s
> ’interface’ is a direct rip-off of Obj-C’s ’protocol’ which was largely
> designed by these ex-NeXT’ers...

実際のところ、NeXTから数人のエンジニアがSunに移ってきているのですね。

インターフェースの系譜 - カレーなる辛口Javaな転職日記

というわけで実は 家政婦は見た開発者は語ってた という話。その道(?)では有名な話なのかも(^^;


* * *


Objective-C とか言うと、なんだか歴史上の言語のような気がしてしまいますが、現役バリバリの言語で、カテゴリとか クラスポージング とか (良い意味で)ハチャメチャな機能が目白押しなので、かじってみるだけでも随分視界が広がりますよ、とちょびっと囓っただけの あたしが言ってみるテスト。ダイナミックObjective-C とか読んでるだけでも愉しいです。


「歴史上の言語のようで現役バリバリ」「ハチャメチャな機能が目白押し」については、我らが Smalltalk も かな〜り濃いのですが(^^;