Interface != Protocolという話

この方はちゃんとJavaObjective-Cの両方を使っているようだ。だから言っていることにも頷ける。

そういう意味で、ProtocolとInterfaceは両方を使ってるプログラマとして「違う」と言わざるを得ない。ProtocolはObjective-Cという言語上は脇役で便宜上必要となった存在っぽいけど、Interfaceは「便宜上」ではなく言語としての思想にまで関連して導入されている感じがする。InterfaceはProtocolの考え方を主役にまで格上げした存在と言ったらいいのかな。
私はそういう点での違いを感じています。両方を使っているプログラマとしての率直な感想です。

http://d.hatena.ne.jp/t_yano/20071202/1196601869

これはまあ言っていることは分かる。ただ何が違うのかを明示してないのがちょっと残念。この文章ではたぶん「(言語における)重要度が違う」「立場が違う」と主張しているんだと思うんだけど、今問題なのは「機能が同じかどうか」たよね?「機能は同じだけど重要度が違う」ということなら納得。誰も文句はないと思う。もし「機能は同じだけど重要度が違うから違う機能」とか言い出したら、「機能は同じだけど目的が違うから違う機能」と言い放ったBlackなJava屋さんの同類。

Objective-CのProtocolというのはある意味「おまけ」なんですよね。リモート通信のために作り出された機構というか、必要悪というか、「ほんとうはこんなもの動的なObjective-Cにはないのが理想なんだけど仕方がない」という雰囲気が漂っているというか。Objective-Cの言語仕様の中心に位置していないというか。

http://d.hatena.ne.jp/t_yano/20071202/1196601869

Objective-Cをちゃんと使っていることがわかる文章。まったくその通りで、分散オブジェクトの導入がなければprotocolも実装されなかったと思う。Objective-Cのprotocolは、機能としては違えど目的はCORBAと同じなんだろう。


やっぱり使っている人の意見はいいね。ちゃんと的を得ている。使いもせず、資料を調べもせず、「違う機能だ」と言い張ってる某氏とはえらい違いだ。


で、JavaのinterfaceとObjective-Cのprotocolは、機能として何がどう違うの−?