UML概述

王陸發表於2019-06-23

 

什麼是UML?

統一建模語言(UML)

維基百科給出如下定義:

UML即統一建模語言(Unified Modeling Language),它是一種開放的方法,用於說明、視覺化、構建和編寫一個正在開發的、物件導向的、軟體密集系統的製品的開放方法。UML展現了一系列最佳工程實踐,這些最佳實踐在對大規模,複雜系統進行建模方面,特別是在軟體架構層次已經被驗證有效。
UML是一種圖形化語言,支援模型化和軟體系統開發

UML”4+1”檢視

邏輯檢視關注的靜態元素是:層、子系統、類、介面,用類圖來描述。關注的動態因素是協作關係,用時序圖、協作圖、狀態圖等來描述。是否需要在架構設計中體現類和類之間的關係?這取決於設計的層級。

開發檢視(實現實體)關注的元素是程式包(SDK、解析器、中介軟體)、檔案組織結構、編譯依賴關係、目標單元(jar、exe、dll等)。它和邏輯檢視的靜態元素通常有對映關係。

執行檢視(程式檢視)關注程式、執行緒、物件等執行時概念,以及相關的併發、同步、通訊等問題。執行架構和開發架構的關係:開發架構一般偏重程式包在編譯時期的靜態依賴關係,而這些程式執行起來之後會表現為物件、執行緒、程式,執行架構比較關注的是這些執行時單元的互動問題。

部署檢視關注“目標程式及其依賴的執行庫和系統軟體”最終如何安裝或部署到物理機器,以及如何部署機器和網路來配合軟體系統的可靠性、可伸縮性等要求。部署檢視和執行檢視的關係:執行檢視特別關注目標程式的動態執行情況,而部署檢視重視目標程式的靜態位置問題;部署檢視還要考慮軟體系統和包括硬體在內的整個IT系統之間是如何相互影響的。

 
UML語言是一種視覺化的的物件導向建模語言,描述軟體模型的靜態結構、動態行為及模組組織與管理。

三個基本的部分

事物(Things)UML中重要的組成部分,在模型中屬於最靜態的部分,代表概念上的或物理上的元素
關係(Relationships)關係把事物緊密聯絡在一起
圖(Diagrams)圖是很多有相互相關的事物的組
 

4種型別的事物

結構事物(Structural things)
動作事物(Behavioral things)
分組事物(Grouping things)
註釋事物(Annotational things)

UML中的關係

依賴(Dependencies)    
關聯(Association)
泛化(Generalization)
實現(Realization)

UML中的9種圖

類圖(Class diagram)
物件圖(Object diagram)
用例圖(Use case diagram)
時序圖(Sequence diagram)
協作圖(Collaboration diagram)
狀態圖(Statechart diagram)
活動圖(Activity diagram)
元件圖(Component diagram)
部署圖(Deployment diagram)

用例圖

用例圖的組成

用例(use case):表示驅動的業務目標
參與者(Actor):整個建模的中心
業務工人(business worker):系統中的被動參與者

 

活動圖

活動圖組成

起始點(Initial node)
邊(Edge)
選擇(Decision)
合併(Merge)
分支(Fork)
匯合(Join)
活動終止點(Activity final node)

 

類圖

類圖:展示軟體模型的靜態結構、類的內部結構(屬性和操作)以及和其他類的關係
例: Clock類的完整表示

屬性表示
  [可見性] 屬性名[重數][‘:’型別][‘ =’初始值][{約束特徵}]
  可見性(訪問控制性)分為+(公有)、#(受保護)或 -(私有)
操作表示:[可見性] 操作名[‘(‘引數列表’)’][‘:’返回型別] ][{約束特徵}]

Clock類的簡潔表示

物件圖

物件圖表示一組物件及它們之間的聯絡。
物件圖是系統的詳細狀態在某一時刻的快照,常用於表示複雜的類圖的一個例項。物件圖實質上是具有關聯關係的類圖的例項。

 

類與物件之間關係圖

類之間關係的強弱

依賴關係 dependency

... uses a ...

 

圖中的“類A”是源,“類B”是目標,表示“類A”使用了“類B”,或稱“類A”依賴“類B”

駕駛員和汽車之間的關係就是依賴關係

 

舉個例子

學生撿到錢交給警察叔叔,學生和警察叔叔就是一種依賴關係。因為學生撿到錢給警察是一種偶然的事情,交給警察後他們之間就沒有關係了。我們在學生類中加入一個交錢的方法,在警察類中加入一個收錢的方法,當呼叫學生的交錢方法時,就呼叫警察的收錢方法。

作用關係——關聯 Association

關聯關係是一種比較強的關係,他們的關係是比較持久的,穩定的。比如學生從家裡出來,學生和家就是一種關聯關係。這種關係是比較穩定的。關聯分單向關聯和雙向關聯,如果一個類知道或者引用了另一個類,而另一個類不知道或者沒有引用這個類,則這兩個類是單向關聯的。比如這裡學生與家的關係就是單向關聯的,因為每個學生都是有個家的,但不能說每個家裡都有學生。單向關聯我們用帶箭頭的實線表示,箭頭指向被引用或者被包含的類,這裡也就是家這個類。示例如下:

雙向關聯是兩個類彼此都知道對方的存在,比如老師與學生的關係就是雙向的。小明的語文老師是張老師,張老師的學生有小明。雙向關聯用不帶箭頭的實線來連線兩個類。示例如下:
 

包含(inclusion)關係


包含關係有兩種:聚合(aggregation)和組合(composition)

聚合關係是一種特殊的關聯關係,聚合關係強調的是整體和部分的關係,其中部分可以脫離整體而存在。比如雁群和一隻大雁的關係,就是聚合關係,大雁離開雁群還是可以獨立存在的。再比如警察與制服的關係,制服也是警察的一部分,制服可以脫離警察而存在。在UML類圖中聚合用帶空心菱形的直線表示,其中菱形指向整體:



組合關係也是一種特殊的關聯關係,它與聚合關係很像,也是強調整體與部分的關係,不同的是部分無法脫離整體存在。比如學生用手撿錢,其中手就是學生的一部分,但是手不能脫離學生而單獨存在。要是手能獨立存在想想就可怕。。。這裡我們稱學生與手為組合關係,用帶實心的菱形直線表示,其中菱形指向整體:
 

泛化關係

泛化關係在中也叫作繼承關係,在UML中我們用帶空心三角形的直線來表示,我們增加兩個類,一個Studen類,一個警察Policemen類,兩個類均繼承自Person類,那麼他們的類關係圖表示如下:

實現關係

這裡的實現關係就是類與介面的實現關係,在UML中我們用帶空心三角形的虛線表示。由於Student和Policeman都職業,學生的職業就是學習,而警察的職業為保護人民。所有這裡我們定義一個介面,裡面有一個職業的方法:

這個介面用UML類圖表示如下:

可以看到在介面名字上多了一個<<interfac>>字元來表示這個為介面。接下來我們讓Student和Policeman都實現這個介面,UML類圖如下:

 

最後UML類圖完成上面小學生撿錢的故事:

 再舉一個例子:

時序圖

 

例子

狀態圖

物件在生命週期內的動態行為
就是狀態機
狀態、事件、動作


協作圖

可與時序圖互相轉化


元件圖

軟體元件之間的關係

部署圖

表現用於部署軟體應用的物理裝置資訊

 

 

 

類圖部分參考自https://www.jianshu.com/p/2828874af134

相關文章