gofujita notes

on outline processing, writing, and human activities for nature


Smalltalk の Morphic であそぶ

Squeak Smalltalk の Morphic であそんでいます。

Morphic は GUI のフレームワークだと、ぼくは理解しています。たとえばブラウザなどの窓やメニューバーなどの描画、データ解析やシミュレーションのプロセスや結果を視覚化するためのフレームワークです。Squeak の UI も Morphic でできているそうです。

その道具をつかったあそび方の、覚えがきです。

まず、やりたいことを文章にしたり、スケッチを描いたりします。

つぎに、その文章やスケッチに近い形の既存 morph を探します。探す手段として、今のところ morph の名前リストをつかっています。

 

World menu > new morph… > from alphabetical list

 

つまり「World menu」の中の「new morph..」という項目を選び、さらに現れたメニューの「from alphabetical list」を選びます。

これは、Squeak がもっている morph をアルファベット順に並べたリストです。この名前から、それぞれの morph の内容が予想できます。

たとえば「DialogWindow (ダイアログ・ウィンドウ)」や「BasicButton (ボタン)」、そして「CircleMorph (円)」や「ClockMorph (時計)」など。

morph 名のならぶメニュー画面で特定の morph を選ぶと、その場で評価 (実行) され、つくられた instance が Smalltalk のデスクトップに現れます。

それらの morph の中でとく気になるものは、その中身 (どんな methods をもっているか、methods のコードなど) をブラウザでしらべます。

たとえば、ClockMorph という morph の中をみる場合、Workspace に以下のようにかくと ClockMorph を選んだ形でブラウザが開きます。

 

ClockMorph browse

 

合わせて、その morph の継承構造や message sends の流れも見ておきます。ここがいちばんの鍵になるでしょうか。

ブラウザの真ん中あたりの行にある、hierarchy ボタンを click すると、継承ブラウザが開き、今動かしている instance の class の「親」になる morph、さらにその「親」になる morph などが分かります。

また、method finder もよくつかいます。

 

World menu > open… > method finder

 

気になる morph がどうやって動くのかある程度イメージができたら、実際にその理解が妥当なのかを試しながら、確かめます。

具体的には inspector をつかいます。動いている instance を inspect すると、その instance がもつ変数の変化や、submorph (注目している morph の「中にある」morph) や owner (注目している morph を「含む」morph) の状態も、具体的に観察できます。

 

clock := ClockMorph new openInWorld.

clock inspect

 

Inspector の下側の枠に実際にコードをかき、評価 (実行) してみます。この場合、コードの最初にかく受信者の名前は self になります。

必要に応じてその moph に属する submorph も inspect して、かいたコードがつくる morph のふるまいを観察します。

この段階で当初イメージした形やふるまいを、今いじっている morph やその submorph をつかって実現できるか試します。

やりたいことが実現できそうなときは、inspector にかいたコードをもとに Workspace 用にコードをかき直し、Workspace からその morph を操作できるようにします。

Workspace は、文字どおり Smalltalk の作業場で、スクリプト言語のようにここにコードかきながら実行できる場所であり、自分用のメモも残しておく場所にもなります。

既存の morph でやりたいことすべての実現が難しい場合は、新しい class や method をつくります。

主にブラウザをつかいますが、手はじめに Workspace にコードをかいて試すことも少なくありません。やろうとする計算の一部やすべてを試します。

こうした試行錯誤をくりかえしながら、morph の小さな自作 classes と methods を増やしていく。あるいは、既存の morph のしくみを覚えていく。

そうすることで、考える道具として Smalltalk が育つことを期待しているワケです。