From: Tomoyuki Kosimizu Date: 2000-03-10T01:53:26+09:00 Subject: [ruby-list:21282] Re: 引数コピーとオブジェクト指向 越水です。 次のようなコードがあります: class Perosn def initialize(name, friend=nil) @name = name @friend = friend end def set_name(name) @name = name end private :set_name end class Other def makePerson() john = Person.new('John') paul = Person.new('Paul', john) end end Other#makePerson()を呼び出したときのことを考えると、その中のjohnという 窓と、paulの中のfriendという窓が2つ存在し、それがカプセル化の破壊につ ながるのではないか?という懸念でしょうか。 見落とされがちですが、オブジェクトを作るには権利が必要です。大抵の場合、 initializeはpublicですが、これは変えることができます。つまり、『あるオ ブジェクトを作れる』というのは、それだけ信頼されているということです。 信頼している者ならば、ある程度カプセル化を破壊しても構わないのではない か、というのがpublicにする理由です。 また、makePerson()の中に窓があっても、Personの情報がしっかりカプセル化 されていれば、makePerson()の中でPersonオブジェクトに対してできることは タカが知れています。makePerson()の中ではPerson#set_name()は呼べ出せま せん。これはPersonの情報がカプセル化されているからです。 こうしたアクセス制限があるおかげで、そういつもいつもオブジェクトをコピー しなくても済むわけです。 越水 greentea@fa2.so-net.ne.jp