閑話 −僕と契約して魔法少女に・・・ その1−

魔法少女インキュベーターと責任関係

始まりは@ryoasai74 氏の

ということで、魔法少女とインキュベータ―との契約関係、ちょっと考えてみました。

魔法少女クラスと魔女クラスと

「さて、君たちは僕たちインキュベーターとの契約によって魔法少女となり、そしてやがて魔女となりこの世界に厄災を振りまくことになるんだけれども、うん、君はこの運命をどうモデル化するつもりなんだい。」
「えぇっ?!えっと、魔法少女がいて、それから魔女もいるんだよね。こ、こうかな?」

「うん、悪くない。最初にしてはね。{incomplete}とあるのは君のように魔法少女でも魔女でもない、いわば普通の人もいるってことだね。」
「うん」
「じゃあ、オブジェクト図で書くと次のようになるね。」

「そうだけど。」
「うん、悪くない、悪くないよ。でもね、例えば美樹さやか、彼女は魔女になる前は魔法少女だったわけだし、さらにその前はただの人だったわけだよね。そういった、人から魔法少女、さらには魔女への変化、その経過をうまく表現できるかい?」
「う〜ん、それはちょっと難しいかも。魔法少女クラスだったさやかちゃんが魔女クラスにかわるんだよね。属してるクラスを変えればいいのかな?どうすればいいんだろう」
「属してるクラスを変化させる。それももちろんあり得るひとつの解答だね。僕もよく知らないけれども、そういう風に動的にクラスを変化させることをサポートしている言語もあるようだよ。」
「でも・・正解、じゃないんだね。」
「いや、正解、不正解でとらえられる問題ではないんだ。そもそもモデリングには正解や不正解はない、そこにあるのはより良いかより悪いかなんだ。」
「じゃあ、あまり良くない?」
「何に価値を置くのか、その価値観を決めないとモデルの善し悪しは言えないよ。それはさておき、こういった状況をモデルとしてあらわすには、Stateパターンを適応してみるというのが一つの手だね。」

魔法少女は状態か?

「Stateパターン?」
「そう、Stateパターン。GoFデザインパターンで示されているうちの一つさ。このパターンでは"状態"をクラスと表現する」
「どういうこと?」
魔法少女であること、魔女であることを"状態"としてとらえる。そして、ある少女がその状態を保持することで彼女が魔法少女であること、魔女であることを表現する。」
「それって、ソウルジェムのこと?」
「いいところに目を付けたね。もちろん満点というわけではないけれども。でもまず、ソウルジェムに注目してモデルを作ってみよう。」

「図2の様なオブジェクト図は描けるかい?」
「うん、やってみる。」

「いいじゃないか。これだと美樹さやかの魔女化は彼女が所持しているジェムをソウルジェムからグリーフシードへ持ち替えることによって表現できそうだ。」
「うん、そう、なんだけど・・・えっと、その、これはなんだかちょっとちがうかなって」
「そうかい。」
「例えばね、杏子ちゃんもそれからほむらちゃんもそれぞれ自分のソウルジェムを持ってるでしょ。二人の持ってるソウルジェムは違うものだよね。」
「もちろんそうさ」
「だけど魔法少女としての共通の使命、つまり魔女を倒すってことだけど、それはうまく表現できていないのかなって。もちろんソウルジェムを持ってるんだから二人とも魔法少女だってことはわかるんだけど」
「うん、実はね、図3と図4で示したモデル、これらは正確にはStateパターンとは言えないんだ。だけど、僕はここでその正確さを追求していくつもりはないよ。なぜなら、もっとしっくりとくる表現があると思うからさ。」
「それは、何、なの?」
「"契約"さ。」

つづく・・・かも