1. 程式人生 > >UML的九種圖例詳解

UML的九種圖例詳解

UML圖中類之間的關係:依賴,泛化,關聯,聚合,組合,實現

類與類圖 1) 類(Class)封裝了資料和行為,是面向物件的重要組成部分,它是具有相同屬性、操作、關係的物件集合的總稱。 2) 在系統中,每個類具有一定的職責,職責指的是類所擔任的任務,即類要完成什麼樣的功能,要承擔什麼樣的義務。一個類可以有多種職責,設計得好的類一般只有一種職責,在定義類的時候,將類的職責分解成為類的屬性和操作(即方法)。 3) 類的屬性即類的資料職責,類的操作即類的行為職責

 一、依賴關係(Dependence)

依賴關係(Dependence):假設A類的變化引起了B類的變化,則說名B類依賴於A類。

•  依賴關係(Dependency) 是一種使用關係,特定事物的改變有可能會影響到使用該事物的其他事物,在需要表示一個事物使用另一個事物時使用依賴關係。大多數情況下,依       賴關係體現在某個類的方法使用另一個類的物件作為引數。 •   在UML中,依賴關係用帶箭頭的虛線表示,由依賴的一方指向被依賴的一方。
  1. public class Driver  
  2. {  
  3.     public void drive(Car car)  
  4.     {  
  5.         car.move();  
  6.     }  
  7.     ……  
  8. }  
  9. public class Car  
  10. {  
  11.     public void move()  
  12.     {  
  13.         ......  
  14.     }  
  15.     ……  
  16. }  

依賴關係有如下三種情況:

1、A類是B類中的(某中方法的)區域性變數;

2、A類是B類方法當中的一個引數;

3、A類向B類傳送訊息,從而影響B類發生變化;

 二、泛化關係(Generalization)

泛化關係(Generalization):A是B和C的父類,B,C具有公共類(父類)A,說明A是B,C的一般化(概括,也稱泛化)

•  泛化關係(Generalization)也就是繼承關係,也稱為“is-a-kind-of”關係,泛化關係用於描述父類與子類之間的關係,父類又稱作基類或超類,子類又稱作派生類。在UML中,泛      化關係用帶空心三角形的直線來表示。 •  在程式碼實現時,使用面向物件的繼承機制來實現泛化關係,如在Java語言中使用extends關鍵字、在C++/C#中使用冒號“:”來實現。 

  1. public class Person   
  2. {  
  3.     protected String name;  
  4.     protected int age;  
  5.     public void move()   
  6.     {  
  7.         ……  
  8.     }  
  9.     public void say()   
  10.    {  
  11.         ……  
  12.     }  
  13. }  
  14. public class Student extends Person   
  15. {  
  16.     private String studentNo;  
  17.     public void study()   
  18.     {  
  19.         ……  
  20.     }  
  21. }  

在UML當中,對泛化關係有三個要求:

1、子類與父類應該完全一致,父類所具有的屬性、操作,子類應該都有;

2、子類中除了與父類一致的資訊以外,還包括額外的資訊;

3、可以使用父類的例項的地方,也可以使用子類的例項;

 三、關聯關係(Association)

關聯關係(Association):類之間的聯絡,如客戶和訂單,每個訂單對應特定的客戶,每個客戶對應一些特定的訂單,再如籃球隊員與球隊之間的關聯(下圖所示)。

其中,關聯兩邊的"employee"和“employer”標示了兩者之間的關係,而數字表示兩者的關係的限制,是關聯兩者之間的多重性。通常有“*”(表示所有,不限),“1”(表示有且僅有一個),“0...”(表示0個或者多個),“0,1”(表示0個或者一個),“n...m”(表示n到m個都可以),“m...*”(表示至少m個)。 •  關聯關係(Association) 是類與類之間最常用的一種關係,它是一種結構化關係,用於表示一類物件與另一類物件之間有聯絡。 •  在UML類圖中,用實線連線有關聯的物件所對應的類,在使用Java、C#和C++等程式語言實現關聯關係時,通常將一個類的物件作為另一個類的屬性。 •  在使用類圖表示關聯關係時可以在關聯線上標註角色名。 1)  雙向關聯: 預設情況下,關聯是雙向的。
  1. public class Customer  
  2. {  
  3.     private Product[] products;  
  4.     ……  
  5. }  
  6. public class Product  
  7. {  
  8.     private Customer customer;  
  9.     ……  
  10. }  

2 ) 單向關聯:類的關聯關係也可以是單向的,單向關聯用帶箭頭的實線表示.
  1. public class Customer  
  2. {  
  3.     private Address address;  
  4.     ……  
  5. }  
  6. public class Address  
  7. {  
  8.     ……  
  9. }  
3) 自關聯: 在系統中可能會存在一些類的屬性物件型別為該類本身,這種特殊的關聯關係稱為自關聯。
  1. public class Node  
  2. {  
  3.     private Node subNode;  
  4.     ……  
  5. }   
 
4) 重數性關聯: 重數性關聯關係又稱為多重性關聯關係(Multiplicity),表示一個類的物件與另一個類的物件連線的個數。在UML中多重性關係可以直接在關聯直線上增加一個數字表示與之對應的另一個類的物件的個數。

表示方式

多重性說明

1..1

表示另一個類的一個物件只與一個該類物件有關係

0..*

表示另一個類的一個物件與零個或多個該類物件有關係

1..*

表示另一個類的一個物件與一個或多個該類物件有關係

0..1

表示另一個類的一個物件沒有或只與一個該類物件有關係

m..n

表示另一個類的一個物件與最少m、最多n個該類物件有關係 (m<=n)

  1. public class Form  
  2. {  
  3.     private Button buttons[];  
  4.     ……  
  5. }   
  6. public class Button  
  7. {  
  8.     …  
  9. }  

 四、聚合關係(Aggregation)

聚合關係(Aggregation):表示的是整體和部分的關係,整體與部分 可以分開.

•  聚合關係(Aggregation) 表示一個整體與部分的關係。通常在定義一個整體類後,再去分析這個整體類的組成結構,從而找出一些成員類,該整體類和成員類之間就形成了聚合   關係。 •  在聚合關係中,成員類是整體類的一部分,即成員物件是整體物件的一部分,但是成員物件可以脫離整體物件獨立存在。在UML中,聚合關係用帶空心菱形的直線表示。 
  1. public class Car  
  2. {  
  3.     private Engine engine;  
  4.     public Car(Engine engine)  
  5.    {  
  6.         this.engine = engine;  
  7.     }  
  8.     public void setEngine(Engine engine)  
  9.     {  
  10.         this.engine = engine;  
  11.     }  
  12.     ……  
  13. }  
  14. public class Engine  
  15. {  
  16.     ……  
  17. }  

如:電話機包括一個話筒

       電腦包括鍵盤、顯示器,一臺電腦可以和多個鍵盤、多個顯示器搭配,確定鍵盤和顯示器是可以和主機分開的,主機可以選擇其他的鍵盤、顯示器組成電腦;

 五、組合關係(Composition)

組合關係(Composition):也是整體與部分的關係,但是整體與部分不可以分開.

•  組合關係(Composition)也表示類之間整體和部分的關係,但是組合關係中部分和整體具有統一的生存期。一旦整體物件不存在,部分物件也將不存在,部分物件與整體物件之    間具有同生共死的關係。 •  在組合關係中,成員類是整體類的一部分,而且整體類可以控制成員類的生命週期,即成員類的存在依賴於整體類。在UML中,組合關係用帶實心菱形的直線表示。
  1. public class Head  
  2. {  
  3.     private Mouth mouth;  
  4.     public Head()  
  5.     {  
  6.     mouth = new Mouth();  
  7.     }  
  8.     ……  
  9. }  
  10. public class Mouth  
  11. {  
  12.     ……  
  13. }  

如:公司和部門,部門是部分,公司是整體,公司A的財務部不可能和公司B的財務部對換,就是說,公司A不能和自己的財務部分開; 人與人的心臟.

 六、實現關係(Implementation)

實現關係(Implementation):是用來規定介面和實線介面的類或者構建結構的關係,介面是操作的集合,而這些操作就用於規定類或者構建的一種服務。

• 介面之間也可以有與類之間關係類似的繼承關係和依賴關係,但是介面和類之間還存在一種實現關係(Realization),在這種關係中,類實現了介面,類中的操作實現了介面中所     宣告的操作。在UML中,類與介面之間的實現關係用帶空心三角形的虛線來表示。
  1. public interface Vehicle   
  2. {  
  3.     public void move();  
  4. }  
  5. public class Ship implements Vehicle  
  6. {  
  7.     public void move()   
  8.     {  
  9.     ……  
  10.     }  
  11. }  
  12. public class Car implements Vehicle  
  13. {  
  14.     public void move()   
  15.     {  
  16.     ……  
  17.     }  
  18. }  

UML的9中圖例概述

作為一種建模語言,UML的定義包括UML語義和UML表示法兩個部分。

l UML語義:描述基於UML的精確元模型定義。

l UML表示法:定義UML符號的表示法,為開發者或開發工具使用這些圖形符號和文字語法為系統建模提供了標準。這些圖形符號和文字所表達的是應用級的模型,在語義上它是UML元模型的例項。

標準建模語言UML可以由下列5類圖來定義。

l 用例圖:從使用者角度描述系統功能,並指出各功能的操作者。

靜態圖:包括類圖和物件圖。類圖描述系統中類的靜態結構,不僅定義系統中的類,表示類之間的聯絡,如關聯、依賴、聚合等,也包括類的屬性和操作,類圖描述的是一種靜態關係,在系統的整個生命週期都是有效的。物件圖是類圖的例項,幾乎使用與類圖完全相同的標識。一個物件圖是類圖的一個例項。由於物件存在生命週期,因此物件圖只能在系統某一時間段存在。

l 行為圖:描述系統的動態模型和組成物件間的互動關係,包括狀態圖和活動圖。狀態圖描述類的物件所有可能的狀態以及事件發生時狀態的轉移條件,狀態圖是對類圖的補充,活動圖描述滿足用例要求所要進行的活動以及活動間的約束關係,有利於識別並進行活動。

l 互動圖:描述物件間的互動關係,包括時序圖和協作圖。時序圖顯示物件之間的動態合作關係,它強調物件之間訊息傳送的順序,同時顯示物件之間的互動;協作圖描述物件間的協作關係,協作圖跟時序圖相似,顯示物件間的動態合作關係。除顯示資訊交換外,協作圖還顯示物件以及它們之間的關係。如果強調時間和順序,則使用時序圖;如果強調上下級關係,則選擇協作圖。

相關推薦

【轉】UML圖例

UML圖中類之間的關係:依賴,泛化,關聯,聚合,組合,實現 類與類圖 1) 類(Class)封裝了資料和行為,是面向物件的重要組成部分,它是具有相同屬性、操作、關係的物件集合的總稱。 2) 在系統中,每個類具有一定的職責,職責指的是類所擔任的任務,即類要完成什麼樣的功能,要承擔什麼樣的義

UML圖例

UML圖中類之間的關係:依賴,泛化,關聯,聚合,組合,實現 類與類圖 1) 類(Class)封裝了資料和行為,是面向物件的重要組成部分,它是具有相同屬性、操作、關係的物件集合的總稱。 2) 在系統中,每個類具有一定的職責,職責指的是類所擔任的任務,即類要

前端基礎進階():圖例那道setTimeout與迴圈閉包的經典面試題

配圖與本文無關 我在詳細圖解作用域鏈與閉包一文中的結尾留下了一個關於setTimeout與迴圈閉包的思考題。 利用閉包,修改下面的程式碼,讓迴圈輸出的結果依次為1, 2, 3, 4, 5 for (var i=1; i<=5; i++) { setTimeout( function ti

R數據可視化----ggplot2之標度、坐標軸和圖例

abs 調整 所有 不同的 size n) 默認 表達 idt 標度控制著數據到圖形屬性的映射,當有需要時,ggplot2會自動添加一個默認的標度。我們確實可以在不了解標度運行原理的情況下畫出許多圖形,但理解標度並學會如何操縱它們則將賦予我們對圖形更強的控制能力。 每一種圖

Red Hat Virtualization網卡bond七模式

linux bond rhev rhevh bond rhev bond red hat virtualization bond 1、綁定介紹綁定(bond) 是由多個網卡組合成的、一個單一的、由軟件定義的網絡設備。因為一個綁定是由多個網卡組成的,因此它可以提供比單一網卡更高的網絡傳輸速度

JS創建對象的幾方式

演員 sta say object ron 操作 tar obj 構造 Js是一門面向對象的語言,裏面沒有類的思想,所以直接是創建對象,下面介紹幾種創建對象的方法: 1.對象字面量的方法:記住鍵值對格式:{key:value,key :value} 實例: Var

UML總結4---UML圖關系說明

-cp 旅行 聯系 charge 5.1 用戶 通過 屬於 又是 轉自:http://blog.csdn.NET/chenyujing1234/article/details/8173519 UML中包括九種圖:用例圖、類圖、對象圖、狀態圖、時序圖、協作圖、活動圖、組件

解析xml的4方法(轉)

項目 目標 源碼 更多 news 大量 優秀 大型 頻繁 http://blog.csdn.net/jzhf2012/article/details/8532873 1. 介紹 1)DOM(JAXP Crimson解析器) DOM是用與平臺和語言無關的方式表

JavaScript | 創建對象的9方法

arr 常見 安全 圖解 margin cor *** 解析 刪除 ————————————————————————————————————————————————————————— 創建對象 標準對象模式 "use strict"; // *************

aNDROID特效五TOasT

smo android roi aid window mobile ongl ast andro aNDROID%E5%92%8CWINDOWsMOBILE http://music.baidu.com/songlist/495782919 http://music.b

ajax readyState的五狀態

錯誤 生命 class 學習 rec led 初始 http 完成 0 - (未初始化)還沒有調用send()方法 1 - (載入)已調用send()方法,正在發送請求 2 - (載入完成)send()方法執行完成,已經接收到全部響應內容 3 - (交互)正在解析響應

PHP實現執行定時任務的幾思路

編輯 exists sched ebs conn 多系統 環境 提高效率 pac HP本身是沒有定時功能的,PHP也不能多線程。PHP的定時任務功能必須通過和其他工具結合才能實現,例如WordPress內置了wp-

批量殺死MySQL連接的四方法

如果 詳解 mysql into 連接 進行 0 rows awk sel 方法一   通過information_schema.processlist表中的連接信息生成需要處理掉的MySQL連接的語句臨時文件,然後執行臨時文件中生成的指令。 mysql> selec

php抓取頁面的幾方法

close deb clas win exe _array error: fopen ini 一、 PHP抓取頁面的主要方法:1. file()函數 2. file_get_contents()函數 3. fopen()->fread()->fclose

new和delete的三形式

分別是 額外 ID 調用 pre else class code alloc 一、new操作符、delete操作符 class String { public: String(const char *str="") { if

PHP定時執行任務的3方法

round 利用 淮北 執行 多線程 href 等待 無限 exec 轉載 https://www.jb51.net/article/76720.htm 更新時間:2015年12月21日 10:38:56 作者:PHP淮北 我要評論PHP不支持多線程,有時候處理問

UML中常見關係(泛化、實現、依賴、關聯、組合、聚合)

UML中類與類,已經類與介面,介面與介面的關係有:泛化(generalization),關聯(association),依賴(dependency),實現(realization)這幾種。   泛化(generalization)關係時指一個

資料庫設計之規範化--------幾正規化

資料庫的設計正規化是資料庫設計所需要滿足的規範,滿足這些規範的資料庫是簡潔的、結構明晰的,同時,不會發生插入(insert)、刪除(delete)和更新(update)操作異常。反之則是亂七八糟,不僅給資料庫的程式設計人員製造麻煩,而且面目可憎,可能儲存了大量不需要的冗餘資訊。  

java類的幾關係(有程式碼、有類圖)

前言 知道類的幾種關係也是程式設計的基礎知識,通常我們在軟體設計、架構設計、開發中都需要使用的, 類的關係 一般情況下類的關係分為6種,分別是實現、繼承、依賴、關聯、聚合、組合,下面將這6中關係簡單的分類 (1)is a -->繼承、實現 (2)has a-->關聯、

Java 列舉(enum)型別 常見7用法

JDK1.5引入了新的型別——列舉。在 Java 中它雖然算個“小”功能,卻給我的開發帶來了“大”方便。 用法一:常量 在JDK1.5 之前,我們定義常量都是: public static final.... 。現在好了,有了列舉,可以把相關