luna について教えて下さい (OO & luna 初心者)

守岡 知彦 / MORIOKA Tomohiko tomo @ kanji.zinbun.kyoto-u.ac.jp
2002年 4月 15日 (月) 18:10:41 JST


守岡です。御無沙汰してます。

超浦島フォローで申し訳ありません。

(略)

中島さん> (1)me インスタンスについて luna-method をコールしたときに、
中島さん>    luna-call-next-method で dad クラスの luna-test 自身がコールされ、

中島さん> (2)再帰的にコールされた dad クラスの luna-test の中の
中島さん>    luna-call-next-method で初めて grandpa の luna-test method がコール
中島さん>    される

中島さん> ために y が 2 回加算されてしまうようです。

中島さん> luna.el の中を色々見ていたのですが、どうも
中島さん> luna-class-find-parents-functions で method が見つかるまで、親クラスに
中島さん> 遡って method の探索をするためにこのような動作になるようです。

中島さん> [質問]

中島さん> (ア)あるクラスの親 class の method はあるが、(親クラスと同じ動作で良い
中島さん>     から) そのクラス自身の method を定義しないことは OO 的に誤りなので
中島さん>     しょうか?

そんなことはないと思います。

中島さん> (イ)(ア)がもし誤りの場合で、親クラスと全く同じ動作で足りる下位のクラス
中島さん>     の method は一々親クラスと同じ関数定義をして、そのクラスに特化した
中島さん>     method を設けるのが良いのでしょうか?  それとも
中島さん>     luna-call-next-method を用いて親クラスの method をコールするだけの
中島さん>     method を設けるのが良いのでしょうか?  それとももっと他に良い方法が
中島さん>     あるのでしょうか?

なにもしなければ親クラスの method が継承されると思いますがそれではまず
いのでしょうか?

ちなみに、luna-call-next-method(その元ネタの CLOS の call-next-method)
は「陰に隠された」method を呼び出すために設けられているものだそうです。

中島さん> (ウ)(ア)がもし誤りの場合で、下位クラスに明示的な method が定義されてい
中島さん>     ない場合、una 的に下位のクラスから親クラスの method をコールするの
中島さん>     を禁止する必要はないでしょうか?

CLOS だと多分 method がどれかの class の持ち物であるということにはなっ
てないと思うので、そもそも下位 class の持ち物である暗黙の method とし
て扱われていることが問題であるような気がします。

ちょっと手元に CLOS 処理系を用意してないので、どなたか CLOS 処理系で同
様の例を実験していただけないでしょうか?

-- 
┯━…‥・懐かしい未来の記憶をふと思い出しかけた・‥…━━┯━━━┯━
││ ─ │  ─  /    ─   ┼─     ┬                ─   ─┼ ┬┴─
┼┼─┼|〓━─┼ 守岡 知彦 (MORIOKA Tomohiko) <tomo @ m17n.org> ─ ─┬
┻┻━┻━┷━━━━━━━━━━━━━━━━━━━━━━━━━━━━━




More information about the Emacs-mime-ja mailing list