--- ###### tags: `Software Engineering` --- UML 實務手冊 === ## 認識UML ### 統一建模語言 ***UML(Unified Modeling Language)是建構模式(model)的專用語言。*** 在編寫程式碼前,開發人員會先經過分析設計的思考,並繪製一些圖形,再搭配一些文字,作為**分析設計**的產出,這份產出可稱之為軟體模式模型。 ### UML 圖 UML推出了十多款圖,不過並非每款圖都實用,在開發商用資訊系統時,最常用到的UML圖,包含有: 類別圖、循序圖、使用案例圖、狀態圖(state machine diagram)和活動圖(activity diagram)。 ## 類別圖 ==**類別圖(class diagram)是最重要的UML圖。**== :::info ***主要功能:*** **用來呈現系統內部的靜態結構**,而這樣的靜態結構通常可以用直接對應程式碼,因此,從程式設計師的角度來看,類別圖是最被關注的UML圖。 類別圖描述了系統的類別集合,類別的屬性和類別之間的關係。 ::: * 矩形代表類別(class)、類別內部記載屬性(attribute)與操作(operation)。 * 類別之間有代表結合關係(association relationship)的實線、組合關係(composition relationship)的實心菱形實線、一般化關係(generalization relationship)的三角形實線。 :::info * **類別圖符號分成兩種:** * **物件本身** * **物件與物件的關係** * 物件本身  ```java! + : public - : private # : protected ``` * 物件間的關係  * association relationship 結合關係 \# 使一個類別知道另一個類別屬性和方法。 // 通常含有「知道」、「了解」的含義。  > (A knows B) * dependency relationship 依賴關係 \# 指在參數或回傳時有用到  > (A uses B) * Implementation relationship 實作關係 \# 指的是一個 class 類別實現 interface 介面   > (A implements B) * generalization relationship 一般化關係 \# 指的是父類別擁有子類別的共用功能,子類別可以視作父類別的特例。 \# 描述 is-a 關係。  > (A is a type of B) * aggregation relationship 聚合關係 \# 整體與部分的「弱」包含關係,部分類別可以單獨存在,也可以屬於多個整體物件。 \# 描述 has-a 關係。  > (A owns B) * composition relationship 組合關係 \# 整體與部分的「強」包含關係,部分類別無法單獨存在,其生命週期與整體相同。 \# 描述 contains-a 關係。  > (B is part of A) 多重性(Multiplicity) | 指示符 | 意思 | | ------ | ------- | | 0...1 | 0 or 1 | | 1 | 1 | | 0...* | 0 or 多 | | 1...* | 1 or 多 | | * | 多 | :::  ## 循序圖 循序圖(sequence diagram)將類別圖部分更細節。 :::info ***主要功能:*** **呈現類別圖操作之實作方法。** 在類別圖中,未能提出操作之實作方法,這部分的細節設計,可藉由循序圖來呈現。雖然,我們可以從類別圖對應到程式中的類別、屬性、關係及操作之宣告,但也僅止於此,對於操作的實作方法,還要搭配循序圖才能獲得。 除了表達實作方法外,更重要的是,循序圖還能夠表達執行期間的一群物件,為了合力完成某一個目的,**呼叫操作之互動情況**。 ::: ![image sequence diagram][reference link] ## 使用案例圖 使用案例圖(use case diagram)是最與眾不同的UML圖。 :::info ***主要功能:*** 獨特之處在於它適合**用來表達系統的「外部」行為**,其餘的UML圖都適用於呈現系統內部結構或行為。其餘的UML圖都是用於呈現系統的「內部」結構或行為。 ::: 橢圓形的使用案例圖示位於系統內部,代表系統將提供且支援這些使用案例,而參與者位於系統外部,代表使用案例的啟動者或支援者。 ![image use case diagram][reference link] ## 狀態圖 狀態圖(state machine diagram) :::info ***主要功能:*** 狀態圖可以讓我們**聚焦在單一種類的物件本身**,表達物件一生中可以出現的狀態(state)變化。 相較之下,狀態圖的觀點與循序圖的觀點全然不同,循序圖表達某一種物件與其他種物件之間的互動情況。 簡而言之,循序圖用以表達物件外部互動行為,而狀態圖表達物件內部的狀態變化。 ::: ![image use case diagram][reference link] ## 活動圖 活動圖(activity diagram) :::info ***主要功能:*** 活動圖非常適合用來表達一連串的行動。 活動圖相當容易理解與使用,它跟我們隨手繪製的流程圖沒什麼不同,唯一需要講究的只有它特定的圖示。 ::: 橢圓形的使用案例圖示位於系統內部,代表系統將提供且支援這些使用案例,而參與者位於系統外部,代表使用案例的啟動者或支援者。 ![image use case diagram][reference link] ### UML 工具 #### StarUML #### IBM RSA #### Case Complete
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up