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

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



 えんどうです。

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

CLOS ではメタオブジェクトプロトコル(MOP)というものが使え、
オブジェクトシステムそのものをプログラミングの対象にできます。
つまり、プログラマーが CLOS の機構そのものを作ったり、
改造したりすることができます。

また、MOPが使えない Lisp処理系でも、
型情報によるディスパッチを「型タグ」を使って独自に実装しても良いのです。

(「計算機プログラムの構造と解釈第二版」2章の汎用計算のあたり参照)

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

Javaはそれ自身のオブジェクトシステムをプログラマーがいじれないし、
this は暗黙のうちに渡されるので異なるように感じられますが、
CLOS の総称関数(gereric fanction)の考え方に慣れると、
両者にさほどの違いがないことが分かります。

# 前橋さんはおそらく実装にこだわりがおありと思いますが...

-- 
ENDO Yasuyuki <yasuyuki@xxxxxxxxxxxx>
http://www.javaopen.org/~yasuyuki/
http://www.javaopen.org/jfriends/