系列文章
[UML]UML系列——用例圖中的各種關系(include、extend)
[UML]UML系列——類圖class的關聯關系(聚合、組合)
接口的概念
接口是一組沒有實現的操作的集合。接口只提供操作的聲明,不提供任何相應的功能代碼。具體的功能代碼由使用該接口的類實現,這叫做實現關系。
一般意義的操作:
1 public void turnUp() 2 { 3 Console.WriteLine("{0}風扇加速轉動",name); 4 }
沒有實現的操作:
1 public void turnUp();
c#中定義接口的方法
[可見性] interface 接口名{[返回值類型] 方法名([參數]);}
- 接口中只能包含方法、屬性、索引器和事件的聲明,沒有字段和構造函數。
- 接口中的操作都被視為公有的,不需要添加可見性。
- 接口中只能提供方法的格式聲明,而不能包含方法的實現,所以接口方法的聲明總是以分號結束。
接口的符號
例如:
1 public interface turn //開關 2 { 3 void turnUp(); 4 void turnDown(); 5 }
接口的實現
接口中聲明的方法的真正實現是由類來完成的,類必須實現該接口中所定義的所有方法。一個接口可以由多個類來實現,而在一個類也可以實現一個或多個接口。
1 class 類名:接口名列表 2 { 3 …… 4 }
提示:要實現接口,必須在類名后包括接口,然后提供接口的每一個成員的實現。
注意:觀察上例中接口成員和類中相應的實現的訪問類型的寫法,在接口成員的聲明中不需要任何訪問修飾符,而在類中相應接口成員實現定義中則都用public修飾符。
接口的作用:
1、接口制定了一組規范,實現接口的所有的類都必須遵守這套規則。
常常遇到這樣的情況,在父類內定義了一個操作,指望它的子類能夠繼承。但這個操作對於父類自身而言,沒有必要編寫任何代碼,有時也實在不知道該編寫什么代碼。這時,我們就不去實現這個操作,接口就是這樣一組操作的集合。
程序演示:

1 public interface animal 2 { 3 void sound(); 4 }

dog1 class dog : animal 2 { 3 public string name; 4 public int legs; 5 public dog(string x, int y) 6 { 7 name = x; 8 legs = y; 9 } 10 public void sound() 11 { 12 Console.WriteLine(name + "的叫聲為:" + "汪汪"); 13 } 14 }

1 class cat : animal 2 { 3 public string name; 4 public int legs; 5 public cat(string x, int y) 6 { 7 name = x; 8 legs = y; 9 } 10 public void sound() 11 { 12 Console.WriteLine(name + "的叫聲為:" + "喵喵"); 13 } 14 }

1 class chick : animal 2 { 3 public string name; 4 public int legs; 5 public chick(string x, int y) 6 { 7 name = x; 8 legs = y; 9 } 10 public void sound() 11 { 12 Console.WriteLine(name + "的叫聲為:" + "咯咯達"); 13 } 14 }

1 class Program 2 { 3 static void Main(string[] args) 4 { 5 animal x; 6 7 x = new dog("小狗", 4); 8 x.sound(); 9 10 x = new cat("小貓", 4); 11 x.sound(); 12 13 x = new chick("小雞", 2); 14 x.sound(); 15 } 16 }
從設計的角度來看,一個項目中有多個類需要去編寫,由於工作量比較大,每個類可能由不同的人進行編寫,比如A程序員去寫Dog類,B程序員去寫Cat類。這兩個類本來沒什么聯系的,可是由於用戶需要他們都實現一個關於“叫”的方法.這就要對他們進行一種約束,讓他們都繼承於animal接口,目的是方便統一管理,也方便調用。
當然了,不使用接口一樣可以達到目的。只不過這樣的話,這種約束就不那么明顯,如果這樣的類還有Duck類等等,比較多的時候難免有人會漏掉這樣方法,所以說還是通過接口更可靠一些,約束力更強一些。(摘自互聯網)
2、保持程序的可擴展性。(例如上面的例子中,如果有其他的動物類..)
3、一個類可以實現多個接口。可以在同一個類中同時實現多個接口,即實現多重繼承。要實現多個接口,需將這些接口用逗號分開。
程序演示:模擬手機即可打電話又可以視頻電話
1 public interface IPhone 2 { 3 void call(); 4 }
1 public interface IVideo 2 { 3 void show(); 4 }
實現接口:
1 class visualPhone:IPhone,IVideo 2 { 3 private string phoneName,videoName; 4 public visualPhone(string name1,string name2) 5 { 6 phoneName = name1; 7 videoName = name2; 8 } 9 public void call() 10 { 11 Console.WriteLine("{0}開始通話",phoneName); 12 } 13 public void show() 14 { 15 Console.WriteLine("{0}開始視頻",videoName); 16 } 17 }
控制台程序:
1 class Program 2 { 3 static void callShow(IPhone x,IVideo y) 4 { 5 x.call(); 6 y.show(); 7 } 8 9 static void Main(string[] args) 10 { 11 IPhone m = new visualPhone("步步高", ""); 12 IVideo n = new visualPhone("", "西門子"); 13 callShow(m, n); 14 } 15 }
對應的類圖:
接口的特點
接口中只能包含方法、屬性、索引器和事件的聲明,沒有字段和構造函數和析構函數、不能直接被實例化。接口不能自己實現其操作,而是由相應的類來實現。一個類可以實現多個接口。
對象圖(Object Diagram)
對象是類的實例,對象圖也可看作是類圖的實例。
對象圖與類圖的關系
對象圖實質上是類圖的實例,主要用於了解系統在某個特定時刻的具體情況,以求發現類圖中的錯誤,進而修正類圖。
對象的符號
與類的圖形相似,但有如下區別:
1、對象只有名稱和屬性兩個分欄,沒有操作分欄。
2、對象的名稱要加下划線
3、對象的屬性應有具體的值。(例如上面的對象圖)
對象名的三種格式
對象圖的組成
提示:對象圖沒有多重性,因為所有的鏈都是一對一的。
總結
關於類圖的相關到這里已經算是結束了,下面將總結包圖.....