第03章 プログラムはドラ〇もんで説明できる②
ゲームには色々な情報が必要で、それを分類して保存しておく訳だが、広範囲になると、いちいち出し入れするのに手間がかかる。それを解決してくれるのがポインタなのだ。
*y = 3; //3という情報をyという場所に保存する
ポインタは『どこ〇もドア』と同じで、どんな場所にでも繋げてくれる。自分が必要な場所を指定したら、その場所に繋がるので、そこに情報を保存したり参照したりできる。ただ、ポインタは自分が操作しているのが“情報の場所”か“情報そのもの”かを間違えやすい。慣れていないと混乱するので注意が必要なのである。
「まあ、これは概念で、使い方は別に勉強しないとダメだけどな」
イッQはそう説明し、更に付け加えた。
「そう考えると、構造体の要素を参照する時の矢印(アロー演算子)はドアを開けた形に見えるだろ?」
x = y->a; //yという場所のaという要素の中身を参照してxに入れる
「ドアには見えないけど、なんかイメージは掴めた気がする!」
ポインタの説明で感心していた壱人は、さらにハッと思い付いた。
「じゃあ、『if』は、まさか…」
「そう『もしもボッ〇ス』だ!」
得体の知れないものから、曲がりなりにも形が付いた事でイメージが掴みやすくなる。宇宙の果ての言葉ほどの隔たりがあったプログラムの文字の羅列が、ドラ〇もんのひみ〇道具で説明されると身近に感じられるようになった。
そうすると、もっと色々聞きたくなる。壱人は気軽な気持ちで次の質問をした。
「そうだ、『オブジェクト指向プログラミング』についても教えてよ」
『オブジェクト指向プログラミング』は、プログラムを勉強していると良く出てくる言葉なのだが、いまいち正体不明なものなのである。
しかし“オブジェクト指向”という言葉を聞いた途端、今まで得意気だったイッQが固まった。そして十秒の沈黙の後…
「なんかスゴイやつ」
とだけ答えた。
「なんでこれだけ適当なんだよ!ちゃんと説明しろよ」
「自分で調べろ」
「調べたけど分からなかったんだよ」
今までと違う回答に納得できない壱人はイッQに食い下がる。だがイッQも頑なに答えようとはしなかった。なぜならイッQも良く分かっていないからだ。
「大丈夫だ。オブジェクト指向なんて分からなくてもプログラムは書ける!」
「分からないと書けないよ!」
しばらくそんなやり取りをしていたが「教えてくれないなら自分で調べる」と言って壱人はネット検索をするためにパソコンに向かってしまった。その姿を見たイッQは、これはダメな時の黄金パターンだと気付いて慌てた。
壱人は、人に聞くより自分で調べるタイプだ。それで分かれば良いのだが、調べ方が雑なので緻密な情報収集には向いていない。しかもプログラム関係は、調べれば調べる程、更に調べるものが増えるため、時間とやる気を無くしてしまうのだ。
「分かった、教えるよ」
焦ったイッQは、取り敢えずで良いから答えを示さなければと思った。
「ただし、独学だし、俺自身がちゃんと分かってる訳じゃないから、間違ってる可能性があるぞ」
そう念を押し、なんとか自分が理解している範囲のものを形にして言葉を捻り出す。そうして出てきた説明がこれだった。
「『オブジェクト指向プログラミング』の“オブジェクト”とは、ドラ〇もんのひみ〇道具そのものだ!」
ひみ〇道具は、仕組みは全く不明だが誰でも使う事ができる。これが「オブジェクト指向」で一番大事なカプセル化である。
“ほん〇くコンニャク”を例にすると、食べるだけであらゆる言語を自国語として理解でき、しかも自分の話す言葉も相手の使用する言語に自動的に翻訳、さらに文章まで読めるようになる。実行されている仕組みを見る事ができたなら、大変な処理をしてるはずなのに、全く気にせず使えるのである。
しかも“ほん〇くコンニャク”を食べる事のできないロボットの場合は、上に乗せれば同じ効果があるなど融通が利く。どんな形でも同じように機能が使えるというポリモーフィズム(多態性、多相性)も備えている。
つまり『オブジェクト指向プログラミング』とは、数あるひみ〇道具から目的に合ったものを選び、それらを組み合わせ、使いこなして自分の思い通りの結果を出す事なのだ!
イッQの説明を聞いて「自分がドラ〇もんの立場になるわけか!?」と壱人は興奮した。続いて、イッQは『派生』についても説明を始める。
自分でプログラムを書くといっても、実は基本的な機能(文字・画像の表示機能、検索機能など)についてはクラスというものが前もって用意されていて、それをカスタマイズして使う事が可能であり、その時に出てくる言葉が『派生』なのだ。
「ひみ〇道具からは離れるが、『ザ・ドラ〇もんズ』って知ってるだろ? ドラ・〇・キッドとか王〇ラとか、性格や外見、特技は色々違うよな。でもさ…」
そこで一度言葉を切ってから結論を言う。
「結局、全員『ドラ〇もん』だろ?」
ネコ型ロ〇ット、四次元※※から道具を取り出す、そういう基本は引き継ぎ、必要に応じて個別の能力や個性を追加する。これが「派生」だ。
話し終えたイッQは「これだけ説明すれば、もう自分で調べるとは言わないだろう」と思った。そしてその目論見は成功して壱人は感激している。
「スゴイ!スゴイよ!不二雄先生」
「日本に藤〇不二雄先生が存在してくれて良かったな」
しかし、壱人は「最後に1つだけ」と言ってきた。イッQは「まだあるのか?」と思いつつ、こうなったらなんでも答えてやろうという気持ちになっていたので壱人の言葉を待った。
「使い方はなんとなく分るんだけど、『クラス』と『インスタンス』の関係がイマイチはっきりしないんだ」
プログラムでは『クラス』は設計図、『インスタンス』は「実体」といわれていて、“クラスを使うためにインスタンスを作る”というような説明がよく出てくる。
イッQはその質問に胸をなで下ろした。それなら前に悩んだ時に答えを出していたからだ。だから自信満々にこう答えた。
「それは“クローン・ト〇ーパー” だと考えると分り易いぞ。ジャ〇ゴ・フェットの遺伝情報が『クラス』で、それから複製されるクローンが『インスタンス』だ。複製されたクローンは、それぞれが別の個体として存在していて、様々な経験によって個体差が生まれるんだ」
ドヤ顔で答えるイッQに対して壱人は不満気だった。
「なんでそこだけ『ス〇ー・ウォーズ』なんだよ!『ドラ〇もん』で例えろよ!」
「そこまでドラ〇もんは詳しくないんだよ!」
光の速さでツッコむ壱人に対して、イッQもつい本音が出てしまう。
ひとしきりの喧騒の後、プログラムの勉強を再開した壱人は、イッQに多少呆れつつ、それでもプログラムの難しさを少し取り払ってくれた事に心の中で感謝した。




