看懂UML類圖與時序圖

一個小目標:看懂UML類圖 and 時序圖

Paste_Image.png

下面簡君將給大家介紹上面這些類之間關系的具體含義:

泛化關系(generalization)#

類的繼承結構表現在UML中為:泛化(Generalize)與實現(Realize)
繼承關系 為 is-a 的關系,兩個對象之間可以用 is-a 來表示的就是繼承關系
e.g: 自行車車,貓動物
泛化關系 為 inherit from 的關系,A繼承自B

Paste_Image.png

e.g: 汽車在現實中有實現,可用汽車定義具體的對象,汽車與SUV之間就為泛化關系
Paste_Image.png

Note:在代碼中,泛化關系表現為繼承非抽象類

實現關系(realization)#

實現關系用一條帶空心箭頭的虛線來表示
e.g: “車”為一個抽象概念,在現實中無法直接用來定義一個對象,只有當指明具體的子類(汽車還是自行車),才可以用來定義對象

Paste_Image.png

Note: 在代碼中,實現關系表現為繼承抽象類

聚合關系(aggregation)#

聚合關系用一條帶空心菱形的直線表示,如下圖表示B由A組成

Paste_Image.png

聚合關系用于表示試題對象之間的關系,表示整體由部分構成的語義,例如一個部門由多個員工組成;
這里一定要與組合關系做下區分,聚合關系中,整體和部分不是強依賴的,即使整體不存在了,部分仍然存在,例如上例中的部分雖然撤銷了,但是人員依然存在。

組合關系(composition)#

組合關系用一條帶實心的菱形直線表示,如下圖表示B由A組成

Paste_Image.png

在意思體會上,組合關系似乎與聚合關系如出一轍,但是組合關系是一種強依賴的特殊聚合關系,如果整體不存在了,那么部分也不復存在;例如公司倒閉了,部門也就沒有了。

關聯關系(association)#

它描述的是不同類的對象之間的結構關系,它是一種靜態關系,通常與運行狀態沒有關系,一般由嘗試等因素決定的,定義對象之間的靜態的、天然的結構,所以關聯關系是一種強關聯的關系;
比如乘車人與車票就是一種關聯關系,學生和學校就是一種關聯關系;
關聯關系默認不強調方向,表示對象間互相知道,如果特別強調了方向,如下圖,表示A知道B,但B不知道A

Paste_Image.png

Note: 代碼中,關聯對象通常是以成員變量的形式實現的;

依賴關系(dependency)#

此關系描述的是一個對象在運行期間會用到另一個對象的這種關系;

Paste_Image.png

與關聯關系不同的是,他是一種臨時性的關系,通常在運行期間產生,并隨著運行時的變化,依賴關系也會發生變化;
顯然,依賴也是有方向的,雙向依賴是一種非常糟糕的結構,我們總是應該保持雙向依賴,杜絕雙向依賴的產生;
Note: 在代碼中,依賴關系表示為類構造方法及類方法的傳入參數,箭頭的指向為調用關系;依賴關系處理臨時知道對方外,還能“使用”對象的方法和屬性;

時序圖#

簡介:時序圖是顯示對象之間交互的圖,這些對象是按照時間順序排列的,順序圖中顯示的是參與交互的對象及其對象之間消息交互的順序,一個時序圖包括的建模元素主要有:角色(Actor)、對象(Object)、生命線(Lifeline)、控制焦點(Focus of control)、消息(Message)。
先上一張時序圖(如下是簡單工廠模式的時序圖)

Paste_Image.png

  1. 角色####

    指的系統角色,可以是人或是其他系統或子系統
  2. 對象####

    有三種命名方式:
    包括對象名和類名
    只顯示類名(即匿名對象)
    只顯示對象名
  3. 生命線####

    在時序圖中表示為從對象圖標向下延伸的一條虛線,表示對象存在的時間:


    Paste_Image.png
  4. 控制焦點####

    控制焦點是時序圖中表示時間段的符號,在這個時間段內對象將執行相應的操作,小矩形表示


    Paste_Image.png
  5. 消息####

    消息一般分為:同步消息、異步消息、返回消息。


    Paste_Image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容