言語の概要

オブジェクトは、ActionScript 3.0 言語の中心部に位置する基本的要素です。宣言する変数、記述する関数、作成するクラスインスタンスはすべてオブジェクトです。 ActionScript 3.0 プログラムは、タスクを実行し、イベントに応答し、相互に通信するオブジェクトのグループと考えることができます。

Java または C++ のオブジェクト指向プログラミング(OOP)に詳しいプログラマーは、 オブジェクトをメンバー変数またはプロパティに格納されたデータ、またはメソッドを介してアクセスできる動作の 2 種類のメンバーを含むモジュールと見なす場合があります。 ActionScript 3.0 では、似ているけれども少し異なる方法で、オブジェクトを定義します。ActionScript 3.0 では、オブジェクトは単なるプロパティのコレクションです。プロパティは、データだけではなく関数や他のオブジェクトも保持できるコンテナです。 このようにオブジェクトに関連付けられている関数をメソッドと呼びます。

ActionScript 3.0 の定義は Java または C++ のプログラマーには少し奇妙に思えるかもしれませんが、実際には ActionScript 3.0 クラスを使用するオブジェクト型の定義は、Java や C++ でクラスを定義する方法に非常によく似ています。オブジェクトの 2 つの定義の違いは ActionScript オブジェクトモデルおよびその他の高度なテクニックについて説明する場合には重要ですが、ほとんどの場合、プロパティという用語は、メソッドと対となるクラスのメンバー変数を意味します。例えば、Adobe Flash Professional CS5 用 ActionScript 3.0 リファレンスガイドでは、プロパティという用語は、変数または getter/setter プロパティを示すために使用されています。また、メソッドという用語はクラスの一部である関数を表しています。

ActionScript のクラスと Java または C++ のクラスには微妙な違いがあります。それは、ActionScript ではクラスは単なる抽象エンティティではないということです。 ActionScript のクラスは、クラスのプロパティおよびメソッドを格納するクラスオブジェクトによって表されます。これにより、クラスまたはパッケージのトップレベルのインクルードステートメントまたは実行可能なコードなど、Java および C++ プログラマーには異質なものに見える手法が可能になります。

ActionScript のクラスと Java または C++ のクラスのもう 1 つの違いは、ActionScript の各クラスにはプロトタイプオブジェクトと呼ばれるものがあることです。旧バージョンの ActionScript では、プロトタイプオブジェクトはプロトタイプチェーンに関連付けられてクラスの継承階層全体の基盤として機能しましたが、ActionScript 3.0 では、プロトタイプオブジェクトは継承システムにおいて小さな役割を果たすだけです。 ただし、クラスのすべてのインスタンスでプロパティとその値を共有する場合、プロトタイプオブジェクトは静的プロパティおよびメソッドの代わりとして引き続き役立ちます。

これまで、熟練した ActionScript プログラマーなら、特別なビルトイン言語エレメントを使用してプロトタイプチェーンを直接操作できました。 現在では、ActionScript はクラスベースのプログラミングインターフェイスのさらに成熟した実装を提供しています。__proto____resolve などの特別な言語エレメントの多くは ActionScript に含まれていません。また、パフォーマンスを大幅に向上させる内部継承メカニズムが最適化され、継承メカニズムに直接アクセスできなくなりました。