Java の Interface

私が初めて Java という物を知ったとき、盛んに多重継承の危険さばかり説かれていて、まるで goto文のように有害 だとされて、これからの時代は単一継承と 多重継承を安全に去勢した Interface で決まりだ! なんて説明がされていた記憶があります。

そのころは OO にも(むしろプログラミングにも)詳しくなくて、「ふーん」と受け流していたのですが、どうやらそういうものではないらしい。

OOPを自分のものにし始めてからの私の中での Java の Interface の認識は、Ruby の Mix-in 同様の、それ自体に概念としての新規性のあるわけではないけれど、良い設計(スタイル)を言語が強制するたぐいのもの。別に無くてもちゃんとできる人は困らないけれど、あると良いもの。Interface 的な概念はもっと前からあったもの。だから、最初の私のエントリーに対して

例えばInterfaceなどというものはJava以前には,まず存在しなかった.兼ねるも何もない.

とあったとき、ビックリしました。Class と継承 の Interface 的使い方までもJava が突如発明した or そもそもそういうものとは「別のもの」である、と主張していると読み取れたからです。


これについては、

Java以前にも Class と 継承の インターフェイス的使い方はあったと思うし、だからいろんな言語が実装していても不思議ではないと思っています。

これはYESだと思います.

と おっしゃっているので、単なる誤解でした。実は「Interface は そういったものではない、貴様らに 真の Interface の姿を見せてやる」的な展開を期待してちょっとワクワクしていただけに少々がっかりしていますw。(←なんて勝手な)


ただし,「インターフェース的使い方があった」ことと,「インターフェースが(機能として)あった」こととは別問題です.

「Interface の新規性」についての話は、Intefece 的概念の新規性ではなく Interface機構の新規性の話であったわけで、そちらについては大変申し訳ないのだけれど私自身の興味は前者ほど強くありません。が、大切なことだとも思います。これは JavaBlack さんの言うとおりプログラミング言語史の専門家(sumimさんみたいなw)にお任せするのがベターかも。

(これは みずしまさんの紹介された Sather がそれぽいし、そうだからといって、この概念を敷衍させた Java の功績が薄れるわけでもないし)


ただ、Interface について、

Objective-Cよりヒントを得た」ということもあるかもしれないし,「他の全く別の機能からヒントを得た」ということもあるかもしれないし,「全く独自に閃いた」ということもあるかもしれない.

については、真相がどれにしたって、いかにも言語開発者がしゃべってそうなエピソードだけれど、ごすリンは本当に 何もしゃべっていないのかしら。だとしたらつまらないです。それに Java なんてスーパーメジャーな言語について、こんなのがサクっと捜せないというのも異常なことだとおもいます。まだ20年経ってない話なのに...。


* * *


つまるところ「Java の設計と進化」 みたいな本があれば面白いのに、という話でしかなかったり(^^; (実はある?)