介面(Interface)就像類別,可定義屬性、方法和事件集。但與類別不同的是,介面並不提供實作。介面是由類別實作,並定義為與類別不同的實體。介面就代表著一種
合約,因為實作介面的類別必須完全依介面的定義來實作這個介面的各個方面。介面不能包含任何實作程式碼或與實作程式碼相關的陳述式
介面比較像我們常說的「原則」,它只給你一個骨架、一個大方向、一個目標、一個指示。它比較像老闆,站在台上喊衝、衝、衝,但下面怎麼業務怎麼達成業績就憑本事。一樣的口號、方針、目標,有人可以賺到年薪千萬、百萬,也有人只有數萬。
從程式面來看,先定義IAsset(資產)介面
3 | Event ComittedChange( ByVal Success As Boolean ) |
5 | Property Division() As String |
7 | Function GetID() As Integer |
然後我們透過類別來實作此介面,
04 | Public Event ComittedChange( ByVal Success As Boolean ) _ |
05 | Implements IAsset.ComittedChange |
08 | Private divisionValue As String |
09 | Public Property Division() As String Implements IAsset.Division |
13 | Set ( ByVal value As String ) |
16 | RaiseEvent ComittedChange( True ) |
21 | Private IDValue As Integer |
22 | Public Function GetID() As Integer Implements IAsset.GetID |
27 | Public Sub New ( ByVal Division As String , ByVal ID As Integer ) |
28 | Me .divisionValue = Division |
04 | Public Event ComittedChange( ByVal Success As Boolean ) _ |
05 | Implements IAsset.ComittedChange |
08 | Private divisionValue As String |
09 | Public Property Division() As String Implements IAsset.Division |
13 | Set ( ByVal value As String ) |
16 | RaiseEvent ComittedChange( True ) |
21 | Private IDValue As Integer |
22 | Public Function GetID() As Integer Implements IAsset.GetID |
23 | Return IDValue & "Server" |
27 | Public Sub New ( ByVal Division As String , ByVal ID As Integer ) |
28 | Me .divisionValue = Division |
透過資產這個介面,我們實作了兩個類別,個人電腦類別及伺服器類別。只要實作介面的類別,就必須照介面的原則走,該有的屬性、方法、事件,一個也不能少。但實作出來內容程式碼,就依各個類別的需求下去實作。例如,我們在回傳ID時,個人電腦將在ID後面加上PC,伺服器則加上Server,當我看到ID時,我就能立即知道這台是個人電腦還是伺服器。
最前面有提到,介面就代表著一種
合約,合約不可能是事後才來訂,都是事先規劃好,而且是大方向的規劃。舉例來說,一份網站開發的合約,只會談大方向、主功能、次功能、進度的獎懲、驗收標準,頂多再限定平台及開發語言等。不太可能把程式怎麼寫,變數怎麼定…等實作細節全部寫進去「合約」。我們只要照合約來走,實作出你所需要的網站即可。
沒有留言:
張貼留言
感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。