[Squeak-ja: 3876] Re: Object特異的な情報を含むメッセージの発信について
Hiromichi Tsurui
tsurui @ med.juntendo.ac.jp
2008年 5月 11日 (日) 19:00:56 JST
Yoshikiさん
懇切なお返事ありがとうございます。
> オブジェクト間のやりとりというものは、すべて「メッセージ」という概念
> で抽象化されていますが、メッセージには「引数」を付けて送ることができ、
> メッセージ送信者自身を現す"self"を含め、送信者が「知っている」(送信者
> が参照可能である)任意のオブジェクト、またはそれらを含む任意の式を引数
> とすることができます。というわけで、阿部さんの言うように一般的には
>
> b message: self.
>
> というメッセージをaが実行すれば良いことになります。
この場合、送信者aを指定するにはどうすれば宜しいですか?
送信者は暗黙にプログラマーだけかと思っていました。GUIでのevent handlingで予め用意されている場合以外は。
> が、重力のシミュレーションのときはもう少し工夫が必要でしょうね。
>
> 月 位置と速度を計算する: 地球.
> 地球 位置と速度を計算する: 月.
>
> という二つの式を順番に実行するとしたとき、最初の式を実行した時点で月の
> 位置と速度が時刻tにおけるものでなくt+dにおけるものになってしまった場合、
> 下の式で地球の位置が間違ったものになってしまいます。また、いずれ3体以
> 上のものをシミュレートしたくなるのが人情ですので、存在する質点のリスト
> を管理する「仲介者」のようなオブジェクトを用意して、それぞれの質点の一
> ステップ前の値を覚えておくか、それぞれのオブジェクトが新しい値と古い値
> の両方を持てるようにすることが考えられます。
おっしゃるとおりです。
> さらには重力の伝播速度を考
> 慮したくなると、メッセージの引数のひとつに時間を指定できるようにしたく
> なったりするかもしれません。その場合質点オブジェクトに時刻tにおける位
> 置を返す
>
> positionAtTimeT: t
>
> のようなメソッドを定義して、内部で以前の位置を(補完して返す)ということ
> になるでしょうか。(もちろん3体以上の問題では物理的に正確なシミュレーショ
> ンは不可能ですが、それでも楽しければよいですし、それなりに良い結果を得
> ることはできると思います。)
そこまでは考えが及びませんでした。
> Squeak/Smalltalk側のことに関しては、梅澤さんの書かれた本、「自由自在
> Squeakプログラミング」などを参考にすると良いのではないかと思います。
今、読ませていただいています。
> (思うに、これはEtoysでやりたいという話ではなく、Smalltalkで、という
> ことで良かったのですよね。)
VisualWorksでJunを動かしています。
鶴井
Squeak-ja メーリングリストの案内