オブジェクト指向で大事な概念となる「インターフェイス」についても解説したいと思います。
Firstクラス内のcookメソッドに注目してください。cookメソッドの引数は「ISoba」というインターフェイスにしています(インターフェイスの名前には頭に「I」を付けることが多いです)。インターフェイスは、継承関係にないクラスに機能を提供するときに使います。構文は以下のとおりです。
インターフェイスの構文 |
アクセス修飾子 interface インターフェイス名 { |
「抽象メソッド」とはメソッドの型だけが書いてあり、処理の中身がないものです。ちなみに普通のクラスでは、中身のないメソッドを書くことは許されません。
ISobaインターフェイスに「precook」という抽象メソッドを用意しました。メソッドの中身がないのが分かると思います。
public interface ISoba { |
Firstクラスを見ていただくと、フィールドkakeはKakeSobaクラス、フィールドkitsuneはKitsuneSobaクラス、フィールドtanukiはTanukiSobaクラスの型になっています。これらのクラスにISobaインターフェイスの機能を追加します。クラスでインターフェイスを利用できるようにすることを「実装」といいます。実装には、「implements」というキーワードを使います。
package{ |
インターフェイスを実装したクラスでは、インターフェイスの抽象メソッドの中身を記述するのがルールになっており、記述をしないとコンパイラがエラーを出します。そういった意味で、インターフェイスは継承関係にないクラスに確実に機能を提供し、同時に1つの系統を持たせることができます。
KakeSoba、KitsuneSoba、TanukiSobaそれぞれのクラスで「かけそばの下ごしらえ処理」「きつねそばの下ごしらえ処理」「たぬきそばの下ごしらえ処理」を記述します。
Firstクラスのcookメソッドの引数は「soba:ISoba」になっていますね。これは「ISobaインターフェイスを実装したクラスであれば、どのクラスも受け入れる」という意味になります。このように、型を柔軟に受け入れることで再利用性や拡張性を高める考え方を「ポリモーフィズム」(多態性)といいます。
では、cookメソッドの中身を、以下のようにしてみましょう。
protected function cook ( soba:ISoba ):void { |
引数に渡されたものがKakeSobaクラスならばKakeSobaクラスのprecookメソッドが実行され、KitsuneSobaが渡されたのなら、KitsuneSobaクラスのprecookメソッドが実行されるようになっています。
ポリモーフィズムが使えなかったら、型ごとのメソッドや、処理分けを記述しなくてはならなくなり、クラス同士の依存性も高くなり、拡張性も低くなります。このポリモーフィズムもオブジェクト指向ではとても大事な概念の1つです。
いかがでしたか? 継承やオーバーライド、ポリモーフィズムなど、オブジェクト指向言語は拡張や修正がしやすいように設計されており、大規模な開発に適しているのが分かっていただけたでしょうか。
オブジェクト指向は実生活に例えやすい概念です。普段身近にあるものをクラスに例えてみると、楽しく覚えることができると思います(携帯電話、クレープ屋のメニュー、花の種類など)。
次回はいままで学んだことの応用編として、楽しいプログラムを作ってみましょう。お楽しみに!
吉村 美保(よしむら みほ)
クラスメソッド株式会社 情報システム部 プログラマー
ゲーム開発、インストラクターなどの経験を経て、クラスメソッド株式会社に入社。入社後はFlexやAIRによるRIA開発を行っている。
Copyright © ITmedia, Inc. All Rights Reserved.