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

dav2100發表於2021-09-09

 

一:用途

     用於描述系統的靜態結構,或許在所有的uml圖中,類圖是我們最熟悉不過的,在我們沒有接觸uml的時候,可能都看過

類圖,早在vs2005裡面“解決方案資源管理器”的下邊有一個“檢視類圖”的小圖示,並且還能支援“正向“和”反向“工程。

圖片描述

 

反向工程

  首先我們定義兩個類: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     /// 17     /// 使用者類18     /// 19     public class User20     {21         public string Name { get; set; }22 23         public int Age { get; set; }24 25         public string Sex { get; set; }26     }27 28     /// 29     /// 產品類30     /// 31     public class Product32     {33         public string Name { get; set; }34 35         public DateTime CreateTime { get; set; }36     }37 }

圖片描述

然後我們點選”檢視類圖“,看看給我們生成的類圖是咋樣的。

圖片描述

正向工程

      既然是正向工程,那我們就可以在”類設計器“上面隨便拖一些元素看看效果,細節的大家可以自己玩一玩。

 

二:基本元素

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規範。

圖片描述

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4479/viewspace-2811527/,如需轉載,請註明出處,否則將追究法律責任。

相關文章