From: ogino@... Date: 2000-03-10T10:41:13+09:00 Subject: [ruby-list:21285] Re: 引数コピーとオブジェクト指向 荻野です。 もっとシンプルな話です。>越水さん class Perosn def initialize(name) @name = name end end というコードがあり name = 'John' john = Person.new (name) とすると、オブジェクト 'John' に対してこのコード(クラスの外側)の中では name という窓が、クラスの内側では @name という窓が開かれています。この 外側への窓をクラス Person では閉じることができないので、外側の窓経由で name.sub! (/.*/, 'Paul') などすると、@name が指すものを「引っ掻き回す」ことができるわけですが、 ここが「カプセル化」という言葉と違和感があるというだけです。「それでい いのだ」と言われればそれまでです。もちろん Ruby がこのような仕様になっ ていることに異議があるわけではありませんが、こういう仕様が「真のオブジェ クト指向」と不可分かどうかについては、議論の余地があるのではないかとい う話です。 > こうしたアクセス制限があるおかげで、そういつもいつもオブジェクトをコピー > しなくても済むわけです。 というわけで、メソッドに対するアクセス制限の話ではありません。 クラスに所属するということが is_a (kind_of) の関係である、というような 言い方を使えば @var = var は knows という関係で、こういう関係が必要なときもあるでしょうが、 @var = var.dup という var を雛型に @var の指すものを占有する has という関係の方が一般 的ではないか(たとえば Person john has a name)と思って「dup するべき」 ということをいいました。 -- 荻野 充 (おぎの みつる) ... 「萩(はぎ)」にあらず 名古屋大学消費生活協同組合