カスタムクラスの作成

プロジェクトで使用するクラスを作成するプロセスは、困難に見えるかもしれません。 しかし、クラスの作成においてより困難な段階は、クラスのメソッド、プロパティ、イベントを設計する作業です。

クラスの設計戦略

オブジェクト指向型の設計の原則は複雑なものです。この分野の学術的な研究と専門的な実務に、これまでの知識がすべて注がれてきました。ここではさらに、設計に取り組みやすくするためのアプローチをいくつか提言します。

  1. このクラスのインスタンスがアプリケーションで果たす役割を考えてみましょう。一般に、オブジェクトは次の 3 つの役割のいずれかを果たします。

    • 値オブジェクト:このオブジェクトは、主にデータのコンテナとして機能します。多数のプロパティと、それよりも数の少ないメソッドを含む可能性があります(あるいはメソッドをまったく含まない場合があります)。このオブジェクトは、通常は、明確に定義されたアイテムをコードで表現したものです。例えば、ミュージックプレーヤーアプリケーションの Song クラス(実世界の 1 つの曲を表す)や、Playlist クラス(曲のグループを表す)などです。

    • 表示オブジェクト:実際に画面上に表示されるオブジェクト。例として、ドロップダウンリストやステータス読み出しなどのユーザーインターフェイス要素や、ビデオゲームの登場人物などのグラフィカル要素などがあります。

    • アプリケーション構造:このオブジェクトは、ロジック内のサポート、またはアプリケーションで実行される処理といった幅広い役割を担います。例えば、生物学におけるシミュレーションで、特定の計算を実行するオブジェクトを作成できます。ミュージックプレーヤーアプリケーションで、ダイヤルコントロールとボリューム読み出しとの値を同期させる役割を持つオブジェクトを作成できます。また、ビデオゲームで、ルールを管理するオブジェクトを作成することもできます。さらに、保存された写真を描画アプリケーションに読み込むオブジェクトを作成することもできます。

  2. クラスで必要とされる個々の機能を決定します。異なる種類の機能がクラスのメソッドになることが頻繁にあります。

  3. クラスが値オブジェクトとして機能するように設計されている場合、インスタンスに格納するデータを決定します。このようなアイテムは、適切なプロパティ候補になります。

  4. クラスはプロジェクト用に設計するので、アプリケーションに必要な機能を提供することが最も重要な目的になります。次の質問の答えを考えてみましょう。

    • どのような情報分野がアプリケーションで保存、追跡、操作されるか。この答えを考えることで、必要な値オブジェクトとプロパティを特定しやすくなります。

    • アプリケーションで、どのアクションセットを実行するのか。例えば、アプリケーションが初めてロードされたとき、特定のボタンがクリックされたとき、ムービーの再生が停止したときには、アプリケーションはどのように動作するのでしょうか。このような情報から、どのメソッドを使用するのかを判断します。その「アクション」が個々の値の変更を必要とする場合は、使用するプロパティを判断します。

    • 特定のアクションについて、クラスがそのアクションを実行するため、どのような種類の情報を知っておく必要があるか。このような種類の情報は、メソッドのパラメーターになります。

    • アプリケーションが作業を進める過程で、アプリケーションの別の部分が知る必要のある、どのようなことがクラスで変化するか。これは適切なイベント候補になります。

  5. 必要なオブジェクトとよく似た既存のオブジェクトが存在し、必要な機能の一部だけが欠けている場合は、どうすればよいでしょう。そのような場合には、サブクラスの作成を検討してください。(サブクラスとは、カスタムの機能をすべて定義する代わりに、既存のクラスの機能に基づいて構築するクラスです。)例えば、画面上にビジュアルオブジェクトとして表示されるクラスを作成する場合、そのクラスの基本として、既存の表示オブジェクトのビヘイビアーを使用できます。この場合は、その表示オブジェクト(Sprite や MovieClip など)が基本クラスとなり、作成するクラスは「 基本クラス 」の拡張となります。

クラスのコードの作成

クラスの設計を決定した後、または少なくとも、格納する情報の種類と実行するアクションの種類を決定した後は、実際のクラス作成のシンタックスはまったく簡単なものになります。

次にカスタム ActionScript クラスを作成する最小限の手順を示します。

  1. ActionScript テキストエディタープログラムで、新しいテキストドキュメントを開きます。

  2. クラスの名前を定義する class ステートメントを入力します。 class ステートメントを追加するには、 public class 、クラス名の順に入力します。次に、クラスのコンテンツ(メソッドとプロパティの定義)を左中括弧と右中括弧の間に入力します。次に例を示します。

    public class MyClass 
    { 
    }

    単語 public は、そのクラスが他のコードからアクセスできることを示します。他の例については、アクセス制御名前空間の属性を参照してください。

  3. クラスが含まれているパッケージの名前を指定する、 package ステートメントを入力します。シンタックスは、 package 、完全なパッケージ名、左中括弧、右中括弧の順です。この中括弧は class ステートメントブロックを囲んでいます。例えば、前の手順のコードは次のように変更されます。

    package mypackage 
    { 
        public class MyClass 
        { 
        } 
    }
  4. クラス本文内で var ステートメントを使用して、クラスの各プロパティを定義します。シンタックスは変数の宣言に使用するシンタックスと同じです( public モディファイアが追加されます)。例えば、クラス定義の左中括弧と右中括弧の間に次の行を追加すると、 textProperty numericProperty および dateProperty という名前のプロパティが生成されます。

    public var textProperty:String = "some default value"; 
    public var numericProperty:Number = 17; 
    public var dateProperty:Date;
  5. 関数の定義に使用されるのと同じシンタックスを使用して、クラスに各メソッドを定義します。次に例を示します。

    • myMethod() メソッドを作成するには、次のように入力します。

      public function myMethod(param1:String, param2:Number):void 
      { 
          // do something with parameters 
      }
    • コンストラクター(クラスのインスタンスの作成プロセスの一環として呼び出される特別なメソッド)を作成する場合、そのクラス名と名前が正確に一致するメソッドを作成します。

      public function MyClass() 
      { 
          // do stuff to set initial values for properties 
          // and otherwise set up the object 
          textVariable = "Hello there!"; 
          dateVariable = new Date(2001, 5, 11); 
      }

      クラスにコンストラクターメソッドを含めなかった場合、コンパイラーが自動的に空のコンストラクターを作成します(つまり、パラメーターもステートメントも指定されていないコンストラクターが作成されます)。

    さらにいくつかのクラスエレメントを定義できます。これらのエレメントは、より複雑な構造を持ちます。

    • アクセッサーは、メソッドとプロパティを特別に組み合わせたものです。クラスを定義するコードを作成するときは、メソッドを記述するのと同じようにアクセッサーを記述します。プロパティとして定義すると単なる値の読み取りや代入の操作しかできませんが、アクセッサーでは複数のアクションを実行できます。ところが、クラスのインスタンスを作成するときは、アクセッサーをプロパティと同様に扱い、アクセッサー名を使用して値の読み取りや代入を行うことができます。

    • ActionScript のイベントは、特定のシンタックスを使用して定義されません。EventDispatcher クラスの機能を使用して、クラス内に定義します。