085 佐藤タケル③
ツバサちゃんとマイさんが二人で旅行に行く際、僕はなぜかツバサちゃんの部屋で留守番役になってしまった。
なぜならこの2地点間座標接続装置、向こう側から扉を閉めることも開けることもできないから…。つまり、A地点からB地点へ行く場合、誰かがA地点に残ってドアの開閉をしなければならないのだ。
接続しっぱなしだとセキュリティ的に問題だし、電気代も馬鹿にならないからね。タイマーでドアが閉まる機能やインターネット経由で操作できる機能(いわゆるスマート家電っぽい機能)は必要だと思う。
ツバサちゃんにはこれらの要望を報告書にぜひ記述しておいて欲しいよ。
「タケル君、ただいまぁ~。日光はすごく良かったよ。日光を見ずして結構と言うなかれってやつだね」
今日は栃木の日光に行ってきたそうだ。東照宮だね。
「いつもお留守番させてごめんなさい。これお土産だよ」
僕の役目はツバサちゃんとマイさんが向こう側に行ったあと、ドアを閉めること。あと、携帯電話に連絡が入ったらドアを開けること。それだけだ。はっきり言って退屈な任務だけど、ツバサちゃんの部屋には光回線が通っていて無線ルーターもあるから、スマホでネットゲームしたり掲示板で暇を潰しているよ。
てか、女の子の部屋に男一人で留守番って、ツバサちゃんは気にならないのかな?
「ああ、いつもお土産をありがとう。僕のことは気にせず楽しんできてよ。まぁ女の子二人っきりってのがちょっと心配ではあるんだけど…」
「今回もナンパされたよ。しつこい奴は返り討ちにしてやるんだけど、今回は大丈夫だったよ」
ツバサちゃんの言葉なんだけど、おそらくナンパ対象はマイさん一人だろうな。並んでいる姿は仲の良い姉妹にしか見えないよ。大学生の姉と中学生の妹って感じだ。
ちなみにツバサちゃんの空手の技が炸裂しても、マイさんが治癒魔法で治してしまうから問題にはならないらしい。…って、マッチポンプかよ!
以前、どこかの観光地でヤンキー集団(十人以上)に囲まれたときも、なぜか動きの悪くなったヤンキーたちをツバサちゃんが一方的にボコっていったらしい。マイさんは離れたところから見ていたらしいんだけど、ヤンキーたちは水の中を泳いでいるかのような動きの遅さで異様だったとのこと。ツバサちゃんには無限倉庫以外にも、僕らには内緒の特殊能力があるのかもしれないね。
「それじゃ今夜はいつも通り三人で食事に行くってことで良いのよね?もちろんタケル君の分は私たちが奢るから」
僕の留守番役としての報酬は、毎回夕食を奢ってもらうことなのだ。別にそこまで気を遣わなくても良いんだけど、二人の罪悪感を解消するって面もあるので、仕方なくご馳走になっている。
「あ、そうだ。ついでと言っちゃ何だけど、タケル君にプログラムのことで質問があるんだよね。良いかな?」
ツバサちゃんは情報処理系の専門学校に通っていて、そこでプログラミングを学んでいるらしい。なにか分からないことでもあるのかな?
「ポリモーフィズムって何?異なるオブジェクトに同じメッセージを投げると異なるふるまいをするって、全く意味が分かんないんだけど…」
ああ、オブジェクト指向でも割と難解な考え方だよね。ツバサちゃんが疑問に思うのも無理はない。
「そうだな、まずは『犬』というクラスと『猫』というクラスを想像してみて欲しい。どちらにも『鳴く』という機能があって、それぞれ異なる鳴き方になるよね」
「えっと、『犬』と『猫』に同じ『鳴く』というメッセージを送っても『ワン』とか『ニャー』とか異なる鳴き方をするってことがポリモーフィズムってことなの?」
「いや、違う。『犬』クラスと『猫』クラスを汎化して『動物』クラスという親クラスを作るんだ。そして『犬』や『猫』は『動物』クラスを継承して作る」
「ふむふむ」
「大事なのは『動物』クラスにも『鳴く』という機能を設けることだね」
「え?『動物』の鳴き声なんて決められないよ」
「うん、だから『動物』クラスの『鳴く』は実装しない。でも定義は行うんだ」
「そんなことができるの?」
「まだ習ってないかもしれないけど、抽象メソッドという考え方だね。だから『動物』クラスは抽象クラスということになるよ」
「ほへぇ~、よく分かんないけど…」
「そういうものだと思っておけば良い。で、ここからが重要なんだけど、親クラスの変数に子クラスの実体を格納できるんだ。正確に言えば、変数からオブジェクトを参照しているんだけど、まぁ格納していると思ってもらっても構わないよ」
「データ型が違うのに大丈夫なの?」
「継承関係にあるから大丈夫なんだよ。それで『動物』クラス型変数に『犬』オブジェクトが格納されていて、『動物』クラスの『鳴く』機能を実行したらどうなると思う?」
「『動物』クラスの『鳴く』は抽象メソッドだっけ?実装してないんじゃなかったっけ?あ、まさか『犬』クラスの『鳴く』機能が実行されるってこと?」
「その通り。本来ならそのオブジェクトが『犬』なのか『猫』なのかを判別して、『犬』オブジェクトだったら『犬』クラス型変数に代入してから『鳴く』を実行すべきだよね。でもそんな面倒なことは不要になるんだよ。それこそがポリモーフィズムってわけ」
「そっかぁ、異なるオブジェクトに同じメッセージを投げると異なるふるまいになる…つまり『動物』クラス型変数に入っているのが『犬』だろうが『猫』だろうが、『鳴く』を実行すればそれぞれのオブジェクトごとに適切な動き方をしてくれるってことだね。あっ、だったら『動物』クラス型の配列を作れば、すごく便利じゃない?」
「そうなんだよ。配列ってのは同じデータ型の並びなんだけど、参照している先が異なるデータ型になるのは良いんだ。そういう配列のことを『異種リスト』と言ったりもするよ」
「配列をループで一括処理する際なんか、いちいちオブジェクトの型を調べなくても良いのは便利だね」
やはりこの子は地頭が良いよね。こんな簡単な説明で理解してくれるなんて…。いや、それよりも専門学校の講師はどういう教え方をしてるのかな?ちょっと心配になるよ。
「もう!あなたたち、何語をしゃべっているの?さっぱり理解できないわ」
マイさんがお冠だ。そりゃそうか。そもそもクラスとオブジェクトの関係を説明してないからね。知らない人にはチンプンカンプンだろう。
「マイさん、ごめんよ~。じゃあ次は薬学の話でもする?」
「まだ一年生だから教養課程だよ。専門課程の講義があるのは来年からね」
「ああ、うちの大学もそうだよ。僕の入った工学部魔法工学科は魔道具の研究に特化してるんだけど、今年の内は数学や英語ばかりだな。第二外国語はドイツ語にしたけど、マイさんは?」
「良かったぁ。私もドイツ語だよ。これで一緒に勉強できるね」
「今度は僕が仲間外れだよ。でも僕もドイツ語なら少しは分かるよ。ぜんせ…ごほっごほっ、ちょっと独学したからね」
ツバサちゃんが何かを言いかけて咳払いで誤魔化した。ん?『ぜんせ』って何だ?まさか『前世』じゃないとは思うけど…。
タケル視点がどうにも書きにくかったというか、筆が進まなかったため、更新が遅くなってしまいました。
ちなみにツバサちゃんは前世で大学生だった際、第二外国語はドイツ語を選択していました。




