システムブラウザ
Smalltalk に備えられたクラスブラウザ。クラスの定義を文字通りブラウズする用途が主だが、必要なら変更を加えたり、新たに作成する、つまり Smalltalk プログラミングの際にも利用する重要なツールである。Smalltalk 環境にあるオブジェクトの静的側面のインスペクタ と見ることもできる。
おおまかに、上に2つ、下にひとつのペインからなり、リスト形式で表示される上のペインから必要な項目を選択すると下の大きめのペインにその内容が表示される。上の大きくわけて2つ、見た目には4つのペインも、左から右へと選択するうちに膨大な数の項目から、ひとつを特定できるしくみになっている。このからくりは Smalltalk 後、GUI の普及に伴い、多くの「何かをブラウズするためのツール」に採用されたが、うち、ファイルディレクトリをブラウズするための NeXT の Browser は有名で、現在でも OS X のファインダのコラム表示モードにおいてその片鱗(ってかそのままずばり(笑))をみることができる。同機能は、Lisa のプロトタイプ時のスクリーンショットより、NeXT 以前、かなり早い時期に検討こそされていたが採用はされなかった経緯があるようだ。ファインダ(デスクトップメタファ)があるから不要との判断だったのか?
左上のペインはブラウズしたいクラスを特定する2つのペインからなり、左側のペインでクラスが属するカテゴリを選択、右手のペインでクラスを指定する。もっとも、クラスの属するカテゴリなんて覚えられないので、もっぱら、クラスカテゴリペインで alt/cmd-f して表示される入力ボックス(FillInTheBlank のインスタンス)に検索したいクラス名の断片文字列を入力し、表示されるポップアップメニューから選択するのが常であろう。
クラスを選択すると、下のペインにはクラスの定義、つまり、スーパークラス名、変数(インスタンス変数、クラス変数、プール変数辞書)の数と名称、属するカテゴリ名が記載された文字列が表示される。よく知られているようにこの記述はそのままメッセージ式(Smalltalk のプログラム。これもお約束だが、subclass: 、instanceVariableNames: 、classVariableNames: 、poolDictionaries: 、category: はそれぞれで分断せず、#subclass:instanceVariableNames:classVariableNames:poolDictionaries:category: というひとつの長いセレクタ とそれに伴う5つの引数からなるメッセージを、スーパークラスに送信することを表現した“一行”のメッセージ式と読む。Smalltalk はいわゆる関数名を : で分断してそこに引数を挿入する特殊な、しかし自然言語に近い記述が可能な文法を採用している)になっているので、書き換えて accept(alt/cmd-s)する以外にも、別の場所へコピペして do-it(alt/cmd-d)しても同じことができる。
クラスを指定した状態で右上のペインでメッセージ名(セレクタ)を指定することで、そのメソッドを下のペインに呼び出せる。右上の2つのペインは、クラス同様、右手がカテゴリ、左手がメッセージ名の一覧になっている。カテゴリ不明のときは、カテゴリ欄の -- all -- を選択する。クラスをブラウズするか、同クラスのクラス、つまりメタクラスをブラウズするかは、中央の instance 、class スイッチを用いる。instance を選べばクラス(すなわちそのクラスのインスタンスが理解できるセレクタとそのメソッド)、class を選べばメタクラス(オブジェクトとしてのクラスが理解できるセレクタとそのメソッド)のブラウズになる。
クラス定義を表示した状態(つまり、右上のペインでメッセージセレクタを特定していない状態)で、class スイッチに切り換えると、クラスインスタンス変数(オブジェクトとしてのクラスが持つことができるインスタンス変数)を定義するためのテンプレートが現われる。
--sumim
クラスの属するカテゴリなんて覚えられない という感想は重要な示唆を含んでいるような気がします。--SHIMADA
カテゴリが適切であるとは限らない(とくに bob 的世界が展開中の Squeak の場合)と、クラス名が分かっている場合はカテゴリから当たる必要はないという意味で書きました。散策するときは便利ですよ。>カテゴリ--sumim
このページを編集 (3609 bytes)
以下の 2 ページから参照されています。
This page has been visited 4368 times.