From: Take_tk Date: 2003-08-31T02:48:40+09:00 Subject: [ruby-list:38301] 「変数+オブジェクト」モデルと「変数+ID+オブジェクト」モデル たけ(tk)です。 [ruby-list:38273] Re: かみ砕いた説明をすべき範囲 にて matz@ruby-lang.org (Yukihiro Matsumoto) さん 曰く: > |それともう一つの理由は、正確に理解するためには「変数にはオブジェクトのI > |Dが入っているだけだ。IDは普通はオブジェクトの本体の所在地を示す番地だ」 > |というようにつなげていくしかないだろう。  普通「変数はオブジェクトを指し示す」という表現をすると、変数とオブジェ クトの2個の要素からなるモデルとなる。  しかし、「変数+オブジェクト」の2個の要素だけでは (4−5)複数の変数が1つのオブジェクトを指し示す場合と、複数の変数がそ れぞれ別のオブジェクトを指し示しているにもかかわらす同じ内容を示す場合と の違い、 (5−1)変数の値が変わる、といっても、代入によって変数が指し示している オブジェクトが入れ替わる場合と、破壊的メソッドによって変数が指し示してい るオブジェクトの状態が変わる場合とが違うこと を具体的に示すことが難しい。  そこで、ここにもう一つの要素、オブジェクトIDを付加したモデルを提案し てみたい。つまり「変数+オブジェクトID+オブジェクト」という3個の要素 で構成されたモデルを提案してみる。  次の2個の条件がモデルに加わる。 (7)オブジェクトにはそれを識別するための識別番号(オブジェクトID、 object_id)が付されている。 (8)オブジェクトは自分のオブジェクトIDを知っている。  これを使うことにより、次のように説明を補足することができるようになる。 (4)変数はオブジェクトを指し示す。変数はオブジェクトIDを保持しており、 そのオブジェクトIDによって指し示すオブジェクトを特定する。 (4−2)1つの変数は1つのオブジェクトを指し示す。複数のオブジェクトを 指し示すことはない。何も指し示さないということも無い(nilオブジェクトを 指し示す)。変数はオブジェクトIDをひとつしか保持することはできない。 (4−3)複数の変数が1つのオブジェクトを指し示すことはあり得る。この場 合には複数の変数が同じ内容を示す。複数の変数が1つのオブジェクトを指し示 すオブジェクトIDを保持することがあり得るのは当然である。 (4−4)異なった複数のオブジェクトが同一内容を持つ場合がある。複数の変 数がそれぞれ別のオブジェクトを指し示しているときに、それらが同じ内容を示 すことがあり得る。その場合には各変数が保持しているオブジェクトIDが異なっ ている。 (4−5)−3と−4では、破壊的メソッドを使ったときに、異なった結果にな る。従って、これを区別する必要がある。区別するためには各変数が保持してい るオブジェクトIDを調べればよく、そのためにはオブジェクトにオブジェクト IDを問い合わせればよい。 (5)変数が指し示すオブジェクトを変更することができる。これを代入という。 代入は変数が保持しているオブジェクトIDの変更を意味する。 (5−1)変数の値が変わる、といっても、代入によって変数が指し示している オブジェクトが入れ替わる場合と、破壊的メソッドによって変数が指し示してい るオブジェクトの状態が変わる場合とがある。破壊的メソッドの場合には変数が 保持しているオブジェクトIDは変更されない。  箱モデルの場合には箱の中にはオブジェクトIDが入っている、という言い方 になる。  名前モデルや名札モデルではオブジェクトIDが入る余地がないのではなかろ うか? take_tk = kumagai hidetake