一:用途
用於描述系統的靜態結構,或許在所有的uml圖中,類圖是我們最熟悉不過的,在我們沒有接觸uml的時候,可能都看過
類圖,早在vs2005里面“解決方案資源管理器”的下邊有一個“查看類圖”的小圖標,並且還能支持“正向“和”反向“工程。
<1>反向工程
首先我們定義兩個類:User和Product
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace ConsoleApplication1 7 { 8 class Program 9 { 10 static void Main(string[] args) 11 { 12 13 } 14 } 15 16 /// <summary> 17 /// 用戶類 18 /// </summary> 19 public class User 20 { 21 public string Name { get; set; } 22 23 public int Age { get; set; } 24 25 public string Sex { get; set; } 26 } 27 28 /// <summary> 29 /// 產品類 30 /// </summary> 31 public class Product 32 { 33 public string Name { get; set; } 34 35 public DateTime CreateTime { get; set; } 36 } 37 }
然后我們點擊”查看類圖“,看看給我們生成的類圖是咋樣的。
<2> 正向工程
既然是正向工程,那我們就可以在”類設計器“上面隨便拖一些元素看看效果,細節的大家可以自己玩一玩。
二:基本元素
1:類圖,枚舉,接口,抽象類,結構,委托
這幾個元素我想學OO的都已經爛熟於心了,也沒有什么好解釋的。
2:關聯關系
關聯關系一般作為類與類之間的一種強依賴關系,這種關系具有穩定和長期性,比如在C#中的代碼實現為:將一個類作為
另一個類中的屬性,比如這里我新建一個Order類,將User類作為Order類的一個屬性。
先看類圖:
然后看下是否為我們需要的代碼:
3:繼承關系
在OO的三大特性中就有繼承,我們都知道繼承這么個概念,那么在類圖中該如何展現呢?我們發現在User和Product
中都有一個Name屬性,根據OO原則我們需要將Name屬性單獨提出來,然后讓其他類繼承。
下面我們看下生成代碼,是否真如類圖描述一樣,(雙擊)任意類圖即可,嘿嘿,是不是有點意思。
好,到現在為止,在類圖這一塊,我們已經掌握了20%,只要多練習練習即可,當然你可能覺得這些代碼比較死,是的,
實際開發中,我們常會用CodeSmith來解決這些枯燥無味的代碼。
在uml的類圖中還有幾個關系需要表達一下,只不過實際應用比較少而已,好,下面我們看看”建模項目“里面的UML類圖
4:依賴關系
同樣它也是類與類之間的關系,只不過這種關系比較弱,具有臨時性和特定環境下的偶然性,可能大家不是很容易理解,
如果用C#解釋就一目了然了,在代碼中一般是一個類作為另一個類中方法的參數,既然是參數,那么它的生命周期你懂的。
5:聚合關系
在官方文檔中它描述的是一種”has-a“的關系,也就是整體與局部的關系,整體掛了,局部不見得就掛了,比如:你的大功率
電器掛了,不見得里面的電池就掛了,其次我們要注意”空心菱形“是整體端,“箭頭”端是局部端。
6:組合關系
在官方文檔中它描述的是一種”contains-a“的關系,同樣也是表示整體和局部的關系,整體掛了,局部也掛了,因為他們享有
共同的生命周期,比如:你掛了,你的心臟肯定掛了,同樣"實心菱形“是整體端。
下面我們看看稍微復雜一點的”畫圖軟件“的類圖設計,大家也可以看看自己手頭的項目類圖,是否符合OO規范。