[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
------------------------------------------------------------