From: IWAOKA Masahiro Date: 2000-03-13T10:46:36+09:00 Subject: [ruby-list:21363] Re: 引数コピーとオブジェクト指向 いわおかです。 In message ogino@coop.nagoya-u.ac.jp writes: > > こう思って良いのです。外で name.sub! としても、そのオブジェクトが > > 変化してるだけで、Person の持っている name が「別のオブジェクト」 > > に変わってるわけではないのです。 > > 文法としてはそのとおりですが実社会ではそうはいかないでしょう、という話 ここまでは、一般論として、「カプセル化」が崩れているわけではないで しょうという主張です。 でも、後の例えはちょっとずれてました。ごめんなさい。 > > 尼さんになろうと、「僕の娘」が指し示す実体は同一人物です。 サンプルコードは、「僕の娘」じゃなくて「自分の名前」ですから、ちょっ と違いますね。「僕の娘」だったら、ある日突然電話がかかって来て、結 婚しちゃったと言われる可能性もあるわけですが (嫌だけど:-)、自分の 名前がある日突然変わってたら事件になりそうですね。 > 知らないところで名前が変わってしまうとなると、人間としては同一だから何 > と呼んでもいいだろう、という論法は通じません。(と、思うんだけど) # 僕自身は、「山岡さん」と呼ばれようと「岩間さん」と呼ばれようと平 # 気で返事しちゃう人なので、構わないのかもしれない:-) > class Perosn > def initialize(name) > @name = name > end > end > > name = 'John' > john = Person.new (name) > > この場合、外のコードは名づけ親であり、Person クラスの john インスタン > スが名づけられた本人です。どのように名づけるかは john インスタンスの自 名づけ親なんだから責任を持ちましょうという主張が多いようですね。 ただ、「この例の場合」には、この名前は自分のものであると主張させる ために、dup して名前変更のメソッドを Person に持たせるのもありだと 思います。名ずけ親が知らない間に、本人が別の名前を名乗っていたとい うのはありうると思いますから。 でも、あくまでも個別の問題であって、一般論では無いと思います。 まつもとさんは、オブジェクト指向でモデル化する時に、現実世界にとら われ過ぎてはいけないと主張されてましたので、Ruby 的には「名づけ親 なんだから責任持ちなさい」というあたりに落ち着くんでしょうね。 いわおか