產品經理的必備技能之一是畫UML圖,本文就告訴你怎麼畫標準的類圖吧。本文結合網絡資料和我的心得所成,不當之處,請多指教。程序員
咱們作項目的需求分析,最開始每每獲得的是一堆文字,請看下面這堆文字:編程
本項目是在一期的基礎上增長對電纜、通信工程的管理和施工詳細數據的記錄和統計,使整個系統更好的管理各工程項目從中標開始到竣工驗收的所有過程和資料和分析施工過程的數據。 本系統將一條或一個標段的架空電力線路工程定爲一個單位工程,即系統中的一個工程項目;每一個單位工程分爲若干個分部工程;每一個分部工程分爲若干個分項工程;每一個分項工程中又分爲若干相同單元工程。網絡
這是關於系統狀況的一段概述,裏面充斥了大量的術語、概念,若是你不是專業人士,恐怕難以讀懂上述文字。架構
項目初期,咱們每每對業務一無所知,咱們最急迫須要解決的問題就是理清楚這些業務概念以及它們的關係,若是能用好類圖,你將能深刻地剖析系統業務。工具
用下面這個UML圖來描述是否清晰了許多呢?編碼
在上圖中,各個類之間是關聯關係,也就是擁有的關係。spa
類圖(Class diagram)主要用於描述系統的結構化設計。類圖也是最經常使用的UML圖,用類圖能夠顯示出類、接口以及它們之間的靜態結構和關係。設計
使用工具:Visio或者processon在線做圖 在類圖中一共包含了如下幾種模型元素,分別是:類(Class)、接口(Interface)以及類之間的關係。 2.1 類(Class) 在面向對象(OO) 編程中,類是對現實世界中一組具備相同特徵的物體的抽象。code
2.2 接口(Interface) 接口是一種特殊的類,具備類的結構但不可被實例化,只能夠被實現(繼承)。在UML中,接口使用一個帶有名稱的小圓圈來進行表示。2.三、類圖中關係(relation) 在UML類圖中,常見的有如下幾種關係: 泛化(Generalization), 實現(Realization),關聯(Association),聚合(Aggregation),組合(Composition),依賴(Dependency) 1. 泛化(Generalization) 【泛化關係】:是一種繼承關係,表示通常與特殊的關係,它指定了子類如何特化父類的全部特徵和行爲。 例如:老虎是動物的一種,即有老虎的特性也有動物的共性。 【箭頭指向】:帶三角箭頭的實線,箭頭指向父類cdn
2. 實現(Realization) 【實現關係】:是一種類與接口的關係,表示類是接口全部特徵和行爲的實現. 【箭頭指向】:帶三角箭頭的虛線,箭頭指向接口 3. 關聯(Association) 【關聯關係】:是一種擁有的關係,它使一個類知道另外一個類的屬性和方法;如:老師與學生, 丈夫與妻子關聯能夠是雙向的,也能夠是單向的。 雙向的關聯能夠有兩個箭頭或者沒有箭頭,單向的關聯有一個箭頭。 【代碼體現】:成員變量 【箭頭及指向】:帶普通箭頭的實心線,指向被擁有者 上圖中,老師與學生是雙向關聯,老師有多名學生,學生也可能有多名老師。 但學生與某課程間的關係爲單向關聯,一名學生可能要上多門課程,課程是個抽象的東西他不擁有學生。 下圖爲自身關聯: 4. 聚合(Aggregation) 【聚合關係】:是總體與部分的關係,且部分能夠離開總體而單獨存在。 如車和輪胎是總體和部分的關係,輪胎離開車仍然能夠存在。 聚合關係是關聯關係的一種,是強的關聯關係;關聯和聚合在語法上沒法區分,必須考察具體的邏輯關係。 【代碼體現】:成員變量 【箭頭及指向】:帶空心菱形的實心線,菱形指向總體5. 組合(Composition)
【組合關係】:是總體與部分的關係,但部分不能離開總體而單獨存在。
如公司和部門是總體和部分的關係,沒有公司就不存在部門。
組合關係是關聯關係的一種,是比聚合關係還要強的關係,
它要求普通的聚合關係中表明總體的對象負責表明部分的對象的生命週期。
【代碼體現】:成員變量
【箭頭及指向】:帶實心菱形的實線,菱形指向總體
複製代碼
6. 依賴(Dependency)
【依賴關係】:是一種使用的關係,即一個類的實現須要另外一個類的協助,
因此要儘可能不使用雙向的互相依賴.
【代碼表現】:局部變量、方法的參數或者對靜態方法的調用
【箭頭及指向】:帶箭頭的虛線,指向被使用者
複製代碼
各類關係的強弱順序: 泛化 = 實現 > 組合 > 聚合 > 關聯 > 依賴 下面這張UML圖,比較形象地展現了各類類圖關係:
類圖繪製的要點
軟件在分析與設計兩個階段各自會繪製一套UML類圖,並且是由分析師和設計師兩個不一樣的角色繪製的。那麼這兩套UML類圖有什麼異同呢?下面將解釋這個問題。
領域UML類圖vs實現UML類圖
上文提到,在軟件分析與設計過程當中,會由兩種角色產生兩套UML類圖。通常狀況下,分析師繪製的UML類圖叫作「領域UML類圖」,而設計師繪製的UML類圖叫作「實現UML類圖」。這裏要聲明,這兩個名詞是個人習慣性叫法,並非你們都認同的通用叫法。下面,我對這兩種UML類圖給出個人定義:
領域UML類圖:產生於分析階段,由系統分析師繪製,主要做用是描述業務實體的靜態結構,包括業務實體、各個業務實體所具備的業務屬性及業務操做、業務實體之間具備的關係。
雖然這個UML類圖也叫「UML類圖」,可是說實話,它和編程中的「類」實在是沒啥關係,由於最後的系統中可能根本沒有類和它們對應,並且不少最後系統中的類如控制類和界面類這套UML類圖中也沒有。也就是說這套圖和具體技術無關,也不是畫給程序員看的,它只是表達業務領域中的一個靜態結構。下面給個例子:
最後,咱們總結一下要點: 1.軟件分析與設計是編碼前的兩個階段,其中分析僅與業務有關,而與技術無關。設計以分析爲基礎,主要與具體技術有關。 2.分析階段由分析師繪製領域UML類圖,設計階段由設計師繪製實現UML類圖。 3.領域UML類圖表示系統的靜態領域結構,其中的類不與最終程序中的類對應;設計UML類圖表示系統的技術架構,是程序員的編碼依據,其中的類與系統中的類對應。 4.領域UML類圖中類的屬性與操做僅關注與業務相關的部分,實現UML類圖中的屬性與操做要包括最終須要實現的所有方法與操做。