--- ###### 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
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.