- PR -

VB.NETのインターフェイスについて

投稿者投稿内容
カウンター
大ベテラン
会議室デビュー日: 2004/02/19
投稿数: 123
投稿日時: 2004-02-20 10:10
クラスでインターフェイスを実装する必要性がいまいち理解できません。
ヘルプによると
「インターフェイスは、クラスと同様にプロパティ、メソッド、およびイベントのセットを定義します。
ただし、クラスとは異なり、インターフェイスは実装を提供しません。インターフェイスはクラスによって実装され、クラスとは別のエンティティとして定義されます。」
と説明されていますが、クラスにプロパティやメソッドを持たせるのと何が違うのでしょうか?
そもそも、インターフェイスどのような場合に威力を発揮するものなのでしょうか?
よろしくお願いします。
ナキヲ
常連さん
会議室デビュー日: 2003/08/22
投稿数: 32
お住まい・勤務地: 京都・自宅から勤務地まで自転車で40分
投稿日時: 2004-02-20 10:24
.NETフレームワークではクラスの多重継承ができない
仕様になっています。JAVAやObjective-Cもそうです。
C++では可能ですが、メンバ変数にからむ菱形多重継承の問題とかいろいろ
ややこしいことになるらしいです。

というわけで、あるクラスに2つ以上の側面をもたせようと思った場合、
インターフェースという、実装/メンバ変数を持たない切り口を
与える必要があります。

インターフェースについては、下記の本をよむとわかりやすいですよ。
JAVAでかかれていますが考え方の問題なので.NETでも適用できます。
http://www.amazon.co.jp/exec/obidos/ASIN/4797316462/ref=sr_aps_b_/249-7395117-3224325
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-02-20 10:52
引用:

ナキヲさんの書き込み (2004-02-20 10:24) より:
というわけで、あるクラスに2つ以上の側面をもたせようと思った場合、
インターフェースという、実装/メンバ変数を持たない切り口を
与える必要があります。


これはそうなんですけど、ひょっとするとクラスの継承とかの概念からまず理解して、次になぜインターフェイスというものがあるのかと進んだ方がいいかもしれないですね(現状クラス、継承、多態などについて理解不足であれば)。
まあ、継承といっても、実装の継承で理解されると厳しいかもしれませんが…
ナキヲ
常連さん
会議室デビュー日: 2003/08/22
投稿数: 32
お住まい・勤務地: 京都・自宅から勤務地まで自転車で40分
投稿日時: 2004-02-20 11:05
引用:

これはそうなんですけど、ひょっとするとクラスの継承とかの概念からまず理解して、次になぜインターフェイスというものがあるのかと進んだ方がいいかもしれないですね



たしかに。。
少しとばしすぎてるなぁ、と思って結城さんの本に
デリゲートしていました。

とりあえずは、継承によるポリモーフィズムあたりから、、
http://www.atmarkit.co.jp/fdotnet/vb6tonet/vb6tonet19/vb6tonet19_01.html
カウンター
大ベテラン
会議室デビュー日: 2004/02/19
投稿数: 123
投稿日時: 2004-02-20 11:44
ナキヲさん、なちゃさんありがとうございます。
確かに継承についても、深く理解していませんでした。

僕の感覚では、継承は1つのクラスからしか各要素を定義できず、
インターフェイスを使うと一つのクラスから複数のインターフェイスを定義できるくらいに感じていました。

そこで一番素朴な疑問は、なぜインターフェイスには実装を提供せずにただのテンプレートなのかということです。例えば、下記のようなインターフェイスとそれを実装するクラスを作成してみたんですが
この場合には、class3に単なるメソッドとしてoutputMSGを持たせても良いのではないかと思えてしまいます。
結局インターフェイスを実装するということは、各クラスでインターフェイスで定義された
名前を使いまわすということなのでしょうか?


Public Interface interface1
Sub outputMSG(ByVal msg As String)
End Interface

Public Class class3
Implements interface1

Public Sub outputMSG(ByVal msg As String) Implements interface1.outputMSG
Trace.WriteLine(msg)
End Sub
End Class

ん〜、継承のように中身があるものを使いまわすなら、その意義も感じられるのですが。
インターフェイスのように実装先で処理内容を変更できる場合の有効性がいまいちです。
なんだか混乱してきました。
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2004-02-20 11:58
NAL-6295です。

インターフェースは

・ポリモーフィズムの観点に置いて有用という事になります。

でも、これだけの利点だとクラス継承でも一緒だという事になります。

それでは、更に利点をプラスしてみましょう。

・実装したクラスのある側面だけしか見なくてよくなる。もしくは、どの側面を見ているかが分かる。

例を上げると

演劇において、一人二役の登場人物が今どの役を演じているかがわかり、その役についてだけ注目すればいい。

って事です。

ま、つまり使う側から見ると、

・そのクラスが複数の役を持っていたとしても、使用したい役についてしか見なくてすむ。
・後からコードを見たときに、どの役を演じてもらっているかが分かる。

という利点も出てきますね。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-02-20 12:00
 インタフェースは「継承」として考えるのではなく、「多態」として考えればいいかも。VB.NETではInherits、Implementsのように、使用するキーワードが違いますし。私もここに書くときは「クラスの継承」と「インタフェースの実装」というように、言葉を使い分けています。


> 僕の感覚では、継承は1つのクラスからしか各要素を定義できず、
> インターフェイスを使うと一つのクラスから複数の
> インターフェイスを定義できるくらいに感じていました。

 言葉が逆?
<継承は1つのクラスからしかできないが、複数のインタフェースを実装できる>
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-02-20 12:10
引用:

カウンターさんの書き込み (2004-02-20 11:44) より:
ん〜、継承のように中身があるものを使いまわすなら、その意義も感じられるのですが。
インターフェイスのように実装先で処理内容を変更できる場合の有効性がいまいちです。


あああ、私が先に書いた、
> まあ、継承といっても、実装の継承で理解されると厳しいかもしれませんが…
って所ではまってる気がする…
インターフェイスの継承(ここでいうインターフェイスとは、Javaや.NETにおけるインターフェイス機能のことではなく、一般的な意味合いです)というようなキーワードで理解する方が良いかもです…。

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