Cocoaをより深く味わうために

AppleフレームワークであるCocoaCocoaMaciPhoneのアプリを開発するのに使われるフレームワークCocoaObjective-Cというマニアックな言語の上に実現されているため、色眼鏡で見てしまいがちだが、使えば、使うほどエレガントなフレームワークであるような気がしてくる。一体、Cocoaはどこがエレガントなのだろうか?この疑問は正しいのか?
Cocoaを使っていて、私がずっと感じていた疑問は以下である。

  • 何故、プロトコルJavaのインターフェースクラスに相当)を使わずカテゴリ(メソッドをオーバーライド)を使うのか?
  • 何故、インターフェースクラスを使わずに、ターゲット・アクションを使うのか?
  • 何故、サブクラスを使わずに委譲を使うのか?
  • セレクタってGTK+のシグナルみたいなもの?だとしたら性能は大丈夫だろうか?

この疑問がCocoaのエレガントさにつながるような気がしてならない。この予測は正しいのだろうか?
こう言った疑問を解決してくれるのが、この本「Dynamic Objective-C」。

Dynamic Objective-C

Dynamic Objective-C

Cocoaの仕組みに関して知りたかったことは、この本があればほぼ解決してくれる。この本は木下誠さんが、WebでObjective-Cについて連載したコラムが書籍化されたものとなる。お金をかけたくなければ、Webで見ることができるが、しっかり、読みたい人は本を買って読むことをお勧めする。買っておいて、損はしない。
本を読めばわかるが、CocoaObjective-C)はダイナミック(本のタイトルにも含まれる)であることが、エレガントである所以だと言っても過言ではない。このダイナミックさがInterface Builder(IB)のような強力なツールを産み出したと言っても過言ではない*1Cocoaの仕組みだけ見ると、GTK+のようなウィジェット系のフレームワークも同じような位置付け*2にあるような気がする。
また、Cocoaの仕組みを読み解くためには、「Dynamic Objective-C」と併用する形でCappuccinoを使うのがよい。CappuccinoJavaScriptObjective-Cを実現したフレームワーク。使えるAPICocoaそのもの。ソースコードが公開されており、ブラウザがあれば、自分でCappuccinoが提供するAPIをカスタマイズし、簡単に動かすことができる。Macを持っていない私でもCocoaを勉強することができる。私は、Cappuccinoソースコードを見たあとに、Dynamic Objective-Cを読んだので、今まで疑問(上記に記載)に思っていたことが氷解するように分かった。
私は、Cocoaを深く味わうために、CappuccinoCappuccinoを使っている。フレームワークを理解するために必要なものは、自由にいじくりまわせるソースコードがあることと、よい本があることだと思う。

*1:何故なら、IB上でインターフェースクラスの定義やサブクラス化なんてやってられないから

*2:どちらも、C++のようなオブジェクト指向言語を使わずにC言語上にオブジェクト指向ライクな言語を実現している