したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

イカ娘に泳げって言うとどうなるの?

2BIND:2011/02/25(金) 22:43:37
まず、イカ人間クラスをイカ(Ika)と人間(Human)の多重継承体であると考える。
あるクラスAが別のクラスBを継承する場合、以下のように表すことにすると、
A:B
イカ人間クラス(IkaHuman)は以下にように表記できる。
IkaHuman:Ika,Human

Ika、Humanはそれぞれ動物抽象クラス(Animal)を継承している具象クラスである。
Ika:Animal
Human:Animal

また、「イカ娘」はイカ人間クラスをあるパラメーターに基づきインスタンス化したオブジェクトである。
これを次のように表すことができる。
ikamusume<IkaHuman

次に、「泳げ」という命令が動物ドメイン全体に作用する動作であり、
動物は全て、泳ぐ能力があることを示す抽象クラスSwimableを継承しているとする。
Animal:Things,Swimable (*3)
(*3) Thingsは動物より上位の「何か」である。また、Swimable他、多数のクラスを継承しているはずだが本質には関係しないので割愛する。

Swimable抽象クラスは「泳げ(swim)」という抽象メソッドを持つ。
これを以下のように表す。
Swimable.swim

インスタンスに対し「泳げ」と命令することは以下のように表記する。
one->swim   *ただし、(Something:Swimable , one<Something)

ここでswim抽象メソッドについて具体的な説明をする。
例えば、Humanをあるパラメーターに基づきインスタンス化したA子(human_a)と、
別のパラメーターでインスタンス化したB子(human_b)がおり、
A子は泳ぐのが得意で、B子は泳ぐのが苦手であるとする。
human_a<Human
human_b<Human

HumanはAnimalクラスを単一継承しており、Swimable抽象クラスと互換性があるので、
A子、B子は「泳げ」という命令を実行することができる。
human_a->swim
human_b->swim

human_a->swimの結果、A子は正常に泳ぐことができたが、
human_b->swimでは、B子は溺れてしまった。
これが命令の働きである。

さて、ここでイカ娘(IkaHuman:Ika,Human , ikamusume<IkaHuman)に泳げと命令するとどうなるか。
表記は以下のようになるが、
ikamusume->swim
これは誤りであり命令は解釈されない。
なぜならば、ikamusumeはIkaHumanのインスタンスであり、
IkaHumanはIkaとHumanを多重継承している。
またそれぞれAnimalを継承しているが、IkaやHumanの時点でそれぞれ
Animalが抽象継承したSwimable.swimを定義している。
つまりIkaHumanはswimという命令に対し、
Ika.swimとHuman.swimの2つの定義を持っているのである。
ikamusume->swimではそのどちらの命令を実行すれば良いのか曖昧であり、
よって命令を解釈することはできず、例外が発生し、停止してしまうのである。

ならばイカ娘は泳げないのかというとそうでもない。
曖昧さを回避し定義が一意に定まるように命令すれば良いのである。

イカ娘に対し、「イカの方法で泳げ」と命令することができる。
これは以下のように表記できる。
ikamusume->Ika.swim
Ikaクラスが定義するSwimable.swimを実行するのである。
この結果、イカ娘はイカのように泳ぐことができた。

同様に、人間の方法で泳げと命令することも可能だ。
ikamusume->Human.swim
この場合、イカ娘は人間のように手足を使って泳ぐことが苦手であるから、
イカのようにうまく泳ぐことはできないだろう。

また、イカ娘にイカの振る舞いをして泳げ、としても曖昧さは回避できる。
それをこのように表記する。
<Ika>(ikamusume)->swim

ikamusumeはイカ人間だが、<Ika>(ikamusume)とすると
それ全体でIkaクラスのインスタンスであると一時的に解釈される。
ikamusumeはIkaクラスを継承しているから可能なのであり、
例えば<Plant>(ikamsume)などはできない。
(*)Plantは植物抽象クラス

このように、ひとつのSwimable.swimに対し
複数のクラスが異なる定義を持ち、振る舞いが異なるような性質を
ポリモーフィズム、もしくは多様性という。

イカ娘にとっては、泳げという命令一つとってもこのような複雑な解釈が必要なのである。

3zinroh:2011/10/22(土) 10:42:08
よしわかった 病院いけ!


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板