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

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



前橋です。

反応が遅くなりましたけど。

えんどう さんは書きました:
>ポリモルフィズムともうひとつ、メソッドオーバーロードも含んでいます。
>
>http://www.namikilab.tuat.ac.jp/~sasada/prog/tclos_tutorial.html#i-3

ううむ。
少なくともC++やJavaにおいては、「メソッドオーバーロード」といえば、
引数の型で「コンパイル時に」メソッドを決定するだけですから、
それが「型情報によるディスパッチ」と言えるものかどうか。

また、CLOSのメソッドの選択は実際に実行時に行われるので、
この機能は通常「マルチディスパッチ」と呼ばれているはずで、
見た目は似ているかもしれないけど、Javaのメソッドオーバーロードとは
全く違う機能であると私は考えています。

Javaなどで、

dial.turn(200);

と書くものは、言ってみればCで

dial_turn(dial, 200);

と書くのと似ていますが、Javaでは、「最初の引数」によりメソッドを実行時に
選択できる。逆に言えば、Javaでは実行時のメソッド選択において「最初の引数」
しか見ないから、シングルディスパッチです。

CLOSでは、複数の引数を見てメソッドを選ぶから、マルチディスパッチ。

どちらがよいかはさておき、Javaにはマルチディスパッチは(委譲を使って
間接的に実装しない限り)できない。メソッドオーバーロードとは別物、
と私は考えています。

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