[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends:00496] Re: Java プログラマーのための Perl 入門 ?



前橋です。

えんどう さんは書きました:
>>実装ではなく「機能」や「用途」が全然違いますよね?
>
>どのように違うとお考えでしょうか?

CLOSの動的なメソッド選択の機能は、
「型情報によるディスパッチ機構」です。

Javaのメソッドオーバーロード(静的なメソッド選択)の機能は、
「裏でコンパイラに別のメソッド名を付けてもらうこと」です。

Javaのメソッドオーバーロードの用途は、
「メソッドの名前を色々考えなくてよくて嬉しいな」というものでしかなく、
「型情報によるディスパッチ機構」ではありません。

CLOSなら、「引数に与えたShapeの種類によりメソッドを振り分ける」
という用途がありますが、Javaではこれはできません。

>以下の主張に対して反論はありますか?>前橋さん
>
>>私見ですがオブジェクト指向に最低限必須な要素は
>>
>> 1.抽象データ型
>> 2.型情報によるディスパッチ機構
>>
>>だと思っています。

別に異論はないですよ。

私が言っているのは、Javaのメソッドオーバーロードは、
「型情報によるディスパッチ機構」ではないということです。

えんどうさんは、少なくとも5年前の時点において、この点について決定的な
誤解をしていたようですが、最近の発言を見ると、どうもいまだに誤解が
解けていないように見えるんですが、大丈夫ですか? 私の思い過ごしならよいのですが。

念のため、昔の議論を再掲します。

****************************************
http://www.javaopen.org/jfriends/mlarchive/msg02354.html
前橋wrote:
| だからといって、drawをShape以外の所に置いてしまうと、
| 
| ・いざ描画するときには、長〜いelse ifの連なりで、いちいち
|   instanceofでクラスを調べるの?
| ということになっちゃいます。これはこれで悲し過ぎます。

http://www.javaopen.org/jfriends/mlarchive/msg02360.html
えんどうさん wrote:
| メソッド・オーバーライドを使って区別するのかもしれません。

http://www.javaopen.org/jfriends/mlarchive/msg02361.html
前橋 wrote:
| draw()をShapeの外に出した場合、メソッドオーバライドが
| *素直には* 使えなくなる、ということを言いたかったのですが。

http://www.javaopen.org/jfriends/mlarchive/msg02362.html
えんどうさん wrote:
|  void draw(Point);
|  void draw(Line);
|  void draw(Curve);
|  void draw(Arc);
|
| こういうのではだめですか。
****************************************

はい、だめです。決定的にだめです。
CLOSならこれでできるわけですが、Javaではだめです。
これでできると(今も)思っているのなら、えんどうさん、Javaのメソッド
オーバーロードを誤解しています。

余談ですが、この続きのやり取りがどうなったかというと、

****************************************
http://www.javaopen.org/jfriends/mlarchive/msg02364.html
前橋 wrote:
| メソッドオーバロード?
|               ^^^^^^
| これは静的なものだったと思うです。

http://www.javaopen.org/jfriends/mlarchive/msg02365.html
えんどうさん wrote:
| > メソッドオーバロード?
|
| あー間違えてた。^^;
****************************************

オーバーライドとオーバーロードを書き間違えるくらいは、よくあるポカ
なので、とやかく言う気はないですが(私もたまにやるし(^^; )、
上記のやり取りを読む限り、どう見ても、えんどうさんはJavaのメソッド
オーバーロードの機能を誤解していたようです。
これは5年以上前の話なので、今現在、誤解が解けているなら別にいいし、
私もこんな大昔の発言をほじくりだすなんて嫌らしいことをしなくて
済むわけですが、最近のえんどうさんの発言を見ても、どうも誤解が
解けているとは思えない。そうでなきゃ、

>> 2.型情報によるディスパッチ機構

こんな話をしているときに、メソッドオーバーロードは持ち出さないはずです。

------------------------------------------------------------
  前橋 和弥                        PXU00211@xxxxxxxxxxx
                                   http://kmaebashi.com
------------------------------------------------------------