タイトル【今から始めるCocoaプログラミング】最初のアプリケーション(3)クラスを設計する<続き>カテゴリーCocoa, ProjectBuilder/Interface Builder, 今から始めるCocoaプログラミング
作成日2000/12/17 15:16:52作成者新居雅行
続いて、作成したクラスにOutletとActionを追加する。これはプログラムを知っている人にとっては、Outletはインスタンス変数、Actionはメソッドと呼ぶ方が分かりやすいだろう。プログラムの中で行ないたいことは、ウインドウに配置されたコントロールの値を取ってくるなどの処理を行ないたい。そのために、プログラム中で、コントロールを参照している必要がある。どう参照するかというところが、開発ツールでは大きく異なる。純粋にJavaだけでソースを書くと、コントロールは自分でnewキーワードで生成するので、参照はそのときに変数に記録するという手法を取る。Basic系言語では、コントロールの名前がそのままあたかも変数のように使え、それがコントロールを参照している。Interface Builderでは、あくまでやり方の1つという前置きを置くが、Outletをコントロールと結び付ける。そうすることで、クラスの中から、コントロールを参照できるようになるのである。また、Actionを定義することで、今度はクラスの外、たとえばコントロールの操作からメソッドを呼び出すことができる。こうして、OutletとActionを使って、クラスはその外部、ここではコントロール群とやりとりができるというわけだ。
Outletを作成するには、クラスを選択した状態で、ClassesメニューからAdd Outletを選択する。そうすると、他のクラスはグレーで隠されたようになり、対象としているクラスにだけフォーカスが当たったような表示になる。そして、クラス名のさらに下位にOutletsとActionsという項目が加わり、ここに定義したOutletやActionが並ぶことになる。ここでは、新しく作られたOutletにTextField1という名前を付けた。同様にして合計3つのOutletを作成した。名前から容易に分かるように、後からテキストフィールドに結び付けるつもりだ。

◇lassesメニューからAdd Outletを選択する
 
◇Outletの1つが作られるので、名前を変更した
 
◇合計3つのOutletを作成した
 

同様にして、作成したクラスのMyWindowControllerに、Actionを定義する。ClassesメニューからAdd Actionを選択するが、クラス名を選択していなくても、クラスの中の何かを選択している状態でもかまわないようだ。そして、新しく作られたActionの名前を「clickButton()」とした。図では見えにくいが、最後は、半角のカッコを引数を付けないで指定しておく。メソッドだからカッコがつくと思えばいいだろう。

◇ClassesメニューからAdd Actionを選択する
 
◇clickButtonという名前のActionにした
 

こうしてOutletとActionを定義すれば、それでクラスの定義がMyDocument.nibに残ることになる。クラスはある意味ではプログラムの設計図であって、実際に稼動させるには、オブジェクトとして生成するという風に解釈できる。生成あるいはインスタンス化などとも言われるが、プログラムでインスタンス化を行なう場合には、Javaの場合は「new クラス名」という構文が使われる。だが、Interface Builderを使った作業では、Interface Builderの中でインスタンス化をしてしまうのである。インスタンス化するプログラムのステートメントを記述するわけではない。
ウインドウのクラス名部分を選択している状態で、ClassesメニューからInstanciateを選択する。すると、そのクラスのインスタンスが作成される。インスタンス自体は、MyDocumet.nibウインドウのInstancesのタブのパネルで参照できる。「MyWindowC...」となっているのが、MyWindowContollerクラスをインスタンス化したものである。

◇ClassesメニューからInstanciateを選択
 
◇インスタンス化されたものがアイコンとして見える
 

このインスタンス化ということは、開発ツール上でインスタンス化したという見方ができる。すでに存在するオブジェクトとなっているわけだ。また、クラスではなく、インスタンス化したオブジェクトであるという点も意識しておく必要があるだろう。そして、実際にビルドしたソフトウエア上でも、インスタンス化される。つまり、.nibファイル内で特定のクラスのインスタンス化がなされていれば、実行したときも、フレームワークの機能が働いてインスタンス化されるわけである。言い換えれば、プログラム上で、「new MyWindowController()」のような記述がなくても、インスタンスは生成されるわけである。

次回は、いよいよインスタンスとコントロールを結ぶことにしよう。
関連リンク