ポリモーフィズム VB2005

VB Tips And Sample(HOME)(VB.NET Sample インデックス)

ポリモーフィズム VB2005

ポリモーフィズムは、多様性と訳される。

わかりやすく、例えて言えば、

一国の王様候補(王子達)がいて、
誰が王様になっても基本的な仕事はしてくれる=基本的な機能はある
けど、
王子達それぞれ、ちょっと違うところ(個性)もありますよ!
という話になる。
この話の王様、王子達をプログラムのクラスで実現したのが下記の例。
要するに、クラスの活用法の一つです。

実装方法には、インターフェイスを使ったもと、継承を使ったものとある。
クラスについては、「VB2005 Class」を参照して欲しい。
インターフェイスは外部DLL、すなわちプラグイン機能などにも応用できる。
継承は、親の機能を継承できるので、ポリモーフィズムといえば、まあこちらを使う事になるのでは?と思います。

Public Class Form1



    '------------------------------------------------------------------
    'インターフェイス(クラスの設計図)を使ったポリモーフィズム(多様性)
    'インターフェイス家の寓話
    'あるのは家訓だけ。
    'ごりごりと、全て自分でやりなさい!
    '成功すれば、いつでも叩き上げの殿様になれます!
    Public Interface MyInterface
        'これが設計図となる
        'このインターフェイスを使用して、つまり窓口にして、
        '色々な機能=(VBMsg、mCalcu、の中身を実装したクラス)をとっかえひっかえ使用できるようになる。
        Sub VBMsg(ByVal moji As String)
        Function mCalcu(ByVal x As Integer) As Integer

    End Interface

    Public Class Poly1
        Implements MyInterface

        Public Function mCalcu(ByVal x As Integer) As Integer Implements MyInterface.mCalcu
            '単に100倍する計算
            Return x * 100 '100倍にできました!
        End Function

        Public Sub VBMsg(ByVal moji As String) Implements MyInterface.VBMsg
            MessageBox.Show(moji & "単に100倍する計算", "新機能でもないけど新機能です。", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End Sub
    End Class
    Public Class Poly2
        Implements MyInterface

        Public Function mCalcu(ByVal x As Integer) As Integer Implements MyInterface.mCalcu
            '単に1000倍する計算
            Return x * 1000 '1000倍にできました!
        End Function

        Public Sub VBMsg(ByVal moji As String) Implements MyInterface.VBMsg
            MessageBox.Show(moji & "単に1000倍する計算", "新機能でもないけど新機能です。", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End Sub
    End Class

    Sub UsePoly(ByVal Myin As MyInterface, ByVal str As String, ByVal int As Integer)

        Myin.VBMsg(str)
        Debug.WriteLine(Myin.mCalcu(int))
    End Sub

    Sub TestUsePoly()
        '成功すれば、いつでも叩き上げの殿様になれます!
        'はたしてどちらが・・・・?
        Dim in1 As New Poly1
        Dim in2 As New Poly2
        Call UsePoly(in1, "一個目", 5)
        Call UsePoly(in2, "二個目", 5)
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        '実際に使ってみましょう!
        TestUsePoly()
    End Sub


    '--------------------------------------------
    '継承(親の七光)を使ったポリモーフィズム(多様性)
    '継承王国の寓話。
    '昔々「継承王国」に王様と、二人の王子が居ました。
    '二人の王子は消費税について全く違った意見を持っていました。
    '国民はどちらがなっても、すぐに交代できるように、かつ
    '王様が今まで持っていたものはそのまま使えるようにと、願いました。
    Public Class Oya
        Overridable Function mCalcu(ByVal x As Integer) As Integer
            Return x * 0.05 '親(王様)は消費税5パーセントに設定していましたが・・・
        End Function

        Overridable Sub VBMsg(ByVal moji As String)
            MessageBox.Show(moji & "これは別段いじらなくても子は誰でも使える", "新機能でもないけど・・・", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End Sub
    End Class

    Public Class Ko1
        Inherits Oya
        Overrides Function mCalcu(ByVal x As Integer) As Integer
            Return x * 0.09 '第二王子は消費税を9パーセントまで上げます。
        End Function
    End Class

    Public Class Ko2
        Inherits Oya
        Overrides Function mCalcu(ByVal x As Integer) As Integer
            Return x * 0.03 '第一王子は消費税を3パーセントまで下げます。
        End Function
    End Class

    Sub UseKo(ByVal cl As Oya, ByVal str As String, ByVal x As Integer)
        '国の法律では、どちらの王子が王様になってもよい事になっています。
        cl.VBMsg(str)
        Debug.WriteLine(cl.mCalcu(x))
    End Sub

    Sub TestUseko()
        '国民は、どちらの王子を王様とするか、テストすることにしました。
        'また、いつでも交代できるようにしておきました。
        Dim k1 As New Ko1
        Dim k2 As New Ko2

        Call UseKo(k1, "ko1で一行も書かなくても、親の機能だから使えます。", 100)
        Call UseKo(k2, "ko2で一行も書かなくても、親の機能だから使えます。", 100)
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        '実際にやってみましょう!
        Call TestUseko()
    End Sub
End Class




VB6プログラマーのための入門Visual Basic.NET独習講座
商品の詳細、ご購入はここから
VB6プログラマーのための入門Visual Basic.NET独習講座
著者の川俣さんの「継承とポリモーフィズム」についても是非読んで見て欲しい。
意外と知らないことがあり、勉強になります。

しかし、残念ながらAmazonには中古本(高い!)しかないようです。
とてもいい本なのに残念。
図書館で探すのも手です。