Pharoといっしょ(1) Morph再び、GUIの呼び出しで戸惑うのよ。

Joseph Halfmoon

Smalltalkの法灯を伝えるPharoの練習もはや10回以上となりました。この辺で独立したシリーズに格上げ(それがどうしたというところ。)さて、過去回にてMorphって何よ、と問いかけ、多少は分かった気になってましたが、GUIを実際に使ってみる段でまたもや戸惑いました。お間抜け老人が慣れるまでは遠い道のりだな。

※Pharo関係記事の投稿順Indexは こちら

※今回の動作確認は、Windows11上のWSL2の上のUbuntu24.04LTS上のPharo 10.0.0を使用しています。

PharoのGUI

調べてみると、PharoにおけるモダンなGUIは、SPEC 2.0 というものを使うことになっているようです。手元のPharo 10処理系のHelpメニューにも、Spec2 Examplesというdemo browserが起動可能です。SPEC2demoBrowser

開いてみると、ExampleのGUIとともに、そのコードも見られるようになってまっす。これを真似っこせよ、との思し召しみたいっす。

じゃMorphは無くなってしまうの、というと、Pharo素人の老人がアチコチ見回った限りでは Morph は縁の下の方で頑張る、ということみたいです。それに実際にまだまだ使われているみたいだし。

今回はまずは基本のMorph、その中でも「出来合い」のGUIウインドウを使ってみて、そこでの疑問を調べていきたいと思います。

UIMangerクラスのdefaultって何よ?

さて調べてみるとUIManagerクラスというものの中に、「出来合い」で「即使える」ポップアップ・ウインドウ的なものがいろいろ入っているみたい。その中の一つを呼び出してみたところが以下に。UIManager_1

プロンプト文字列的なものを表示しつつ、入力欄にテキストを入力できます。上記のDEFのところに「DEFinput!」などと入力し、OKを押せば以下のごとし(Print itで起動しておるのよ。)UIManager_2

入力した文字列が返ってくるみたい。期待通りの動作です。しかし、UIManager_3

オレンジのところはメソッド呼び出しだろうけど、赤丸のところの default って何?UIManager様に送られるメッセージのハズだけれども。System BrowserでUIManagerを開いてみました。こんな感じね。UIManager_4

右端のメソットのところを見回ったのだけれど default なんてなさそう。しばらく考えたのちに、Pharo素人老人はようやく気が付きました。「インスタンス・メソッド」じゃないんだ。Class sideにえい。UIManager_5

ありました。defaultが。どうもこれをみると UIManagerは下請けのSubclass殿に仕事を丸投げにすることが多いみたい。その下請けも複数抱えることができるみたい。これがティア1というやつ?違うか。defaultはその中のまさにデフォルトのサブクラス殿を使えという選択の意味のようです。

実際にUIManagerのUML図を拝見するとこんな感じ。UIManager_UML

UIManagerの「下請け」には3社(いや3クラス)入っており、その中の一つにMorphUIManagerというMorphの名をいただくクラスも入っております。

呼び出しのところでオレンジでまるしてある request: initialAnswer:メソッドもUIManagerの配下をみると以下のような感じ。subclassResponsibilityって、下請けクラス殿に丸投げってことかい?UIManager_4B

そして実際に働いているのは、MorphUIManagerクラスの以下のメソッドであるようです。UIManager_6

ようやく、この呼び出し構造が腑に落ちた?ずっと腑に落ちたいいながら、玉ねぎの皮のように疑問が浮かぶ年寄です。

GUIをもういっちょ

以下は何か文字列を表示して、YesかNoだけ問いかける confirm:メソッドです。confirmこちらは、Print itで呼び出して Yesで抜けると以下のように true が返ってきます。confirm1

これでプロンプトウインドウ的なヤツは使えそうか?忘れなければな。

ソフトな忘却力(44) Smalltalk、Pharo、インスタンスのdelete へ戻る

Pharoといっしょ(2) SmallIntegerはint64_tとは違うみたい へ進む