一個小目標:看懂UML類圖 and 時序圖
下面簡君將給大家介紹上面這些類之間關系的具體含義:
泛化關系(generalization)#
類的繼承結構表現在UML中為:泛化(Generalize)與實現(Realize)
繼承關系 為 is-a 的關系,兩個對象之間可以用 is-a 來表示的就是繼承關系
e.g: 自行車是車,貓是動物
泛化關系 為 inherit from 的關系,A繼承自B
e.g: 汽車在現實中有實現,可用汽車定義具體的對象,汽車與SUV之間就為泛化關系
Note:在代碼中,泛化關系表現為繼承非抽象類
實現關系(realization)#
實現關系用一條帶空心箭頭的虛線來表示
e.g: “車”為一個抽象概念,在現實中無法直接用來定義一個對象,只有當指明具體的子類(汽車還是自行車),才可以用來定義對象
Note: 在代碼中,實現關系表現為繼承抽象類
聚合關系(aggregation)#
聚合關系用一條帶空心菱形的直線表示,如下圖表示B由A組成
聚合關系用于表示試題對象之間的關系,表示整體由部分構成的語義,例如一個部門由多個員工組成;
這里一定要與組合關系做下區分,聚合關系中,整體和部分不是強依賴的,即使整體不存在了,部分仍然存在,例如上例中的部分雖然撤銷了,但是人員依然存在。
組合關系(composition)#
組合關系用一條帶實心的菱形直線表示,如下圖表示B由A組成
在意思體會上,組合關系似乎與聚合關系如出一轍,但是組合關系是一種強依賴的特殊聚合關系,如果整體不存在了,那么部分也不復存在;例如公司倒閉了,部門也就沒有了。
關聯關系(association)#
它描述的是不同類的對象之間的結構關系,它是一種靜態關系,通常與運行狀態沒有關系,一般由嘗試等因素決定的,定義對象之間的靜態的、天然的結構,所以關聯關系是一種強關聯的關系;
比如乘車人與車票就是一種關聯關系,學生和學校就是一種關聯關系;
關聯關系默認不強調方向,表示對象間互相知道,如果特別強調了方向,如下圖,表示A知道B,但B不知道A
Note: 代碼中,關聯對象通常是以成員變量的形式實現的;
依賴關系(dependency)#
此關系描述的是一個對象在運行期間會用到另一個對象的這種關系;
與關聯關系不同的是,他是一種臨時性的關系,通常在運行期間產生,并隨著運行時的變化,依賴關系也會發生變化;
顯然,依賴也是有方向的,雙向依賴是一種非常糟糕的結構,我們總是應該保持雙向依賴,杜絕雙向依賴的產生;
Note: 在代碼中,依賴關系表示為類構造方法及類方法的傳入參數,箭頭的指向為調用關系;依賴關系處理臨時知道對方外,還能“使用”對象的方法和屬性;
時序圖#
簡介:時序圖是顯示對象之間交互的圖,這些對象是按照時間順序排列的,順序圖中顯示的是參與交互的對象及其對象之間消息交互的順序,一個時序圖包括的建模元素主要有:角色(Actor)、對象(Object)、生命線(Lifeline)、控制焦點(Focus of control)、消息(Message)。
先上一張時序圖(如下是簡單工廠模式的時序圖)
-
角色####
指的系統角色,可以是人或是其他系統或子系統 -
對象####
有三種命名方式:
包括對象名和類名
只顯示類名(即匿名對象)
只顯示對象名 -
生命線####
在時序圖中表示為從對象圖標向下延伸的一條虛線,表示對象存在的時間:
Paste_Image.png -
控制焦點####
控制焦點是時序圖中表示時間段的符號,在這個時間段內對象將執行相應的操作,小矩形表示
Paste_Image.png -
消息####
消息一般分為:同步消息、異步消息、返回消息。
Paste_Image.png