Visual Basic で○○を作ってみよう。その1。 - とりあえずやってみたらええやん。-
Visual Basic で○○を作ってみよう。その2。 - クラスとかつくってみたらええやん。-
Visual Basic で○○を作ってみよう。その3。 - クラスとかつくってみたらええやん。その2。-
Visual Basic で○○を作ってみよう。その4。 - 基本クラスとか派生クラスとかつくってみたらええやん。-
いやぁ、その5ですね。だからなにってワケでもないんですけどね(だったら書くなよ)。 今回は「インターフェイス」です。わたしと「えー、インターフェイスってなにー?」な人のための参考リンク↓
MSDN:Visual Basic におけるインターフェイス(http://msdn2.microsoft.com/ja-jp/library/28e2e18x(VS.80).aspx)
・・・リンク先を見てきても、正直ピンとこない私ですが、おっきぃ文字でいきましょう。「インターフェイス」を作るとは、つまり・・・
約束することです。(なんだかなー。
そういえば、前回のエントリのコメント欄にて
生徒1「先生!UFO も Fly を実装してます!鳥でOKですか?だって、UFO の F はFlyingですよね?」
こんなこと言ってるかわいい生徒さんがいましたね♪ では、UFO クラスを作ってみましょう。UFO クラスはひゅんひゅん飛びます。Fly メソッドを実装ですね。
って、この UFO クラス、Bird クラスから派生させて作るんですか・・・?そりゃあ、UFOだって飛びますよ?でもね、鳥をモデルにした Bird クラスの派生クラスじゃ、
UFO は鳥になってしまうでわないかぃ!
これはおかしいですよ!私の中ではUFOは鳥じゃないですもの。コードにしてみましょうか。
Public Class UFO
Inherits Bird
Public Overrides Sub Fly()
End Sub
End Class
あらら・・・なんともいえない感情がこみ上げてきますね。やっぱり・・・UFOは鳥じゃないですよ。なので Bird クラスから継承せずに、素直にUFO クラスを作りましょうね。
あ、ところで、UFOってなんの略語か知ってます?「Unidentified Flying Object」だそうですよ。未確認な飛行する物体ですね。つまり未確認な物体であり、飛行する物体であると。ってことはこんな感じ↓ですね。
Public Class UFO
Public ReadOnly Property IsUnidentified() As Boolean
Get
Return True
End Get
End Property
Public Sub Fly()
End Sub
End Class
はい、UFO クラスです。
さて、今回UFO クラスを作るときにも飛ぶ という振る舞いに着目しましたよね?ここで、前回の継承という考え方でコネコネ考えると、鳥でもない、UFOでもないけど、ただただ飛ぶモノからの継承が浮かんできませんか?つまり、ただ飛ぶだけのクラス↓
Public MustInherit Class FlyingObject
Public MustOverride Sub Fly()
End Class
があって、Bird クラスもUFO クラスもそれらを継承すると。こんな感じですね↓
Public Class UFO
Inherits FlyingObject
Public ReadOnly Property IsUnidentified() As Boolean
Get
Return True
End Get
End Property
Public Overrides Sub Fly()
End Sub
End Class
Public MustInherit Class Bird
Inherits FlyingObject
Public MustOverride Overrides Sub Fly()
End Class
おおっ!UFOが鳥だとかワケわかんないことになっていた先ほどのコードよりしっくりきます♪じゃ、これでいきましょうか!って、あ、そういえば!!(わざとらしい)さっきUFOって「Unidentified Flying Object」の略語だって書きましたよね?ってことは・・・
UnidentifiedObject クラスも継承してなくちゃおかしいんじゃね?
・・・ですよね。あやうく終わってしまうところでした。(あぶないあぶないw
飛んでなきゃいけないわけぢゃない、ただただ未確認なモノからの継承が浮かんできませんか?つまり、ただ未確認なだけのクラスですね。というわけで、UnidentifiedObject クラスを作りましょうか。
Public Class UnidentifiedObject
Public ReadOnly Property IsUnidentified() As Boolean
Get
Return True
End Get
End Property
End Class
さぁ!UnidentifiedObject クラスができましたよ♪UFO クラスはこれも継承しましょうか~!って、ちょっと!ちょっとちょっと!!これ↓見てくださいよ!
MSDN:継承の基本(http://msdn2.microsoft.com/ja-jp/library/c8shwxa5(VS.80).aspx)
多重継承をサポートしている言語もありますが、Visual Basic がサポートしているのは単一継承だけです。したがって、派生クラスの基本クラスは常に 1 つだけです。クラスでは多重継承することはできませんが、複数のインターフェイスを実装することはできます。複数のインターフェイスを実装すると、多重継承と同様の結果が得られます。
継承できないぢゃん!
う~む。どうやらVisual Basicでは複数のクラスを継承すること(多重継承)はできないようですね。UFO クラスはすでにFlyingObject クラスを継承しています。残念・・・。でも、さっきの引用文をよく見ると・・・
多重継承をサポートしている言語もありますが、Visual Basic がサポートしているのは単一継承だけです。したがって、派生クラスの基本クラスは常に 1 つだけです。クラスでは多重継承することはできませんが、複数のインターフェイスを実装することはできます。複数のインターフェイスを実装すると、多重継承と同様の結果が得られます。
・・・これだッ!
と、ここまできたところでなんだか長くなってきたので次回に続きますね。(結局インターフェイス作ってないーw