next up previous contents
Next: クラスSerialPortMorphの作成 Up: SerialPortのMorphをクラス化する Previous: 必要な知識

PlayerとMorphの関係

タイルでスクリプトするまではモーフに対応するPlayerXXクラスは存在しないのに、スクリプトを組もうとするといきなりPlayerXXというクラスが自動的に生まれて組んだスクリプトをメソッドとして持ってしまうという事がある。また、ビューワーで新しい変数を追加すると、自動的にPlayerXXに「get変数」や「set変数:」が生まれる。それを理解するためにPlayerとMorphの関係を理解しなければならない。

クラスベースの Smalltalk に対して、プロトタイプベースの Self という処理系がある。Smalltalk のオブジェクト(インスタンス)は、自らの状態を保持する能力だけを持ち、独自の処理を持つことはできない。自らの状態を変えるための処理は、その生みの親であるクラスが保持している。一方で、Self では、すべてのオブジェクトが独自の状態(任意の数の)ばかりでなく独自の処理をも持つことができる。

生まれた瞬間に、Selfのオブジェクトはまっさらな状態であるので、自分で生きてゆくためにはどうしたらよいかを後から学ばなければいけない。Self のオブジェクトは基本的なことからすべて定義していかなければならないのでは大変なので、既存のオブジェクトのそっくり真似をできるような仕組みが用意された。その仕組みを使って誰の真似をするか宣言するわけだが、そこで指定される側のオブジェクトのことをプロトタイプと呼ぶ。これがプロトタイプベースと呼ばれる理由である。

Morphic は、この Self という処理系の上で構築された GUI フレームワークで、Self のオブジェクトを視覚的に制御・構築しやすいように工夫されたものである。これを Squeak/Smalltalk に移植したのが Squeak 版 Morphic である。視覚化や操作面での処理に関しては、クラスベースの Smalltalk でも問題なく実装できる。ただ、 Morph のインスタンスは、インスタンスであるが、独自のメソッドを持つことができない。そこで、PlayerXX というクラス(メソッドを持つことができるオブジェクト)と一対一対応させて、従来のインスタンスでまかなえる部分は Morph インスタンスが、それを越える部分は相棒の PlayerXX クラスが受け持つという構成である。[8]

モーフのインスタンスをもっと自由に動かすための仕組みとして、Playerのようなクラスが必要になる。プレイヤーは指定したモーフを“まとって”、動かせたり機能を持たせたりする。プレーヤーに設定されたモーフの部品はコスチュームである。 図8.1でMorph,Player,コスチュームの関係を分かりやすく示した。

   figure257
図 8.1: プレイヤーはモーフをまとって、機能を持たせる



Deguchi Lab.