おおざっぱオブジェクト指向 第2回

C++とかみててもいまいちオブジェクト指向ってわかりにくかったんだけど、Objective-Cを使ってみてようやく意味がわかったよ。その理由をおおざっぱに説明していこうというコーナーです。

4・クラスとインスタンスって?何でコードを書いたのにすぐには使えないんだ?

今日は忘れちゃならないクラスとインスタンスについて。

私が小学生の時、世の中は誘惑に満ちあふれていたんだ。特にファミコン(世代的にあうマシンに置き換えてください)が出た時なんか、欲しくて欲しくて仕方なかった。でもなかなか買ってもらえなかった。お年玉でカセット(バンゲリングベイ)だけ買って、本体を買えたのはそれから6ヶ月後だった。半年間手元のカセットを見ては動くところを想像してたんだ。

さて、ちょっともの悲しくなったけど、上の例にみたいに「世の中にそれがあるのは解ってるんだけど、手元にあるかどうかはわかんない状態」というのが、じつはそのままズバリ、クラスとインスタンスの関係なんだ。

クラスって言うのは規格を決めて、世の中に「こういう規格がありますよ」って宣言すること。この場合は任天堂がファミコンって言う規格を発表したってことだね。

でも、規格だけあっても実際に使うには当然手元になくちゃいけない。(オブジェクト指向は完成品を組み合わせるってことを思い出してくれ)手元になかったら上の例みたいに使ってるところを想像するくらいしかできない。

そのためにはおもちゃ屋さん(または電気屋さん)に行って買って来る必要がある。コスト(おかね)を払って規格を実体化して手元に置くこと、これがインスタンス化だ。プログラム上では、払うべきコストはお金ではなくてメモリーの消費って形で表されるよ。

つまり、クラスというのが「Nintend○が発表したファミコンという規格」、インスタンスが「うちのファミコン」、そして絵に描いた餅だったクラスを、コストを払って所定の手続きをすることで実際に触れるインスタンスにすること、これが「インスタンス化」、と、こういうわけだ。

「うちのファミコン」が手元にきちゃえばこっちのもの、テレビにでもビデオにでもつないでどんどんゲームができる。・・・でもまてよ?バンゲリングベイは名作だけど、ゲームカセット1本じゃすぐ飽きるよな。

5.メモリー!メモリー!メモリー!(金!金!かね!)

もう気づいてると思うけど、「○○というゲーム」が世の中に出た。というのもクラスなんだ。これを使用するにはお店に行ってお金を払って買ってきて、自分の手元に置かなくちゃいけない。そして、他のインスタンス(この場合は「うちのファミコン」だね)と組み合わせて使用するんだ。

ところが、ゲームを買ってくる(インスタンス化)のにはお金(メモリー)がかかるじゃない?飽きたからってどんどんどんどん新しいゲームカセットを買っていったら、お財布は空っぽになっちゃうよね。

じゃあどうしよう?そうだ、古いゲームを売っちゃえばいいのだ!!ってことで、この時代からゲームの中古屋さんが雨後の竹の子のように現れたんだ。古いゲーム(使い終わったインスタンス)を売り払って、お金(メモリー)を回収する。売り払ってしまったので手元には残らないけど、かかったコストは回収できる。もし、またもう一度やりたいな〜〜ってことになったら(必要になったら)すでに世の中にあることは解ってるんだから(クラス宣言済み)もういちど買う(インスタンス化)すればいいのだ。

だんだんクラスとインスタンスがわかってきたかな?

さてと、中古の売買の話をしたけど、他にもよくやる手があるよね?

そう、「使う間だけ借りてくる」ってことだ。(かきかけ・・)