- PR -

インターフェイスのメリット

投稿者投稿内容
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2004-11-05 08:37
unibon です。こんにちわ。

引用:

YOUさんの書き込み (2004-11-04 21:34) より:
それだけのメリットならばインターフェイス多重実装ってそんなに必要ないのでは。
(インターフェイスはなにもできないため)

たとえばcollectionクラスは

collection(クラス)
−set(インターフェイス)
−−sortedset(インターフェイス)

となっているようですが、なにか意味があるのでしょうか?


ちょっと私は用語がうろ覚えなのですが、例としてあげられた SortedSet は、「多重実装」の例ではないと思うのですが、どうでしょうか。多重実装とは、
コード:
class Hoge implements Foo, Bar {
    ....
}


のように Hoge が Foo と Bar の2つを implements できる、ということではないでしょうか?
SortedSet は単なる継承の親子関係ではないでしょうか。

Java の interface は、妥協の産物だと思います。あまりまとまっていませんが、私はつぎのように考えています。
interface は、本来は使わないほうが良いものです。基本的には class を extends してクラスの階層構造を作れば良いです。しかし、interface がないと、クラス構造を厳密に設計しないとすぐに行き詰まってしまいます。そういうときに interface があると、思い付きで後付けで気軽にメソッドを追加でき、そのメソッドの名前解決もいわゆるアーリーバインドででき、ソースコードのコンパイル時に名前解決が完了でき、実行速度も犠牲にならずに済む。
しかし、interface を多用すると、それを implements している class は雑多になってしまい、キレイさがなくなってしまう。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2004-11-05 09:29
unibon です。

引用:

YOUさんの書き込み (2004-11-04 21:34) より:
collection(クラス)
−set(インターフェイス)
−−sortedset(インターフェイス)


Collection と Set を見比べると、私はいままで気づいていませんでしたが、両者のメソッドの数や名前が同じですね。このあたりの重複は
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=7753&forum=12
の話題に近いのではないかと思います。
一方、Set と SortedSet の関係は、Set をより多機能化(?)したものが SortedSet という位置付けだと思います。たとえば SortedSet には comparator メソッドがありますが、Set にはありません。このあたりの仕組みは interface でも class でも違いはなく、とくに interface だからどうこうということはないでしょう。abstract class であっても同じことです。
巷の、ワンと鳴く、ニャアと鳴く、のような例を書こうとしたのですが、ちょっと思い付きませんでした。

スキルアップ/キャリアアップ(JOB@IT)