ロランとディアナ2
ここからの続き
>刺激の中に対象インスタンスの指定が入るはず
についてですが、刺激(メッセージ)の中に対象インスタンス(オブジェクト)を含める方法は先に示した算術記号を使う方法と、刺激の名前に「:」を含める方法の2つがあります。前者と後者は基本的には一緒ですが、前者と後者が混在したときに前者が優先されること、前者には1つしかオブジェクトを伴わせることができないという決まり・制約がある点で異なります。後者は「:」の数だけ伴わせるオブジェクトの数を変化させられます。すでにお馴染みの、
instanceVariableNames:classVariableNames:poolDictionaries:category:
という刺激は、刺激を与えるときに4つのオブジェクトを伴わせることができます。ちなみにこの種の刺激の名前は、必ず「:」で終わらせなければいけません。したがって「ロラン は好き?: ディアナ」というのはできますが「ロラン は: ディアナ が好き?」といった「は:が好き?」というタイプの刺激は作れません。これだと「ロラン は: (ディアナ が好き?)」という「は:」「が好き?」という別々の刺激として解釈されてしまうからです。こうした制限を念頭に置きつつ、新しい刺激の名前を作るときに、刺激を与える式を書いたときにまるで文章のような読みやすさになるよう工夫するのが Squeak/Smalltalk の世界では美徳とされています。
さて、今のままではインスタンス変数にアクセスする手段は inpector を通してしかありません。オブジェクトに刺激を与えてこれを自発的に変化させる方法を考えましょう。
が好きなのは: あるムーンレイス
好意対象 _ あるムーンレイス
こうした刺激への応答をムーンレイスに定義しておくと、「ロラン が好きなのは: ディアナ」を do-it することで inspector を介さずにロランの「好意対象」にディアナを参照させることができます。同様に、
が好きな人
^ 好意対象
とすることで、「ロラン が好きな人」を print-it できます。憎悪対象についても、
が嫌いなのは: あるムーンレイス
憎悪対象 _ あるムーンレイス
および
が嫌いな人
^ 憎悪対象
を併せて定義しておけば、「テテス が嫌いなのは: (ロラン が好きな人)」のようなこともできます。余談ですが、名前に「:」を含まない刺激(つまりオブジェクトを伴わない刺激)は、それを含む刺激より優先して与えられる決まりがあるので括弧を付けずに「テテス が嫌いなのは: ロラン が好きな人」としても同じことができます。「:」を含まない刺激は「+」のような算術記号を使った刺激よりも優先するので「ロラン + (ロラン が好きな人)」も括弧を省いて「ロラン + ロラン が好きな人」で大丈夫です。もっとも、括弧があっても害はないので刺激を与える順序がどうなるかちょっとわかりにくいときはこまめに括弧でくくっておくほうがベターです。--sumim - 2002-06-08, 14:01:25
の名前
^ 名前
も定義しておきましょう。すると「テテス が嫌いな人 の名前」の print-it で 'ディアナ・ソレル' を出すことができます。--sumim - 2002-06-08, 15:01:51
ΛΛΛΛΛΛΛΛΛΛ ここまで ΛΛΛΛΛΛΛΛΛΛ
帰ってきたら何と複雑な……(^-^;)。でも、
(ちょっとときめき = あるムーンレイス) ifTrue: [^ 'どぎまぎ'].
を追加して、テテスでどぎまぎするところまでは確認しました(^-^;)し、ちょっと手間取りましたが全てうまくいきました。
……うーむ。ちょっと高度になってきましたね(^-^;)。
次は?<怖い(^-^;) --さ茂(WC会場を覗いて、仙台で牛タンを食して帰ってきました。ヨドバシでeMacを見ましたが、でかい! でかすぎる!) - 2002-06-08, 22:18:33
iMac のときも新・旧ともにその大きさに驚かされましたからね。そうですか、でかいですか、eMac。やはし。牛タン、大好きです。
ご心配されるほど高度なことはやっていませんが、ご不審な点があれば今のうちにどうぞ。「すべてはオブジェクトに刺激を与えることで進行」「よく使うオブジェクトは変数で捕まえておく」「オブジェクトはクラスから生まれ、クラスにはそのあるべき姿が記載される」について具体的なイメージをもっていただけていれば(ロランやディアナ、ムーンレイスという言葉を使ってご説明いただけるようなら)問題はありません。--sumim - 2002-06-08, 23:32:48
うーん。考えたら眠れなくなりましたがもう寝ます。
こんな絵でどうでしょう? 変更済みです
ソシエたちを今後付け足すことを想定しています(^-^;)。おやすみなさい……。<ってもう寝てますよね--さ茂 - 2002-06-09, 01:49:16
図を拝見して改めて気付いたことですが、browser で「ムーンレイス」の選択を解除したときに表示される、
Object subclass: #NameOfSubclass
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'ターンA-ガンダム'
は、同じカテゴリ「ターンA-ガンダム」にクラスを作るときのためのテンプレートなので「ムーンレイス」やその定義とは関係ありません。(! --abee) 同様に、「瞳を色は?」などの刺激(メッセージ)名の選択を解除したときに現れる、
message selector and argument names
"comment stating purpose of message"
| temporary variable names |
statements
も同じで、新しい刺激(メッセージ)への応答を定義するときに参考にするように呈示されたひな形に過ぎませせん。これ自体には意味はありませんので念のため。
すでに「地球人」を定義しておられるようなので、こちらに話を進めましょう。
「地球人」を定義するとき「ムーンレイス」と同じインスタンス変数や刺激を用意するのは面倒ではありませんでしたか? Squeak/Smalltalk には、この手間を省くための仕組みが備わっています。これが例の「サブクラス」というやつです。「地球人」と「ムーンレイス」は地球に残ったか、月に逃れたかの違いがあるだけで基本は同じ「人間」です。なので、まず「人間」というクラスを作ります。あ、その前に「ムーンレイス」と「地球人」を将来、定義し直す予定なので、今ある「ムーンレイス」と「地球人」を安全のため、名前を変えておきましょう。
「ムーンレイス」を browser でクリックして選択するか、browse-it して、黄ボタン(option + クリック)メニューから rename class... を選びます。それぞれの名前の前に「旧」を付けて「旧ムーンレイス」「旧地球人」としておきます。
次に「人間」を定義します。先ほど申し上げたとおり、テンプレートが用意されていますのでこれを使いましょう。「旧ムーンレイス」「旧地球人」が列挙されている枠で両者にかからないようにマウスポインタを置き、クリックすると上のテンプレートが表示されます。繰り返しになりますが、ここに必要な事柄を記述すれば「人間」を作るための準備が整うように配慮されています。そこで、以下のように書き換え、書き足ししてください。
Object subclass: #人間
instanceVariableNames: '名前 瞳の色 好意対象 憎悪対象 ちょっとときめき 性別 '
classVariableNames: ''
poolDictionaries: ''
category: 'ターンA-ガンダム'
これを accept すればクラス「人間」を作ることができます。
刺激についても、「が嫌いなのは:」「が好きなのは:」「が嫌いな人」「が好きな人」「の名前」「瞳の色は?」のそれぞれについて、地球人を作ったときと同様にコピペ、accept してください。ついでに、インスタンスを作ったときに同時に「名前」や「瞳の色」を決めておけるように新しい刺激を作っておきましょう。
の: ある名前 瞳の色は: ある色 で: 男性か女性
名前 _ ある名前.
瞳の色 _ ある色.
性別 _ 男性か女性
以上で、クラス「人間」が定義できました。次に新しい「ムーンレイス」を定義しましょう。新しい「ムーンレイス」は「人間」のあるべき姿を引き継ぎます。そこで、クラス作成のためのテンプレートの Object のところに、人間と入れます。
人間 subclass: #ムーンレイス
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'ターンA-ガンダム'
「地球人」も同じです。
人間 subclass: #地球人
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'ターンA-ガンダム'
それぞれを accept すれば、「ムーンレイス」「地球人」の定義ができます。念のため、すでに旧ムーンレイスたち、旧地球人たちに関連づけされているグローバル変数を初期化しておきましょう。
ロラン _ ディアナ _ テテス _ キエル _ ソシエ _ nil
改めて、各グローバル変数に新しいムーンレイスたち、地球人たちを作って関連づけします。(図を拝見すると、このグローバル変数についてもまだ誤解があるようですのでじきに解消しておく必要がありそうですね…)
ロラン _ ムーンレイス new の: 'ロラン・セアック' 瞳の色は: '緑' で: '男性'.
ディアナ _ ムーンレイス new の: 'ディアナ・ソレル' 瞳の色は: '青' で: '女性'.
テテス _ ムーンレイス new の: 'テテス・ハレ' 瞳の色は: '赤' で: '女性'.
キエル _ 地球人 new の: 'キエル・ハイム' 瞳の色は: '青' で: '女性'.
ソシエ _ 地球人 new の: 'ソシエ・ハイム' 瞳の色は: '茶' で: '女性'.
グエン _ 地球人 new の: 'グエン・サード・ラインフォード' 瞳の色は: '青' で: '男性'
ここまででなにか問題があればおっしゃってください。--sumim - 2002-06-09, 13:57:59
うーんsumimさんが、遊びに来てくださいとのことでしたので拝見しましたが、とても面白いです。あ、はじめましてさ茂さん。こちらのお話がとてもためになります。さ茂さんのストレートな疑問もこちらとしてはとてもためになります。ええと、じゃまくさかったら言ってくださいね。勝手におじゃましたのはこっちですから。--Lem- 2002-06-09, 17:31:43
初めましてLemさん。
>じゃまくさかったら言ってくださいね。
そんなことはないです。物覚えの悪い生徒ですが、長い目で見守ってください。
さてさて、
>テンプレートなので「ムーンレイス」やその定義とは関係ありません。
了解しました。忘れることにします(^-^)。
>グローバル変数についてもまだ誤解があるようです
うーん。頭が回りません(^-^;)。
何とか「人間クラス」設定しました。
……が、
が好きなのは: ある人間
^^^^^^^^
"誰が誰を好きなのか設定する"
好意対象 _ ある人間
^^^^^^^^
だと勝手に直したら、これだけうまく動きません。
ここは古い「あるムーンレイス」では駄目だと思うのですが、実際はうまくないです。どこに問題があるのでしょう?--さ茂 - 2002-06-09, 19:10:08
が嫌いなのは: ある人間
憎悪対象 _ ある人間
が好きなのは: ある人間
好意対象 _ ある人間
共に問題ないようです。どんなふうなことが起こりますか?
>ここは古い「あるムーンレイス」では駄目
プログラムとしてはダメ(機能しない)ということはありませんが「人間」の定義としては分かりづらいので NG ですね。うっかりして気付きませんでした、ごめんなさい(^_^;)。--sumim - 2002-06-09, 19:17:18
+ ある人間
"ある人間を目の前にしたときの心情を返す"
(好意対象 = ある人間) ifTrue: [^ 'どきどき'].
(憎悪対象 = ある人間) ifTrue: [^ '殺意!'].
(ちょっとときめき = ある人間) ifTrue: [^ 'どぎまぎ'].
^ '別になんとも'
こう直しても動くんですが……?--さ茂 - 2002-06-09, 19:20:53
ロラン が好きなのは: Argument expected -> ×
ロラン + ディアナ 'どきどき' ○
という感じです。名前はちゃんと'ディアナ・ソレル'で設定されてます。
はてさて?--さ茂 - 2002-06-09, 19:25:44 (! --abee)
ロラン が好きな人 の名前 'ディアナ・ソレル'
は動きます???--さ茂 - 2002-06-09, 19:29:23
矢継ぎ早ですみません(^-^;)。
ところで、各種刺激なのですが、#人間、#ムーンレイス、#地球人それぞれに同じ記述をしなきゃなりませんが、これを一個にまとめることはできませんか?--さ茂 - 2002-06-09, 19:41:46
最後のから。各種刺激をいちいち登録しなくするためのしくみが人間です。ムーンレイスと地球人を定義するときにそれぞれ、
人間 subclass: #ムーンレイス
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'ターンA-ガンダム'
人間 subclass: #地球人
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'ターンA-ガンダム'
とすることで、刺激を記述せずに刺激に対応できます。inspector で覗くと定義していないはずのインスタンス変数も存在する。それは何故でしょう…という問いかけをしたかったのです。 - 2002-06-09, 20:19:29
「+」のように算術記号の刺激同様、「が好きなのは:」という刺激を与えるときは、必ず指定した数のオブジェクトを伴わせなければいけません。前のページの最後から上の「:」を含む刺激についてまでの記述を良く読んでください。たとえば、「ロラン が好きなのは: ディアナ」というふうに使うことで、inspector を使わずにロランの好意対象にディアナを参照させることができます。繰り返しになりますが、前のページの最後からこのページの最初の部分を良く読み直してください。遡ってでも構いませんから分からないことがあれば疑問を呈示してストップをかけてください。一見、呈示した疑問を無視しているように見えることもありますが、フォローのための準備のために目先を変えているだけで、ご心配は無用です。当方としては、何もおっしゃっていただけなければご理解いただけたものとして進むしかありません。分からないまま進むと傷が深くなるので、欲を言えば、ご自身の言葉でそのときに合点のいったことを(オウム返しで構わないので)レスポンスしていただけるのが理想です。あと、ちょっと気になるのですが、ここ一両日は当方が呈示した作業をそのまましていただいておしまいになっているように感じます。心なしか集中力も欠いているような…。意義を見いだせなかったり、つまらなければ遠慮無く言ってください。「次は?」という台詞もひっかかりました。ここではボールが飛んでくるのをひたすら待つのではなく、“キャッチボール”のように積極的にボールを投げ返すことも心がけていただければ幸いです。--sumim - 2002-06-09, 20:23:32
あ……そもそも忘れてましたm(_ _)m。<うーんチョンボ --さ茂 - 2002-06-09, 20:38:53
何を…「そもそも忘れて」おられたのでしょう?(^_^;) --sumim - 2002-06-09, 21:00:36
『が好きなのは:』 という刺激が何だったかを忘れていました(^-^;)。
>ここ一両日は当方が呈示した作業をそのまましていただいておしまいになっているように感じます。心なしか集中力も欠いているような…。
すみません。確かに集中できてはいません。
ですが、
>意義を見いだせなかったり、つまらなければ遠慮無く言ってください。
というようなことは「とんでもない!」です。これだけ時間を割いていただいていて、ありがたい限りです。
(正直、FileListの改造にココロが飛ぶことはありますm(_ _)m。変更したいテーマが増え、.csファイルの内容も徐々にですが手がかりが見えてきているためだと思います)
>“キャッチボール”のように積極的にボールを投げ返すことも心がけていただければ幸いです。
キャッチボールということですが、あまり好き勝手言うのは失礼だなぁ(^-^;)という気持ちもありまして、質問等に限ろうと思っておりました。
実際、今、気になる点は、
instanceVariableNames: '名前 瞳の色 好意対象 憎悪対象 ちょっとときめき 性別 '
の部分で、複雑な人間関係をここで再現しようとする時、あまりにここが肥大するのも問題かなぁというトコロです。
大括りで、『容姿』(瞳、髪の色etc)『人間関係』(好き、嫌い、どきり、むらっ、複雑etc)『立場』(身分、力関係の相対的上下)程度にまとめられないものかと思います。
……でも、これって先走りですよね?
まだ理解できていない点が多いこと、せっかくの示唆を読み取れないこと……この「ロランとディアナ」で読み取るべき、理解すべき情報がわたし自身、まだ判然としないのです。
順番を踏まえるべきなのに、順番自体がわからないという感じ(T-T)。ですからこの状態で投げ返すのに躊躇しておりました。
>欲を言えば、ご自身の言葉でそのときに合点のいったことを(オウム返しで構わないので)レスポンスしていただけるのが理想です。
的を得ない疑問ばかりのようで恐縮ですが、今後心がけたく思います。
よろしくお願いいたしますm(_ _)m。--さ茂 - 2002-06-09, 21:55:48
>正直、FileListの改造にココロが飛ぶ
ご理解を促し興味を持っていただくために、あまりに卑近な例を用いたため、このような方向を私も懸念しておりました。ご心配は無用です。すべてはここ(FileList の .cs )へ繋げるための準備です。最初にちらと申し上げましたが、遠いですが道は一本です。後になって分かってしまえば必要になる知識はしごくシンプルなものだとびっくりされるでしょう。ご呈示いただいた疑問にお答えしないとき、話題が他に逸れるときは、そのための準備にとりかかったものと解釈していただければ幸いです。十分な情報をいただけないときは迷走を始めるかも知れませんが、否と分ければすぐに軌道は修正しているつもりです。--sumim - 2002-06-09, 22:14:40
>キャッチボールということですが、あまり好き勝手言うのは失礼だなぁ(^-^;)という気持ちもありまして
そのようなご遠慮はなさらないでください。有用な情報は取り上げますし、まだ尚早と思えば無視します。(と申しましてもその時はあえて取り上げないだけで関連事項があれば後々きちんと触れるつもりではおります) むしろ、どのようなことに興味をお持ちなのか、どこまで理解を進めておられるのか、どんな誤解をされているのかといった情報を渇望しております。ここ一両日のようなご反応では(図を除いて)先に進んでよいのかどうか、どちらに進んでよいのか正直、躊躇いたします。--sumim - 2002-06-09, 22:19:00
>この「ロランとディアナ」で読み取るべき、理解すべき情報
これは先に申し上げた、「すべてはオブジェクトに刺激を与えることで進行」「よく使うオブジェクトは変数で捕まえておく」「オブジェクトはクラスから生まれ、クラスにはそのあるべき姿が記載される」について具体的なイメージを持っていただくことに尽きます。--sumim - 2002-06-09, 22:21:14
>複雑な人間関係をここで再現しようとする時、あまりにここが肥大するのも問題かなぁと
その発想はしごくもっともです。今は、他のオブジェクトたちの助けを借りずになるべく作ったオブジェクトのみで話をまとめようとするためにこのような現象が起きています。前述の通り、オブジェクトの振る舞いをご自身のものにしていただいた暁には、他のオブジェクトたちにも登場願って、ロランたちをより活き活きとしたものに仕立ててゆくことができると思います。同時に、その頃にはくだんの .cs の内容も当初の目標への再出発も可能になると希望しています。とにかく今は、繰り返しになりますが、「すべてはオブジェクトに刺激を与えることで進行」「よく使うオブジェクトは変数で捕まえておく」「オブジェクトはクラスから生まれ、クラスにはそのあるべき姿が記載される」、これらの概念をなるべくシンプルな形で体験していただくことで、それを血肉としていただくことにご注力していただくことを最優先しております。--sumim - 2002-06-09, 22:28:32
>……でも、これって先走りですよね?
興味を持っていただき、学習意欲をかきたてていただくうえで“先走り”は歓迎すべき事です。こんなことができるのならば、こんなふうにしたい、こんなふうにしたらどうか…などざっくばらんに書き込んでください。ただ教える側の勝手を申せば、作業の指示と、その結果として何が起こったのかをご理解いただけたかの確認を済ませた後で、自由行動とその結果の考察、そして再び新しい作業…というタームが理想です。当方の予期しない改変を加えるとき(と申しましても今のところ具体的には地球人の定義だけですが。テテス、他の刺激やインスタンス変数の追加は予想の範囲、というより密かに期待しておりました)は、それにふさわしいタイミングかどうかをはかっていただけるとありがたいと思うこともちょっとあります(^_^;)。--sumim - 2002-06-09, 22:49:06
改めまして、現段階の理解図がこんな感じです。
やはり変数については誤解があるでしょうか?
>それにふさわしいタイミングかどうかをはかっていただけるとありがたいと思うこともちょっとあります(^_^;)。
……言ってる矢先に「はかりかねた」ようですm(_ _)m。--さ茂 - 2002-06-09, 22:48:20
ふさわしいタイミング、というのがなかなかわかりません。ご迷惑おかけしますm(_ _)m。--さ茂 - 2002-06-09, 22:59:03
最後のは手前勝手な申しようなので忘れてください(^_^;)--sumim - 2002-06-09, 23:01:13
>ここ一両日のようなご反応では(図を除いて)先に進んでよいのかどうか、どちらに進んでよいのか正直、躊躇いたします。
できるかぎり理解不理解(?)の程度を示せますよう努力いたします。
>…というタームが理想です。
はいm(_ _)m。
>地球人の定義だけですが。
これ(理解図)はあくまで想定のつもりでした(^-^;)。寄り道でしたらそうおっしゃっていただければ(と言いつつ面白がってましたが(^-^;))。
>他のオブジェクトたちの助けを借りずになるべく作ったオブジェクトのみで話をまとめようとするためにこのような現象が起きています。
了解しました。
肥大化を解消するのは大括りでこの課題が完成した後の、第二段階という感じですね? <応用編 --さ茂 - 2002-06-09, 23:06:57
>現段階の理解図
もう一度、「人間」を作るところの記述に目を通してください。ご呈示の図では「人間」にインスタンス変数がひとつも定義されていません。逆にそのサブクラスである「ムーンレイス」や「地球人」に、本来なら「人間」に定義されいるはずの刺激、インスタンス変数が定義されているよう記述されているように受け取れます。(インスタンス変数については確実に「ムーンレイス」や「地球人」に定義があるとの記述が見られます) 正しくは下です。
Object subclass: #人間
instanceVariableNames: '名前 瞳の色 好意対象 憎悪対象 ちょっとときめき 性別 '
classVariableNames: ''
poolDictionaries: ''
category: 'ターンA-ガンダム'
人間 subclass: #ムーンレイス
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'ターンA-ガンダム'
人間 subclass: #地球人
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'ターンA-ガンダム'
>やはり変数については誤解がある
残念ながら…。グローバル変数の記述と最後のインスタンス変数の記述はごっそり取り除いてみてください。変数を箱のようなものと意識しておられませんか? Squeak/Smalltalk では箱と言うよりは名札です。「グローバル」「インスタンス」の接頭語は、それがどこで通用するか…を区別します。前者は Squeak の世界どこでも、後者はインスタンスの刺激に対する振る舞いを定めるための定義の中だけ、です。--sumim - 2002-06-09, 23:09:26
>>地球人の定義だけですが。
>これ(理解図)はあくまで想定のつもりでした(^-^;)。
なるほど。それでは「「地球人」を定義するとき「ムーンレイス」と同じインスタンス変数や刺激を用意するのは面倒ではありませんでしたか?」というような台詞も「人間」を改めて定義した理由も意味不明だったでしょう。できれば実際行なったこと、まだしていないが理屈では可能であること、したいがいまの理解では不能なことを明確に書き分けていただければ幸いです。--sumim - 2002-06-09, 23:15:53
>正しくは下です。
すみません。
HTMLに起こす時に間違っただけですm(_ _)m。
>グローバル変数の記述と最後のインスタンス変数の記述はごっそり取り除いてみてください
ここがキモですね(^-^;)。
名札のようなもの、オブジェクトを捕まえておく術? 理解しているつもりです。
が、『ムーンレイスからNew new で作ったロラン』と、ロランの中のinstanceVariableNames:(正確にはムーンレイスに付けられた?)との区別がまだ曖昧です。
システムブラウザ上で現われない『ロランたち』と、『ロランたちの瞳の色など』の関係は?
だから箱を想像してしまいます。
(人間(ムーンレィス(ロラン(瞳の色(緑)))))
入れ子という感じに。
……この先どう考えを巡らせれば良いでしょうか?
>>できれば実際行なったこと、まだしていないが理屈では可能であること、したいがいまの理解では不能なことを明確に書き分けていただければ幸いです。
以後、明確に分けたく思いますm(_ _)m。--さ茂 - 2002-06-09, 23:23:35
>(人間(ムーンレィス(ロラン(瞳の色(緑)))))
ここいらへんが、ミソみたいですね。今更のように申し上げれば、実はロランやディアナという名前のグローバル変数を使うのは、冒険でもありました。今、持っておられるような誤解を招きかねないと…。ご呈示の入れ子図風に“敢えて”書くと
(人間(ムーンレィス(あるムーンレイス(瞳の色('緑')))))
となります。あくまでも“敢えて”で本来は「人間」「ムーンレイス」「あるムーンレイス=ムーンレイスのインスタンス」は(細かいことを言えば '緑' でさえも!)独立した別のオブジェクトなので入れ子にはなりえません。ここでは変数に関する誤解を解くのに注力させていただきます。
「ロラン」や「ディアナ」という字面は、あくまで Squeak の世界のどこでも通用する名札に書かれた文字に過ぎません。「ロダン」や「ディーン」としてもなんら本質は変わらないのです((あるムーンレイス(名前('ロラン・セアック')瞳の色('緑')…)はどんな名札を付けられても(あるムーンレイス(名前('ロラン・セアック')瞳の色('緑')…)でありつづけます)。「ムーンレイス」から生まれた「あるムーンレイス」(クラス「ムーンレイス」のインスタンス)は放っておくとどこかへ行ってしまいます(具体的には Squeak にゴミとして抹殺されます)。それを捕捉しておくため、そして、適宜参照するときに便利なように名札を付けた。ただそれだけです。--sumim - 2002-06-09, 23:41:22
>冒険でもありました。
これは何となく「危ないなぁ」ということはわかっていました(^-^;)。
>独立した別のオブジェクトなので入れ子にはなりえません。
そう示唆していただいても、どうしても普通のパソコン環境でいうところの、ショートカットやエイリアスのようにも勘違いしやすいです。<その中に属性のように'緑'など入れられる点は異なるとは思ってますが
↑ショートカットもエイリアスもファイル、というのと同じ感覚で『すべての変数は独立したオブジェクト』という怪しい認識になったりもします。
こんな感じです。とほほ。
このあたりをちゃんと理解した上で、#人間 の中だけでしか通用しない、インスタンスの世界だけでこれらを表わす(より複雑になる予感はあります)ようにしていかなければならない訳ですよね?
余談:昨夜ムーンレイスと人間の刺激を削除していて、『+』を削除しようとして怪しいメッセージが出ました。どうも+は他のオブジェクトが参照しているよ、という感じだったので削除せず、ムーンレイスと人間というサブクラス自体を削除し(ロラン + デイァナ 'どきどき' を効かなくしてから)、あらためてサブクラスを作り直しました。
この判断に誤りはありませんよね? --さ茂(本日、泊まりの会議のためレスできませんm(_ _)m。よしなに) - 2002-06-10, 12:35:19
>ショートカットもエイリアスもファイル、というのと同じ感覚
その感覚でいくなら、こんな感じではいかがでしょう。とりあえず、話を簡単にするために、オブジェクトの正体自体は謎ということにしてあります。--sumim
>この判断に誤りはありませんよね?
判断は間違っていますが(^_^;)、結果オーライです。--sumim - 2002-06-10, 17:38:41
- もう1回おじゃま。
>物覚えの悪い生徒ですが、長い目で見守ってください。
いや、物覚えが悪いのは僕も負けません。さ茂さんの課題を一緒に頭ひねってます(笑)今、『+』を削除したときに出た怪しいメッセージのわけは?っていうのとどこが判断が間違っていたんだろう?ってのを考えてて、また前のほうから見てたりしてました。--Lem - 2002-06-10, 22:49:25
せっかく削除していただいたのですが、やはり、実際には「地球人」を定義していただいていない状態で、そうと勘違いして「人間」に進んだのは時期尚早だったようです。混乱に拍車をかけてしまったと反省しています。話題を絞って、変数やクラス=インスタンスのほうをきちんと片付けておきたいので、できましたら、復習を兼ねて、前のやりとりを読み返しながら、dev 用もしくは設定を解除した日本語版にムーンレイスのみを定義し終えたところ(具体的にはここいらの直前)まで仮想イメージの状態を戻していただけますか? >さ茂さん。--sumim
あと、これ、
の: ある名前 瞳の色は: ある色
名前 _ ある名前
は便利なので、追加しておいてください。この状態で人物については、次を do-it することで人間関係以外は再設定できます。
ロラン _ ディアナ _ テテス _ nil.
ロラン _ ムーンレイス new の: 'ロラン・セアック' 瞳の色は: '緑'.
ディアナ _ ムーンレイス new の: 'ディアナ・ソレル' 瞳の色は: '青'.
テテス _ ムーンレイス new の: 'テテス・ハレ' 瞳の色は: '赤'
二度手間、三度手間をおかけし恐縮ですがよろしくお願いします。--sumim - 2002-06-10, 23:48:16
(! --abee) - 2002-06-10, 23:52:26
>仮想イメージの状態を戻していただけますか?
戻しました。人間関係までは設定しました。
>こんな感じではいかがでしょう。
ショートカット(エイリアス)はその中に親データの位置が記憶されていますよね?
変数も「?」のオブジェクトを知っていて(というかオブジェクトそのものの名札の一つ)、「ファイルを開く」代わりに(名札に)与えられた刺激に応じた反応を返す。
うーん。まだ微妙です。
もう一点、風船と札の間の壁もまだしっくりときません。--さ茂 - 2002-06-11, 17:49:18
まあ、それほど複雑に(作用機序まで)考えないでください。複雑に考えるといろいろと矛盾やほころびがでてきます。エイリアスをダブルクリックすると、何もしていないはずの本体が開く、これだけです。ここでポイントとして見ていただきたいのはエイリアスに「ロラン」と名付けられているところです。「あるファイル」はエイリアスにどんな名前が付けられているかは知りませんよね。変数とオブジェクトの関係においてもしかり。これが、browser でロランが現れない答えのひとつです。
>風船と札の間の壁
これは、エイリアスもファイルも、どちらもファイルなのでその気になればフォルダをどんどん開いていって直接、本体に対してダブルクリックを敢行できる…ということを示しています。オブジェクトはそういうわけにはいかない、よく使うオブジェクトは必ず変数と関係づけしておかなければ…というイメージを表わしたものです。--sumim - 2002-06-11, 17:59:11
>これが、browser でロランが現れない答えのひとつ
うーん。ここがまだわかりません(^-^;)。
名札たる変数に対する刺激と反応の仕方を知っているオブジェクト(クラス)が変数自体を認識していないというところが「はてな」です?
>よく使うオブジェクトは必ず変数と関係づけしておかなければ…
このあたりは理解できたと思います。
クラスは普通、名札(変数)に刺激を与えた時に決まった反応を返すものでそれ自体は変数無しでは動けない、と考えてよいですよね?
1+1は、+だけでは+でしかないのですから。変数+変数の刺激として新しいオブジェクトの2を返すルールを+が知っているだけ、ですよね?--さ茂 - 2002-06-11, 20:34:31
いろいろと語弊があるようですが、落ち着いて解決してゆきましょう。
>名札たる変数に対する刺激と反応の仕方を知っているオブジェクト(クラス)が変数自体を認識していないというところが「はてな」
まずは、ここから。ファイル自体は、自分にエイリアスがいくつあるか、それらにどんな名前が付いているかを知らない、ということはご納得いただけると思います。本体はエイリアスのことを知らなくても、エイリアスが受けた刺激(ダブルクリック)を自分に向けられたものとして認識し、しかるべき応答(あらかじめ決められたアプリを起動し自分を開いてもらう)ができる、と。この一点についてなにか問題はありますか?。--sumim - 2002-06-11, 21:02:16
このたとえは良くできていて、実際、エイリアスを持つファイルから、そのエイリアスを列挙させることはできませんし、ましてやそれらに付けられたファイル名を知ることもできません。--sumim - 2002-06-11, 21:06:27
エイリアスには「どこの何というデータ(アプリや文書)」というデータがあって、これをダブルクリックすると「どこの何というデータ(アプリや文書)」が開く……OSの1機能ですよね?
だから、「どこの何というデータ(アプリや文書)」はどのエイリアスから自分が起動したかということを知りませんよね?(そもそも意味有りませんよね?)--さ茂 - 2002-06-11, 21:08:32
では、変数についても、同様に、「あるオブジェクト」という情報のいち形態があって、これに続けて刺激名を記し、print-it すると「あるオブジェクト」にその名の刺激が与えられる……システムの1機能、だと思っていただくのはどうでしょう。--sumim< - 2002-06-11, 21:15:37
刺激を大本にある「あるオブジェクト」へ与える形態ですね?--さ茂 - 2002-06-11, 21:19:01
だから、「あるオブジェクト」はどの変数から自分が反応すべき刺激が提供されたかということを知りません。(そもそもそれを知ることに意味は有りません)、となります。オブジェクトにとって大事なのは「どうやって」ではなく「どんな」刺激が与えられたか、だからです。--sumim - 2002-06-11, 21:21:03
>変数とオブジェクトの関係においてもしかり。これが、browser でロランが現れない答えのひとつです。
ふむふむ。理解できます。
変数の方はそもそも「あるオブジェクト」の1形態なので、それにどんな刺激が与えられ、どう反応を返すか……わかるのですね?--さ茂 - 2002-06-11, 21:26:56
いえ、変数はエイリアスと同じで自分に与えられた刺激を本体へ橋渡しをするだけです。それ自体はなにもできません。イラストにも描きましたがぺらぺらの札のようなものです。エイリアスも、本体のファイルの位置を記しただけの小さなファイルですよね?--sumim - 2002-06-11, 21:31:23
あくまで「名札」ですね。名札にはヒモがついていて、それを引かれたり揺すられたりすると、刺激が風船に伝わる。--さ茂 - 2002-06-11, 21:34:15
そうです。そうです。例えば、
名札1 _ ムーンレイス new の: '名無しのゴンベ' 瞳の色は: '黒'.
名札3 _ 名札2 _ 名札1
を do-it してみてください。--sumim - 2002-06-11, 21:39:01
do-itしてみました。
名札1 瞳の色は? '黒'
名札2 瞳の色は? '黒'
名札3 瞳の色は? '黒'
理解できてると思います……。--さ茂 - 2002-06-11, 21:46:32
名札1 名前は? '名無しのゴンベ'
名札2 名前は? '名無しのゴンベ'
名札3 名前は? '名無しのゴンベ'
というのもやってみました。
(刺激「名前は?」も追加しました)--さ茂 - 2002-06-11, 21:53:31
名札1、名札2、名札3は、いわば、同じファイルで連続して作られたエイリアスと同じ働きをします(http:/myImged/3#2)。それぞれに刺激(瞳の色は?)を与えるように記述し、 print-it などをすれば、本体である「あるムーンレイス('名無しのゴンベ')」に指定した刺激を与えたときと同じ結果が得られるという「仕組み」です。--sumim - 2002-06-11, 21:54:31
移動しましょう。
このページを編集 (31677 bytes)
|
以下の 2 ページから参照されています。 |
This page has been visited 7183 times.