抽象(Abstract)クラスを作成
抽象クラスとは? bookmark
抽象クラスとは、抽象的なものだ、と「prototype.jsでオブジェクト指向」で説明しましたが、更に説明を加えてみます。
例えば、皆さんは、何かものを作るとき、例えば、ゲームでの敵キャラをプログラムで作るときを考えましょう。敵キャラを作る、と考えたときには、敵キャラの名前とかHP、MPとかはまだ抽象的なもので、分かりませんよね?
でも、名前とかHP,MPってあるよな、というのは分かっていたりします。更に、敵キャラだから、攻撃もしてくるし、防御もするんだろうな、ということが想像できます。まだ「敵キャラ」という抽象的な概念なわけです。
これをプログラムで表す際に抽象クラスを作ります。抽象的、といっても次のことが決まっています。
- 名前を持つ
- HP,MPを持つ
- 攻撃と防御をする
抽象クラスを使ってみる bookmark
抽象クラスを実際に使ってみましょう。
次の例では、Creatureという敵キャラ(抽象クラス)を作った上で、具体的なSlime(スライム)という敵キャラを作ってみます。
抽象クラスの解説 bookmark
抽象クラス自体は次のように定義します。
Abstract.抽象クラス名= function() {}
そして、後は他のクラス同様、Creatureの中身を次のようにして定義します。
Abstract.Creature.prototype = { /* Creatureの中身 */ }
では具体的なクラスであるSlimeは、抽象クラスであるCreatureを「prototype.jsを使ってクラスを継承」で説明したように、次のように継承します。
Slime.prototype = Object.extend(new Abstract.Creature, { /* Slimeの中身 */ });
基本的に、継承と変わりありませんが、Abstractで定義したクラスは単体では使えないものとして定義します。
他のプログラミング言語では、抽象クラスというのはそれ単体では使えないものになっています。JavaScriptではその制御が出来ないため、使おうと思えば使えるのですが、他の言語にならって、抽象クラス単体では使わないようにします。
抽象クラスの存在の意味として、抽象クラスがあることで設計がしやすいという点があります。まず抽象的な概念があって、そこに具体的なものを追加していく、という人間が何かを考える際に似たことがプログラミングにおいて行えます。
オブジェクト指向になれない場合は、特に抽象クラスを使わずとも、単に継承の機能で間に合う場合があります。が、設計として便利なので頭に入れておいて損はありません。
次のページ: 以降のJavaScript学び方 (JavaScriptでオブジェクト指向)