これまでクラスの宣言をして来たが、ここではクラスで使うオブジェクトの宣言をする。
ここで行う処理の事をinstantiatingという。(日本語直訳だと具体例を挙げる。また出たよこのindirectionみたいな要素。)
オブジェクトを具体的に示す(インスタンスを生成する)ためにその分メモリ領域を確保してそこに情報を格納する。
その確保する時には何らかの値を格納してメモリを初期化するのだが、その値はランダムな値ではなく一定の値が格納される事になっている。
そのメモリ確保(allocation)と初期化が済んだ状態の事でインスタンスの生成が可能になる。
生成したインスタンスの値は「instance variables」 といい、「ivars」と表記する事もある。
新しいオブジェクトを作るためにはまず、クラスにメッセージを送る必要がある。
これはOBJCの特徴で、クラスをオブジェクトのように扱い、メッセージを送る事ができる。この事に関する英文は読めなかった。。。
実際にコードの解説をしようと思う。
まず最初にmain()があり、以前のサンプルShapes-Procedualでは配列を用意していたのに対し今回はidの属性を持つオブジェクト(だが中身は配列)を宣言している。
shapes[0] = [Circle new];
このようにshapes[0]に対して[Circle new]というメッセージを送る事で図形ごとのオブジェクトを生成する。
さらにサンプルShapes-Procedualと違うところがある。それは図形の要素を、構造体で決められた値を使ってオブジェクトとして宣言しているところだ。
setBoundsのrect0は最初にShapeRectとして、の中でsetFillColorのkRedColorはShapeColorとしてそれぞれ構造体で宣言された値を忠実に使っている。
drawShapes (shapes, 3);
そんな発狂するような処理(訳そのまま抜粋)を終えてこのようなコードを記述するとdrawShapesファンクションが実行されて画像描写が行われる。(最後のカッコの値はshapesの値を3つ使うという意味でいいのだろうか。。。)