サイトトップ

Director Flash 書籍 業務内容 プロフィール

Macromedia Flash非公式テクニカルノート

1. オブジェクト指向プログラミングの基本原理

ID: FN0309005 Product: Flash

Platform: All
Version: Flash MX 2004

本節では、オブジェクト指向プログラム開発における原則について概要を述べます。これらの原則については、以降の本章で詳しく解説します。その中で、Macromedia Flash MX 2004およびMacromedia Flash Professional 2004で、それらがどのように実現されるのかも説明します。

1.1 オブジェクト
現実の世界のモノ(オブジェクト: object)として、たとえば猫を考えてみましょう。猫は、名前や歳、色といったプロパティ(あるいは状態)をもっているといえます。また猫は、眠ったり、食べたり、鳴いたりといったふるまい(ビヘイビア: behavior)をします。オブジェクト指向プログラミングの世界では、オブジェクトはプロパティとビヘイビアを保有します。オブジェクト指向の技術を用いて、現実世界の(猫のような)モノあるいはもっと抽象的な(化学工程のような)モノをモデル化することができます。

1.2 クラスとクラスメンバ
現実世界の例で考えますと、猫には異なった色や歳、名前で、異なった食べ方や鳴き方をするものがいます。しかし全ての猫は、特定のオブジェクトのクラス、「猫」というオブジェクトタイプに属します。それぞれの(現実世界の)猫は、クラスタイプ猫のインスタンスです。

同じようにオブジェクト指向プログラミングでも、「クラス」はあるオブジェクトのタイプの設計図を定義します。そのクラスに備わる特徴や行動(behaviors)は、クラスの「メンバ」として参照されます。(猫の例での名前や歳、色といった)特徴は、クラスの「プロパティ」と呼ばれ、変数として表現されます。(食べる、眠るなどの)行動は、クラスの「メソッド」と呼ばれ、関数というかたちで表わされます。

たとえば、Personというクラスを作成したとします。そして、個別の人をそのクラスのインスタンスとして作成します。これをPersonオブジェクトと呼びます。Personオブジェクトは、Personクラスのすべてのプロパティやメソッドを保有することになります。

ActionScriptでは、'class'ステートメントでクラスを定義します(「3. クラスの作成と使用」参照)。ActionScriptには、MovieClipやTextField、Stringクラスといった数多くの定義済みクラスがあります。これらのクラスの使用について詳しくは、Using the Built-In Classesをご参照ください。

1.3 継承
オブジェクト指向プログラミングのひとつの大きな利点は、クラスの「サブクラス」を作成できることです。そしてサブクラスは、すべてのプロパティやメソッドを「スーパークラス」から「継承」します。サブクラスは、通常メソッドやプロパティを追加して定義したり、スーパークラスを「拡張(extend)」します。サブクラスはまた、スーパークラスから継承したメソッドを「オーバーライド(override)」(メソッドを独自定義)することもできます。

たとえば、Mammal(ほ乳動物)クラスを作成して、すべてのほ乳類に共通する特定のプロパティやビヘイビアを定義することが考えられます。そして、Catクラスを作成して、Mammalクラスを拡張することができます。このように継承は、コードの再利用に役立ちます。2つのクラスに共通のコードすべてを毎回作成し直すのでなく、既存のクラスを拡張するだけでよいのです。また別のサブクラスが、今度はCatクラスを拡張できるという具合です。複雑なアプリケーションでは、クラスの階層をどのように構成するかの決定が、デザインプロセスの大きな部分を占めます。

ActionScriptでは、'extends'キーワードを使用して、クラスとスーパークラス間の継承を構築します。詳しくは、「3.4 サブクラスの作成」をご参照ください。

1.4 インタフェース
オブジェクト指向プログラミングでインタフェースは、メソッドの実装(定義)されないクラスということができます。他のクラスが、インタフェースの宣言したメソッドを定義あるいは実装(implement)します。

インタフェースは、また「プログラミングの取決め(contract)」と考えることもできます。その取決めにより、関係のなかったクラス間に関連性を付与することが可能になります。たとえば、プログラマのチームと仕事をしているとましょう。各自は、同じアプリケーションの異なった部分(クラス)を担当しています。すると、アプリケーションをデザインする際に、異なるクラス同士がコミュニケーションするために使用すべきメソッド群を確認します。そこで、インタフェースを作成して、それらのメソッドやパラメータ、戻り値を宣言します。このインタフェースを実装するクラスは、すべてこれらのメソッドを定義しなければなりません。そうしないと、コンパイラはエラーを発生します。

またインターフェイスは、制限された「複数継承(multiple inheritance)」の形式を実装するために使用されることもあります。ActionScript 2.0では複数クラスの継承を許していません。複数継承では、ひとつのクラスが複数のクラスを継承します。たとえば、C++ではCatクラスが、Mammalクラスと同時にChaseTailやEatCatNipメソッドをもつPlayfulクラスを継承することができます。ActionScript 2.0では、Javaと同じく、ひとつのクラスが複数のクラスを直接継承することはできません。しかし、Playfulインターフェイスを作成して、ChaseTailやEatCatNipメソッドを宣言することは可能です。Catクラスあるいは他の任意のクラスで、このインタフェースを実装(implement)して、これらのメソッドを定義することができます。

[訳者註] ActionScript 2.0には、抽象クラス('abstruct')は存在しません。

詳しくは、「5.2 インタフェースの作成」をご参照ください。

出典
ActionScript Reference Guideより邦訳。

_____

作成者: 野中文雄
作成日: 2003年9月20日


Copyright © 2001-2003 Fumio Nonaka.  All rights reserved.