- - PR -
インターフェイスのメリット
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-11-05 08:37
unibon です。こんにちわ。
ちょっと私は用語がうろ覚えなのですが、例としてあげられた SortedSet は、「多重実装」の例ではないと思うのですが、どうでしょうか。多重実装とは、
のように Hoge が Foo と Bar の2つを implements できる、ということではないでしょうか? SortedSet は単なる継承の親子関係ではないでしょうか。 Java の interface は、妥協の産物だと思います。あまりまとまっていませんが、私はつぎのように考えています。 interface は、本来は使わないほうが良いものです。基本的には class を extends してクラスの階層構造を作れば良いです。しかし、interface がないと、クラス構造を厳密に設計しないとすぐに行き詰まってしまいます。そういうときに interface があると、思い付きで後付けで気軽にメソッドを追加でき、そのメソッドの名前解決もいわゆるアーリーバインドででき、ソースコードのコンパイル時に名前解決が完了でき、実行速度も犠牲にならずに済む。 しかし、interface を多用すると、それを implements している class は雑多になってしまい、キレイさがなくなってしまう。 | ||||||||
|
投稿日時: 2004-11-05 09:29
unibon です。
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 であっても同じことです。 巷の、ワンと鳴く、ニャアと鳴く、のような例を書こうとしたのですが、ちょっと思い付きませんでした。 |