いきなりプログラミングの話でなんですが。
オブジェクト指向と言えば、継承、カプセル化、ポリモーフィズムの
3つが特徴だけど、継承とカプセル化はまだわかるとして、
ポリモーフィズムっていったいなんなのか、どんな時に使うのか
全然しっくり来てなかったわけです。
それでドラクエとファイナルファンタジーの比較として考えるとちょっと分かりやすいかもと思いました。
■ポリモーフィズム
DQ3ではパーティに魔法使いは一人だけ。
つまりヒャドを唱えられるのは魔法使いだけ。
しかしFF3では、ブリザドを店で買える。
ブリザドは装備すれば、誰でも唱えることができる。
この装備すれば誰でも唱えられるというのがポリモーフィズム。
だと思う。
ゲーム上は装備するだけでよいのだけど、
もっと妄想力を膨らまして、ブリザドを装備した人には
ブリザドを唱えるための儀式が必要だと考える。
その儀式というのがimplementsしたインターフェースの
メソッドを実装することにあたる。
例えばブリザドを唱えるには以下の手続き(関数)と
さじ加減(メンバ変数)についての実装をしなければいけない。
・冷気を発生させる関数
・それを敵に向けて飛ばす関数
・一つ一つの氷の粒の大きさを定義する変数
・氷の総数を定義する変数
・それら氷の粒の集合全体の大きさを定義する変数
このように装備した人それぞれが自分なりの実装を要求される。
そうするとブリザドを装備して唱えることが出来る人が沢山いたとしても、
唱える人によって個性が出てくる。
ある人は一点突破の氷の固まりをつくるが、ある人は細かい吹雪の嵐をつくる、といったように。
以上のようなことがポリフォーミズムの一般的な性質だと思う。
それとポリモーフィズムをすると、場合によっては
プログラミングの実行速度もアップするのかな?
例えば、冷気に弱い敵が出現したときに
AttackEnemy( メンバーの誰か )
という関数を実行するとする。
このとき「メンバーの誰か」というざっくりしたくくりでは、
パーティ全体からブリザドを唱えれる人を検索しなければいけない。
しかしブリザドクラスを定義し、それを実装させておくと、
AttackEnemy( メンバーの誰か as ブリザド使い )
と型を指定することができて検索性が高まる。
こんな解釈でいいのかな?違う?
まあ、僕がそういうレベルでプログラミングすることはめったにないと思うけど。
個人的には、FFのように呪文を店で買うなんて「邪道」だと思っていたけど、
そのシステム自体は成功してると思うし、
そういうのってプログラマーの発想みたいなのから出て来たことで
コンピューターとの親和性が高いのかなぁ。
いまWeb2.0とかあるけど、このときゲームはすでにRPG2.0になっていて、
最新のFFではオンラインゲームの要素も入ってRPG3.0ぐらいではないかと
意味のない算段もしたくなります。
コメントする