[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends:00494] Re: Java プログラマーのための Perl 入門 ?
前橋@CLOSを動かしたことはないけれど です。
えんどう さんは書きました:
>Javaはそれ自身のオブジェクトシステムをプログラマーがいじれないし、
>this は暗黙のうちに渡されるので異なるように感じられますが、
>CLOS の総称関数(gereric fanction)の考え方に慣れると、
>両者にさほどの違いがないことが分かります。
>
># 前橋さんはおそらく実装にこだわりがおありと思いますが...
だーかーらー、動的にメソッドを選択するのと、静的に選択するのとでは、
実装ではなく「機能」や「用途」が全然違いますよね?
確かに、効率等を気にしなければ、動的選択は静的選択を兼ねますし、
静的な型付けがない言語ではそもそも静的なメソッド選択は
(引数の数とかが違わない限り)不可能ですから、えんどうさんが
Javaのメソッドオーバーロード程度のものを欲しがっているのなら、
CLOSはその要件を満たしているでしょう。でも、
「さほどの違いがないことが分かります」なんて言っちゃあ、
CLOSの中の人から、「Javaのメソッドオーバーロードみたいな、
じいつにくうだらない機能と一緒にするな!」と怒られるんじゃないでしょうか。
…あんまり古い話をほじくり出すのも何ですが、5年以上前の
えんどうさんの投稿より。
http://www.javaopen.org/jfriends/mlarchive/msg02362.html
| > draw()をShapeの外に出した場合、メソッドオーバライドが
| > *素直には* 使えなくなる、ということを言いたかったのですが。
|
| void draw(Point);
| void draw(Line);
| void draw(Curve);
| void draw(Arc);
Webからツリーを追ってもらえればわかりますが、ここでは、たとえばCADや
お絵かきプログラムなどを作るとき、
Shapeにdraw()メソッドを付けてPointやLineでオーバーライドするってのが
オブジェクト指向の入門書では定石のように載っているけれど、
Shapeをdraw()に依存させるのはよろしくないよね、という話をしています。
この問題を、上のような方法で解決できるとえんどうさんが考えていたのだと
すれば、えんどうさんは、
「Javaのメソッドオーバーロードは実行時にメソッドの選択をする」
という誤解をしていたとしか思えないわけですが…
どうも最近のえんどうさんの発言を見ると、あれから5年以上経って、
まだ同じ誤解をしているようにしか見えないです。大丈夫でしょうか?
------------------------------------------------------------
前橋 和弥 PXU00211@xxxxxxxxxxx
http://kmaebashi.com
------------------------------------------------------------