AS3.0のお勉強「クラスを作る」
Tuesday, 29. January 2008, 16:01:06
いよいよ、自分でクラスを作ってみます。
「クラスパスを通す」の回でsample.flaを作ったところから、はじめます。フォルダ構成はこんな感じでしたね。flaというフォルダにsample.flaを、libというフォルダにGainerのライブラリを置いて、クラスパスを通してあるところから、続きをはじめましょう。
「クラスパスを通す」の回でsample.flaを作ったところから、はじめます。フォルダ構成はこんな感じでしたね。flaというフォルダにsample.flaを、libというフォルダにGainerのライブラリを置いて、クラスパスを通してあるところから、続きをはじめましょう。
まず、これから作るクラスのクラス名とパッケージ名を決めます。
クラス名、パッケージ名ともに以下のようなルールを守ってください。
- 使用できる文字は半角のみで、アルファベット、数字、アンダースコア(_)、ドル記号($)だけ
- 最初の1文字めに数字は使えない
そして、ActionScriptに限らずオブジェクト指向言語の世界では以下のような「お約束」があります。こんなところで自己流を貫いてもしょうがないので世界のお約束に合わせたほうがいいでしょう。
- パッケージ名は小文字で始まる
- クラス名は大文字で始まる
このルールに従って、まずはクラス名を「Sample」とすることにします。
次にパッケージ名ですが、ここでパッケージ名に関しての追加の「お約束」があります。
これから作るクラスの名前を先ほど「Sample」に決めました。ですが、「Sample」なんて名前のクラスは世界中にうじゃうじゃしているような気がします。ここでパッケージ名にもありふれた名前を使ってしまうと、同じパッケージ名で同じクラス名のクラスファイルが世界中にうじゃうじゃ生まれているということになります。
また、Gainerクラスは、gainerパッケージの中にあります。gainerパッケージはオフィシャルなパッケージで、その名前で配られていると分かっているから安心して使えるのです。他の人も同じ名前で全然違うクラスファイルを作っているかもしれない、なんてことになったら大混乱です。
そこで、パッケージ名は世界中に同じ名前がないものにしよう、というお約束があります。「他の人に自分の作ったクラスファイルをあげたりしない」という人も、他の人が作った便利なクラスファイルを使わせてもらうことを考えて、パッケージ名は被らないように工夫すべきです。
世界中に同じ名前がないようにするには、どうしたらよいでしょう。非常に便利なものとしてはドメイン名があります。僕はa3size.comというドメインを持っています。これは自分のものですから、常識で考えて僕以外の人が勝手に使うことはないと思うのです。そこで、
com.a3size
をパッケージ名に使うことにしました。あれ?でもピリオド(.)はパッケージ名には使えないはず……、実はパッケージ名にピリオド(.)を使うと、パッケージの中にパッケージを作ることができるのです。
gainerパッケージは「gainer」フォルダの中にありました。com.a3sizeパッケージは「com」フォルダの中の「a3size」フォルダにあたります。なんでドメインの「.」前後の順番を逆にしているかというと、僕はGainer以外にも色んなActionScriptの開発をしているので、Gainer関連のクラスは
com.a3size.gainer
にまとめたいからなんです。

a3sizeフォルダの中にgainerフォルダをつくる感じです。
このように、自分の作ったパッケージを効率よく、かつ他の人に迷惑が掛からないし影響も受けないように管理するために、ドメイン名を使うのです。ドメインなんか持っていない、という人はメールアドレスが便利です。例えばsample@aaa.example.comというメールアドレスを持っているならば
com.example.aaa.sample
はあなたしかいないということになります。メールアドレスをパッケージ名に使うとなると抵抗も感じる人も多いかと思いますが、パッケージを公開するためだけに無料メールアドレスを取得したりする人も、意外といます。
さて、話をまとめますと、これから作るクラスは、こうなります。
package com.a3size.gainer
{
public class Sample
{
// この中にいよいよコードを書きますよ
}
}
1行目、「package com.a3size.gainer」がパッケージ名の宣言、3行目「class Sample」がクラス名の宣言です。クラス名の前の「public」はいずれ詳しく説明しますが、その名の通り「公的」に使いますよ、という意味です。
では実際にクラスを作ってみます。
Flash CS3のメニューから「ファイル」→「新規」でダイアログを表示し、ActionScript(AS)ファイルを作成します。すると空っぽの画面が出てきます。上記のコードを書いて、とりあえず保存することにします。
ファイル名は、クラス名に拡張子の「.as」がついたものでなければなりません。この場合は「Sample.as」です。保存場所は、パッケージ名と同じフォルダです。作成中のflaファイル「sample.fla」からみて、同じ階層の「com」フォルダの中の「a3size」フォルダの中の「gainer」フォルダの中です。
実は、作成中のflaファイルからみて同じ階層に置かれたパッケージは、クラスパスを通さなくても使うことができます。
「えー、じゃあ「クラスパスを通す」の回で説明していたあのややこしい手順はなんなんだ!」とお思いでしょうが……、これからたくさん実験を繰り返すのに、同じフォルダに大事なgainerパッケージを置いておきたいですか?うっかり消しちゃったら大変ですよ?だからわざわざ別の場所において、クラスパスを通したのです。転ばぬ先の杖、なのです。自分はうっかり消したりしない!という方は、どうぞgainerフォルダを作業中のflaファイルと同じディレクトリに持ってきてください。それで、クラスパスを通す必要はなくなります。
さて、クラスファイルにコードを書いてみます。「クラスパスを通す」の回ではタイムラインに書いた
import gainer.*;
// Gainerクラスのインスタンスを作成する
var gainerIO:Gainer = new Gainer("localhost", 2000, Gainer.MODE1, true);
// Gainerの準備ができたら、実行する
gainerIO.onReady = function():void { trace("ready."); };
を、クラス内に書きます。
// Sample.asの中身
package com.a3size.gainer
{
public class Sample
{
public function init():void
{
import gainer.*;
// Gainerクラスのインスタンスを作成する
var gainerIO:Gainer = new Gainer("localhost", 2000, Gainer.MODE1, true);
// Gainerの準備ができたら、実行する
gainerIO.onReady = function():void { trace("ready."); };
}
}
}
「function init():void」は「init」という名前の「関数」を定義しています。その中身は以前タイムラインに書いたもの、そのまんまです。
sample.flaのタイムラインからコードを移動させましたので、その代わりに移動させたコードを呼び出すコードをタイムラインに書いてみます。
// sample.flaのタイムライン1フレーム目のコード // クラスを読み込む準備 import com.a3size.gainer.Sample; // クラスをインスタンス化(実体化) var sampleObj:Sample = new Sample(); // 関数initを実行 sampleObj.init();
クラスをインスタンス化させる、とは一体なんのことでしょうか。次回は、このコードの解説を書きます。


How to use Quote function: