團隊溝通利器之UML——類圖


 

一:用途

     用於描述系統的靜態結構,或許在所有的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規范。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM