タイトル: ポリモーフィズム(多様性)の概念と必要性
■ポリモーフィズムとは
ポリモーフィズムとは、一見同じ処理(メソッド)を呼んでいるにも関わらず処理内容異ならせること。
これを実現するために、抽象メソッドやインターフェースという仕組みを用いる(それぞれの詳細は別記事に記載)。
以下、具体的な使用例。
抽象クラス、もしくはインターフェースにメソッドを定義しておく(メソッド名、戻り値、引数は記載するが処理は記載しない)。
それを継承、もしくは実装した子クラスは親が定義したメソッドをオーバーライドし、処理を実装する。
子クラスは複数あるものとし、それぞれオーバーライドしたメソッドに異なる処理を実装する。
これら子クラスをインスタンス化し、配列に格納する。
この際、格納する型は親の型とする。
この配列をループしてそれぞれ子クラスに定義したメソッドの処理を呼びたいとする。
この際、親の型としたことで、親で定義されているメソッド名を呼ぶことになるが、実際に呼ばれるのは実装をした子クラスなので、処理を異ならせることができる。
つまり、同一の親を継承することによって、メソッドを抽象化しているのである。
■なんでこんなことする必要性があるの?
RPG(ローププレイングゲーム)で例える。
味方パーティは「村人1」、「村人2」、「村人3」の3人いるとする。
戦闘の際に、「こうげき」、「ぼうぎょ」、「にげる」というコマンドがあるとする。
これら3つのコマンドはパーティのメンバー全てが行えるので同じコマンドに見えるが、実際はメンバーによって攻撃力や防御力、素早さが異なるので処理が異なる(相手に与えるダメージや受けるダメージの量など)。
3つのコマンドは実際の処理は異なるが、ゲームのユーザ的にはこれらは同一に見えた方がよい。(「村人1のこうげき」、「村人2のこうげき」、「村人3のこうげき」と表記することも出来るが、冗長的で分かりにくい)
また、プログラム上も単に「こうげき」という処理を実行するだけの方がシンプルである。
上記のようなことからポリモーフィズムの概念を用いれば、ユーザ的にもプログラム的にも簡潔になるのである。