From: Mitsuru Ogino Date: 1998-04-15T20:07:30+09:00 Subject: [ruby-list:7509] クラスの変更 荻野といいます。すみませんが、ご指導ください。プログラミング初心者です。 大変馬鹿なことを考えているような気がしますが、あるオブジェクトが、自分自 身のクラスを変更することというのは可能なのでしょうか? # Java や C++ など、変数が型を持っていれば明らかにだめだと分かりますが。 オブジェクト指向というものが良く分からないのです。 --- たとえば --- class Dog # 一般的なこと end class LargeDog < Dog def bark print "ばうばう\n" end end class LittleDog < Dog def bark print "きゃんきゃん\n"; end def grow_up # ここで何か良い方法? end end john = LittleDog.new john.bark john.grow_up john.bark --- ここまで --- の結果が --- きゃんきゃん ばうばう --- となるような手です。それとも、私はそもそも無意味な(または邪悪な/気持ち悪 い)ことを考えているのでしょうか? 何を考えているのかというと、あるプログラムでデータの群を扱いたいのですが、 このデータは通常はファイルにテキストデータで書かれています。そしてテキス トファイルからデータを抽出したり、データからテキストを生成するのには、比 較的コストがかかるとします。 これを読み込んでオブジェクトを生成して行こうと思うのですが、毎回(CGIです) 全データを読むのは効率が悪いので、改善したいのです。そこで、 1) ファイル上にあって、メモリ上に無いデータ 2) ファイル上にあって、メモリ上に読み込まれているデータ 3) ファイル上にあるが、メモリ上で更新されているデータ 4) メモリ上にのみあり、新規にファイルを作成しないと保存できないデータ というサブクラスを作成して扱えば、プログラム上で意識することなく、あるデー タを参照した時点で、1)から 2)へ移行し、データを変更すれば 3)へ変化すると いう方法を思い付いたのです。これが、そもそもの失敗なのかもしれませんが。 ひとつ思い付いたのは、ruby ではオブジェクト毎にメソッドを変更できるような ので、これを利用すればクラスが変更されるのとは違いますが、似たような効果 はでるのではないかと思いました。しかし効率については?です。 実は上記のものを perl で bless し直すといういかにも邪悪そうな方法で実現し てしまったのですが、もっときれいにできないかと考え出したのが発端です。 まとまりのない文章になりましたが、よろしくお願いいたします。 --- 荻野 充(おぎの みつる) ... 「萩」にあらず 名古屋大学消費生活協同組合 ogino@coop.nagoya-u.ac.jp