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