とりこらぼ。

Learn from yesterday,
live for today,
hope for tomorrow.

目次

Blog 利用状況

ニュース

プロフィール

  • 名前:とりこびと
    とるに足らない人間です。

  • Wankuma MVP
    for '平々凡々'

Web Site

  • Memo(Of T)

もうひとつの Blog

広告っぽい

書庫

日記カテゴリ

Visual Basic で○○を作ってみよう。その5。 - インターフェイスとかつくってみたらええやん。その1。-

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

投稿日時 : 2007年5月8日 17:09

Feedback

# re: Visual Basic で○○を作ってみよう。その5。 - インターフェイスとかつくってみたらええやん。その1。- 2007/05/08 17:22 とっちゃん

UFOキタ━━━━━━(゚∀゛)~~~~~???
あ、あれ?おわっちゃった...w
wktkしてまてとw

# re: Visual Basic で○○を作ってみよう。その5。 - インターフェイスとかつくってみたらええやん。その1。- 2007/05/08 17:42 とりこびと

とっちゃん さん、コメントありがとうございます。

>UFOキタ━━━━━━(゚∀゛)~~~~~???

ふふ♪実に筆が進みますww
さすが確信犯w

>あ、あれ?おわっちゃった...w
>wktkしてまてとw

あんまし一気にやってもしんどいだけでしょうw(←私が

# re: Visual Basic で○○を作ってみよう。その5。 - インターフェイスとかつくってみたらええやん。その1。- 2007/05/08 17:43 とりこびと

さて、

そもそも Object クラスからの派生は云々・・・

って書き込んでくれる人、挙手!

# re: Visual Basic で○○を作ってみよう。その5。 - インターフェイスとかつくってみたらええやん。その1。- 2007/05/08 17:49 ぽぴ王子

> UFOってなんの略語か知ってます?「Unidentified Flying Object」だそうですよ

え、うまい!ふとい!おおきい!の略じゃなかったでしたっけ?
(それは日清焼そばの方です)

ということで、Yakisoba クラスも継承しておいてください(うそ
そんでもって、IsCanFly プロパティに False を返してください。

ついでに言うと IsCanFly プロパティに True を返す Kubozuka クラスをうわなにをするやめr(ry

# re: Visual Basic で○○を作ってみよう。その5。 - インターフェイスとかつくってみたらええやん。その1。- 2007/05/08 18:25 とりこびと

ぽぴ王子さん、コメントありがとうございます。

>え、うまい!ふとい!おおきい!の略じゃなかったでしたっけ?

>ということで、Yakisoba クラスも継承しておいてください(うそ
>そんでもって、IsCanFly プロパティに False を返してください。

名前空間がちがうんですよw
http://d.hatena.ne.jp/torikobito/20070508/p2

>ついでに言うと IsCanFly プロパティに True を返す Kubozuka クラスをうわなにをするやめr(ry

よーし、Torikobito クラスでKubozuka クラスをうわなにをするやめr(ry

# re: Visual Basic で○○を作ってみよう。その5。 - インターフェイスとかつくってみたらええやん。その1。- 2007/05/08 19:25 ぽぴ王子

せんせー!
Bird クラスと UFO クラスは名前空間が同じなんですか?
飛ぶから同じ名前空間なんダスか?
Plane クラスも同じ名前空間なんダスか?
じゃあ Penguin クラスはどうなんダスか?
Kubozuka クラスは?(またか)
河相我聞と川合俊一では、どっちなんダスか?

# OH!スーパーミルクチャンの大統領ネタなのだが
# あまりにディープすぎて誰もついて来れなさそうな悪寒

# re: Visual Basic で○○を作ってみよう。その5。 - インターフェイスとかつくってみたらええやん。その1。- 2007/05/08 23:01 シャノン

> え、うまい!ふとい!おおきい!の略じゃなかったでしたっけ?
> (それは日清焼そばの方です)

…そうだったんだ

# re: Visual Basic で○○を作ってみよう。その5。 - インターフェイスとかつくってみたらええやん。その1。- 2007/05/09 9:13 とりこびと

コメントありがとうございます。

>>ぽぴ王子さん

>Bird クラスと UFO クラスは名前空間が同じなんですか?

あ・・・語弊があるダスね。

>飛ぶから同じ名前空間なんダスか?

ではないんダス。

>Plane クラスも同じ名前空間なんダスか?

でもいいんダス。

>じゃあ Penguin クラスはどうなんダスか?

まだわかんないんダス。

>Kubozuka クラスは?(またか)

NameSpace わんくまお笑い同(ry ダス。

>河相我聞と川合俊一では、どっちなんダスか?

私的には河相我聞ダス。

># あまりにディープすぎて誰もついて来れなさそうな悪寒

悪寒的中ダス。



>>シャノン さん

>…そうだったんだ

そうだったんダス。

# re: Visual Basic で○○を作ってみよう。その5。 - インターフェイスとかつくってみたらええやん。その1。- 2007/05/10 22:39 Jitta

どうして "IsUnidentified" なんだろう?
"IsIdentified" でもいいじゃん?
"Public Function Identify() As Type" にして、Nothing を返すとか?
つか、鳥でも、それが何かを認識していなかったら UFO やん。とか思ったそうな。

# re: Visual Basic で○○を作ってみよう。その5。 - インターフェイスとかつくってみたらええやん。その1。- 2007/05/11 8:57 とりこびと

Jittaさん、コメントありがとうございます。

>どうして "IsUnidentified" なんだろう?

多分、ここってたくさんの方が「ん?」って思われたと思います。

否定的な内容かどうかをあらわすプロパティ名(またはメソッド名)の是非ですよね。

あんましやらないことなんでしょうか?
たとえば、プロジェクト全体が「未確認かどうかのチェック」を前提としていたら、

If Not obj.IsIdentified Then

または、

If obj.IsIdentified = False Then

ではなく、

If obj.IsUnidentified Then

って、書いてもいいんじゃないかと思うんです。
# .NET Framework では、あんまり見かけないかも・・・。

それでもやっぱりIsIdentifiedですか?

あ、
>"IsIdentified" でもいいじゃん?
ってことは「必ず、IsIdentified」ってご意見ではないのですか?

そもそもこのクラスのおかれている状況があいまいなのですね。
すみませんです。m(_ _)m


だいぶボロが出てきましたね。。。

# ヤフオク ロレックス コンビ 2023/03/09 23:55 lngcgdhiln@ocn.ne.jp

とても迅速丁寧で
素晴らしいと思います。
お振り込みしたら
すぐお返事が来て
その日の内に
発送して下さいました!
商品は、まだですが
とても素敵なショップさんなので
先にショップレビューだけさせて頂きました。
また何か購入したいと思います。
ヤフオク ロレックス コンビ https://www.gmt78.com/product/detail/3830.htm

タイトル
名前
Url
コメント