ルールをきっちり決めたいなら「インターフェイス」
オブジェクト指向で大事な概念となる「インターフェイス」についても解説したいと思います。
Firstクラス内のcookメソッドに注目してください。cookメソッドの引数は「ISoba」というインターフェイスにしています(インターフェイスの名前には頭に「I」を付けることが多いです)。インターフェイスは、継承関係にないクラスに機能を提供するときに使います。構文は以下のとおりです。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
■メソッドの型だけが書いてある「抽象メソッド」
「抽象メソッド」とはメソッドの型だけが書いてあり、処理の中身がないものです。ちなみに普通のクラスでは、中身のないメソッドを書くことは許されません。
ISobaインターフェイスに「precook」という抽象メソッドを用意しました。メソッドの中身がないのが分かると思います。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
■「implements」で行う「実装」とは?
Firstクラスを見ていただくと、フィールドkakeはKakeSobaクラス、フィールドkitsuneはKitsuneSobaクラス、フィールドtanukiはTanukiSobaクラスの型になっています。これらのクラスにISobaインターフェイスの機能を追加します。クラスでインターフェイスを利用できるようにすることを「実装」といいます。実装には、「implements」というキーワードを使います。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
インターフェイスを実装したクラスでは、インターフェイスの抽象メソッドの中身を記述するのがルールになっており、記述をしないとコンパイラがエラーを出します。そういった意味で、インターフェイスは継承関係にないクラスに確実に機能を提供し、同時に1つの系統を持たせることができます。
KakeSoba、KitsuneSoba、TanukiSobaそれぞれのクラスで「かけそばの下ごしらえ処理」「きつねそばの下ごしらえ処理」「たぬきそばの下ごしらえ処理」を記述します。
再利用性や拡張性を高める「ポリモーフィズム」
Firstクラスのcookメソッドの引数は「soba:ISoba」になっていますね。これは「ISobaインターフェイスを実装したクラスであれば、どのクラスも受け入れる」という意味になります。このように、型を柔軟に受け入れることで再利用性や拡張性を高める考え方を「ポリモーフィズム」(多態性)といいます。
では、cookメソッドの中身を、以下のようにしてみましょう。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
引数に渡されたものがKakeSobaクラスならばKakeSobaクラスのprecookメソッドが実行され、KitsuneSobaが渡されたのなら、KitsuneSobaクラスのprecookメソッドが実行されるようになっています。
■もしも、ポリモーフィズムがなかったら……?
ポリモーフィズムが使えなかったら、型ごとのメソッドや、処理分けを記述しなくてはならなくなり、クラス同士の依存性も高くなり、拡張性も低くなります。このポリモーフィズムもオブジェクト指向ではとても大事な概念の1つです。
実は身近なオブジェクト指向で大規模開発も
いかがでしたか? 継承やオーバーライド、ポリモーフィズムなど、オブジェクト指向言語は拡張や修正がしやすいように設計されており、大規模な開発に適しているのが分かっていただけたでしょうか。
オブジェクト指向は実生活に例えやすい概念です。普段身近にあるものをクラスに例えてみると、楽しく覚えることができると思います(携帯電話、クレープ屋のメニュー、花の種類など)。
次回はいままで学んだことの応用編として、楽しいプログラムを作ってみましょう。お楽しみに!
プロフィール
吉村 美保(よしむら みほ)
クラスメソッド株式会社 情報システム部 プログラマー
ゲーム開発、インストラクターなどの経験を経て、クラスメソッド株式会社に入社。入社後はFlexやAIRによるRIA開発を行っている。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- いまさら聞けないFlex、そして、いまこそ入門のとき!?
Flex 3正式版リリース! Flexの過去・現在・未来 先日ついに正式リリースされたFlashベースのRIA技術Flex 3。いまが入門に最適なFlexの過去・現在・未来を一挙に解説 - Flex Builder 3でサクっとActionScriptコーディング!
作って学ぶAIRウィジェットの基礎→応用(3) 今回はAIRウィジェットの処理やロジックをActionScriptでコーディングします。Flex Builder 3を使うと便利な機能が満載です - いまさら聞けないJavaによるオブジェクト指向の常識
プログラマーの常識をJavaで身につける(11) Javaを学習する際に「オブジェクト指向」という言葉をよく耳にすると思いますが、いまさら聞けない人はぜひ読んでみてください - Javaのインターフェイスを理解する
Eclipseではじめるプログラミング(10) オブジェクト指向言語のJavaにとってインターフェイスは必須の概念です。難しい理屈は抜きにして、実際に試して初歩を理解します - クラスの継承の本質を知る
[連載]いまから始めるJava(4) クラスの継承を抽象的に理解しようとすると難しくなってしまいます。メモリの拡張として理解すれば実に簡単であることが分かります - メソッドの挙動を変えるオーバーライド
[連載]いまから始めるJava(8) 前回作成したHTMLパーサのメソッドの機能をオーバーライドを使い変更します。オーバーライドは同名のメソッドに異なる機能をもたせることができます - Javaの抽象クラスとインターフェイス
いまから始めるJava(14) 最終回は抽象クラスとインターフェイスを詳しく説明し、Javaプログラミングにおけるクラスと継承の知識を整理します