Visual Basic OOP Part 2 -- 介面

介面(Interface)就像類別,可定義屬性、方法和事件集。但與類別不同的是,介面並不提供實作。介面是由類別實作,並定義為與類別不同的實體。介面就代表著一種合約,因為實作介面的類別必須完全依介面的定義來實作這個介面的各個方面。介面不能包含任何實作程式碼或與實作程式碼相關的陳述式

介面比較像我們常說的「原則」,它只給你一個骨架、一個大方向、一個目標、一個指示。它比較像老闆,站在台上喊衝、衝、衝,但下面怎麼業務怎麼達成業績就憑本事。一樣的口號、方針、目標,有人可以賺到年薪千萬、百萬,也有人只有數萬。

從程式面來看,先定義IAsset(資產)介面

Interface IAsset
    ' 完成變更事件
    Event ComittedChange(ByVal Success As Boolean)
    ' 部門屬性
    Property Division() As String
    ' 取得方法
    Function GetID() As Integer
End Interface

然後我們透過類別來實作此介面,

Class PersonComputer
    Implements IAsset

    Public Event ComittedChange(ByVal Success As Boolean) _
       Implements IAsset.ComittedChange

    ' 實作部門屬性
    Private divisionValue As String
    Public Property Division() As String Implements IAsset.Division
        Get
            Return divisionValue
        End Get
        Set(ByVal value As String)
            divisionValue = value
            ' 當我修改部門,引發事件
            RaiseEvent ComittedChange(True)
        End Set
    End Property

    ' 回傳資產ID
    Private IDValue As Integer
    Public Function GetID() As Integer Implements IAsset.GetID
        Return IDValue & "PC"
    End Function
    
    ' 建構式
    Public Sub New(ByVal Division As String, ByVal ID As Integer)
        Me.divisionValue = Division
        Me.IDValue = ID
    End Sub
End Class

Class ServerComputer
    Implements IAsset

    Public Event ComittedChange(ByVal Success As Boolean) _
       Implements IAsset.ComittedChange

    ' 實作部門屬性
    Private divisionValue As String
    Public Property Division() As String Implements IAsset.Division
        Get
            Return divisionValue
        End Get
        Set(ByVal value As String)
            divisionValue = value
            ' 當我修改部門,引發事件
            RaiseEvent ComittedChange(True)
        End Set
    End Property

    ' 回傳資產ID
    Private IDValue As Integer
    Public Function GetID() As Integer Implements IAsset.GetID
        Return IDValue & "Server"
    End Function
    
    ' 建構式
    Public Sub New(ByVal Division As String, ByVal ID As Integer)
        Me.divisionValue = Division
        Me.IDValue = ID
    End Sub
End Class

透過資產這個介面,我們實作了兩個類別,個人電腦類別及伺服器類別。只要實作介面的類別,就必須照介面的原則走,該有的屬性、方法、事件,一個也不能少。但實作出來內容程式碼,就依各個類別的需求下去實作。例如,我們在回傳ID時,個人電腦將在ID後面加上PC,伺服器則加上Server,當我看到ID時,我就能立即知道這台是個人電腦還是伺服器。

最前面有提到,介面就代表著一種合約,合約不可能是事後才來訂,都是事先規劃好,而且是大方向的規劃。舉例來說,一份網站開發的合約,只會談大方向、主功能、次功能、進度的獎懲、驗收標準,頂多再限定平台及開發語言等。不太可能把程式怎麼寫,變數怎麼定…等實作細節全部寫進去「合約」。我們只要照合約來走,實作出你所需要的網站即可。

沒有留言:

張貼留言

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。