tmlibの練習ブログ

自分流にtmlibを触っていきます。分かったことを解説。入門用になれば…?

クラスとオブジェクトの違いの話ーオブジェクト指向

tmlibは"クラス"の概念を導入している。
[Documents]で検索すると出てくる項目、tm.app.Object2D tm.display.Labelだとかは、全て"クラス"である。
今までも少しずつ触れてきた、クラスとオブジェクトの違いは何か?


デフォルトから一本のゲームを完成させる3.オブジェクトをreturnで返す。 - tmlibの練習ブログの話に戻るが、要はクラスとは、tmlib.jsが読み込まれて、真っ先に作られるオブジェクトたちである。
初めにまず、大事なオブジェクトを確保する。
もしこのオブジェクトが確保したIDを変更しようものなら、ベースの部分が追えなくなって、ガタガタになってしまう。


なので通常は、その元のオブジェクトをコピー&ペースト、別のオブジェクトを新しく生み出して使う。
違った言い方をするなら、新しいIDにクラス(=初めのオブジェクト)をコピペしてもう1個作る。


これで違う番地(ID)に、同じ姿形をした、しかしオリジナルとは別の存在のオブジェクトが作られた。
元のオブジェクト(オリジナル)がある限り、こちらは多少手荒に扱っても大丈夫、という事だ。
使い倒して不要になったら捨ててもいいし、また欲しくなったら元のオブジェクトから新しくコピーすればいい。


これが例えば、

this.star = tm.app.Sprite("CAT");
this.star.x = 100;

みたいな事の意味である。


tm.app.Sprite というオリジナルのオブジェクトから、同じ姿形の新しいオブジェクトを作って、this.starに入れる。
新しいオブジェクトは、安心して好き勝手できる。
xといった要素を、ばんばん変えてもいい。
ちなみにクラスとなる元オブジェクトは、一文字目が大文字になっている決まりである(tm.app.'S'priteという風に)


教科書的なwebサイトでは多分、


クラス=設計図(もしくは鋳型)
オブジェクト=その設計図を元に生産される物
と教えると思う。
(いきなりそう書いても分からないと思ったので、後回しにした…)


(*こういった考え方をオブジェクト指向という。JavaScriptだけでなく、最近のプログラム言語のほとんどの考え方なので、すぐに理解できなくても問題ない。
感覚でいければOK)




クラスが理解できると、
tm.app.Spriteといった元オブジェクト(クラス)を改造して、例えば"大きさの初期値を2倍"と変えて、そこからコピーして作られる以後のオブジェクトも全て、全部"大きさが2倍にする"、という事もできる。
オブジェクトは、元データの改造された部分も含めて、丸ごとコピーしてしまう訳だから。


もちろんクラスに不具合を作ってしまったら、以後のオブジェクトも全て不良品だ。
慎重に扱う必要があるが、場合によっては便利である。
tmlib(JavaScript)にはそういった特殊な改造の為の文法も用意されている。


だがそれはまた別の話で。