2009/11/29

Implementing Object Orientation

前回のプログラムを改良したものとして03.10 - Shapes-Objectを紹介。

まず1つ目の変更点はメソッドdrawShapesの中身だ。



ここで変わった事は第一に、コードが短くなっていることだ。わざわざ図形ごとの処理を分けなくてもいい方法になっている。

次に、メソッドの最初に宣言しているshapes[]だ。これはid型の配列なのだが、ここでいうid型というのはオブジェクトを宣言する際に用いる。オブジェクトを呼び出す事はCの構造体を扱う事と同じような事なので、構造体へのidはポインタの1つといえる。
この場合は図形の種類を決める構造体へのポインタになる。

3つ目に変わった事は、中心のループだ。
forの内部ではまずid shapes = shapes[i]という宣言をする。
ここでは配列shapesのポインタを得て、id型のオブジェクトshapeという変数にそれを代入する。それぞれshapes[0] は赤い円のクラスCircleへのポインタ、shapes[1] は緑の長方形のクラスRectangleへのポインタ、shapes[2] は青い楕円のクラスOblateSpheroidへのポインタとなる。
そして[shape draw]と表記することで、shapeというオブジェクトが drawというアクションを実行するようになる。
 OBJCでは、このようにアクションがオブジェクトを呼び出すことを”アクションがオブジェクトにメッセージを送信する”と表現する。

[shape draw]で行われる処理の手順は以下のように示すことができる。
1、shapeがどのようなクラスであるか参照する。
2、コード内のどこにdrawというファンクションがあるか調べる。
3、shapeに含まれるクラスの情報を使ってdrawを実行する。





 OOP in OBJC
次に、これらの処理を行うために準備する重要な要素について説明。
Interface:クラスの宣言。この要素を宣言することで先ほどのようにクラスCircleによってdrawというアクションが実行されるようになったりする。
Implement:Interfaceの実装部。今回のコードの中ではdrawからCircleにメッセージを送信されたときにどのような処理をするか記述している。



このコードはクラスCircleに関する宣言のみ行っている。
1行目:コンパイラに対してNSObject型のCircleという名前のクラスを作ることを宣言。
2、3行目:このクラスを形成するために必要な要素の宣言を行う。
最低限、ここまでの処理(クラスの作成、2つの要素の構成)でクラスの宣言は完了する。カッコを閉じることで宣言の終了をコンパイラに指示する。
ちなみに、クラス内で自作した新たな宣言のことをクラスのオブジェクトに対するインスタンス変数という。

以下はメソッド宣言と呼ばれるものになる。
こんな宣言をサポートしてるぞと言わんばかりに、その名前と返り値の型・名前を記述する。
OBJCのメソッドが返すことができる値として「int, float, char, ポインタ, オブジェクトの参照, 構造体」があげられる。

まずは最もシンプルな- (void) draw;について。
「-」がつくことで「これはOBJCのメソッドだぞ」という意味になる。特に返り値は持たない。





読み込み中
クリックでキャンセルします
画像が存在しません



読み込み中
クリックでキャンセルします
画像が存在しません


0 件のコメント:

コメントを投稿