什么是 UML?
??UML 是 國際對象管理組織(OMG)在1997年1月提出了創(chuàng)建由對象管理組和 UML1.0 規(guī)范草案;
??UML 是一種為面向?qū)ο箝_發(fā)系統(tǒng)的產(chǎn)品進行說明、可視化、和編制文檔的標準語言;
??UML 作為一種模型語言,它使開發(fā)人員專注于建立產(chǎn)品的模型和結(jié)構(gòu),而不是選用什么程序語言和算法實現(xiàn);
??UML 是不同于其他常見的編程語言,如 C + +,Java中,COBOL 等,它是一種繪畫語言,用來做軟件藍圖;
??UML 不是一種編程語言,但工具可用于生成各種語言的代碼中使用 UML 圖;
??UML 可以用來建模非軟件系統(tǒng)的處理流程,以及像在一個制造單元等.
UML 的目標
??UML 的目標是定義一些通用的建模語言并對這些建模語言做出簡單的說明,這樣可以讓建模者理解與使用。UML 也是為普通人和有興趣的人而開發(fā)的系統(tǒng),它可以是一個軟件或者使用非軟件,它必須是明確的。我們不將 UML 作為一個開發(fā)方法,而是隨著流程做一個成功的系統(tǒng)。
??現(xiàn)在我們可以明確的了解 UML 的目標就是 UML 被定義為一個簡單的建模機制,幫助我們按照實際情況或者按照我們需要的樣式對系統(tǒng)進行可視化;提供一種詳細說明系統(tǒng)的結(jié)構(gòu)或行為的方法;給出一個指導系統(tǒng)構(gòu)造的模板;對我們所做出的決策進行文檔化。
UML 基本元素
1. 三個基本模塊
- 事務
- 關系
- 圖
2. 四種事務
-
結(jié)構(gòu)事務
??結(jié)構(gòu)事物是模型中的靜態(tài)部分,用以呈現(xiàn)概念或?qū)嶓w的表現(xiàn)元素,是軟件建模中最常見的元素,接下來是對結(jié)構(gòu)化物件的簡要描述:
類(class)
類是指具有相同屬性、方法、關系和語義的對象的集合。

接口((interface))
接口是指類或組件所提供的服務(操作),描述了類或組件對外可見的動作。

協(xié)作(collaboration)
協(xié)作定義元素之間的相互作用。

用例(use case)
用例定義了執(zhí)行者(在系統(tǒng)外部和系統(tǒng)交互的人)和被考慮的系統(tǒng)之間的交互來實現(xiàn)的一個業(yè)務目標。

組件(component)
組件描述物理系統(tǒng)的一部分。

節(jié)點(node)
一個節(jié)點可以被定義為在運行時存在的物理元素。

-
行為事務:
??行為事物指的是 UML 模型中的動態(tài)部分,代表語句里的 "動詞",表示模型里隨著時空不斷變化的部分,包含兩類:
交互
交互被定義為一種行為,包括一組元素之間的消息交換來完成特定的任務。

狀態(tài)機
狀態(tài)機由一系列對象的狀態(tài)組成,它是有用的,一個對象在其生命周期的狀態(tài)是很重要的。

-
分組事務
??可以把分組事物看成是一個"盒子",模型可以在其中被分解。目前只有一種分組事物,即包(package)。結(jié)構(gòu)事物、動作事物甚至分組事物都有可能放在一個包中。包純粹是概念上的,只存在于開發(fā)階段,而組件在運行時存在。
包
封裝是唯一一個分組事物可收集結(jié)構(gòu)和行為的東西。

-
注釋事務
??注釋事物可以被定義為一種機制來捕捉UML模型元素的言論,說明和注釋。注釋是唯一一個注釋事物。
注釋
注釋用于渲染意見,約束等的UML元素。

3. 四種關系
??關系是另一個最重要的構(gòu)建塊UML,它顯示元素是如何彼此相關聯(lián),此關聯(lián)描述的一個應用程序的功能,UML中定義了四種關系:
-
依賴
??依賴是兩件事物之間的語義聯(lián)系,其中一個事物的變化也影響到另一個事物。

-
關聯(lián)
??一種描述一組對象之間連接的結(jié)構(gòu)關系,如聚合關系(描述了整體和部分間的結(jié)構(gòu)關系)、組合關系(更強烈的聚合關系)。

-
泛化
??泛化可以被定義為一個專門的元件連接關系與一個廣義的元素,它基本上描述了在對象世界中的繼承關系,是一種一般化-特殊化的關系。

-
實現(xiàn)
??類之間的語義關系,其中的一個類指定了由另一個類保證執(zhí)行的契約。

4. 九種圖
- 用例圖
- 類圖
- 對象圖
- 部署圖
- 活動圖
- 狀態(tài)圖
- 序列圖
- 協(xié)作圖
- 組件圖
UML 圖的分類
根據(jù)RUP 4+1架構(gòu)視圖,分別為場景視圖、邏輯視圖、開發(fā)視圖、進程視圖和物理視圖,如下圖所示:

根據(jù)UML建模類型分類UML標準圖,分別為結(jié)構(gòu)圖(靜態(tài))和行為圖(動態(tài)),如下圖所示:

類、接口、類之間關系的基本表示法
-
類
??類(Class)是指具有相同屬性、方法和關系的對象的抽象,它封裝了數(shù)據(jù)和行為,是面向?qū)ο蟪绦蛟O計(OOP)的基礎,具有封裝性、繼承性和多態(tài)性等三大特性。在 UML 中,類使用包含類名、屬性和操作且?guī)в蟹指艟€的矩形來表示。
(1) 類名(Name)是一個字符串,例如,Student。
(2) 屬性(Attribute)是指類的特性,即類的成員變量。UML 按以下格式表示:
[可見性]屬性名:類型[=默認值]
例如:-name:String
注意:“可見性”表示該屬性對類外的元素是否可見,包括公有(Public)、私有(Private)、受保護(Protected)和朋友(Friendly)4 種,在類圖中分別用符號+、-、#、~表示。
(3) 操作(Operations)是類的任意一個實例對象都可以使用的行為,是類的成員方法。UML 按以下格式表示:
[可見性]名稱(參數(shù)列表)[:返回類型]
例如:+display():void。
學生類的 UML ,如下所示:

-
接口
??接口(Interface)是一種特殊的類,它具有類的結(jié)構(gòu)但不可被實例化,只可以被子類實現(xiàn)。它包含抽象操作,但不包含屬性。它描述了類或組件對外可見的動作。在 UML 中,接口使用包含接口名和操作且?guī)в蟹指艟€的矩形來表示。

-
類之間的關系
??在軟件系統(tǒng)中,類不是孤立存在的,類與類之間存在各種關系。根據(jù)類與類之間的耦合度從弱到強排列,UML 中的類圖有以下幾種關系:依賴關系、關聯(lián)關系、聚合關系、組合關系、泛化關系和實現(xiàn)關系。其中泛化和實現(xiàn)的耦合度相等,它們是最強的。
1. 依賴關系
??依賴(Dependency)關系是一種使用關系,它是對象之間耦合度最弱的一種關聯(lián)方式,是臨時性的關聯(lián)。在代碼中,某個類的方法通過局部變量、方法的參數(shù)或者對靜態(tài)方法的調(diào)用來訪問另一個類(被依賴類)中的某些方法來完成一些職責。
??在 UML 類圖中,依賴關系使用帶箭頭的虛線來表示,箭頭從使用類指向被依賴的類。
人與手機的關系圖,人通過手機的語音傳送方法打電話,如下圖所示:

2. 關聯(lián)關系
??關聯(lián)(Association)關系是對象之間的一種引用關系,用于表示一類對象與另一類對象之間的聯(lián)系,如老師和學生、師傅和徒弟、丈夫和妻子等。關聯(lián)關系是類與類之間最常用的一種關系,分為一般關聯(lián)關系、聚合關系和組合關系。我們先介紹一般關聯(lián)。
??關聯(lián)可以是雙向的,也可以是單向的。在 UML 類圖中,雙向的關聯(lián)可以用帶兩個箭頭或者沒有箭頭的實線來表示,單向的關聯(lián)用帶一個箭頭的實線來表示,箭頭從使用類指向被關聯(lián)的類。也可以在關聯(lián)線的兩端標注角色名,代表兩種不同的角色。
??在代碼中通常將一個類的對象作為另一個類的成員變量來實現(xiàn)關聯(lián)關系。每個老師可以教多個學生,每個學生也可向多個老師學,他們是雙向關聯(lián)。老師和學生的關系圖,如下圖所示:

3. 聚合關系
??聚合(Aggregation)關系是關聯(lián)關系的一種,是強關聯(lián)關系,是整體和部分之間的關系,是 has-a 的關系。
??聚合關系也是通過成員對象來實現(xiàn)的,其中成員對象是整體對象的一部分,但是成員對象可以脫離整體對象而獨立存在。例如,學校與老師的關系,學校包含老師,但如果學校停辦了,老師依然存在。
??在 UML 類圖中,聚合關系可以用帶空心菱形的實線來表示,菱形指向整體。大學和教師的關系圖,如下圖所示:

4. 組合關系
??組合(Composition)關系也是關聯(lián)關系的一種,也表示類之間的整體與部分的關系,但它是一種更強烈的聚合關系,是 comtains-a 關系。
??在組合關系中,整體對象可以控制部分對象的生命周期,一旦整體對象不存在,成員對象也將不存在,成員對象不能脫離整體對象而存在。例如,頭和嘴的關系,沒有了頭,嘴也就不存在了。
??在 UML 類圖中,組合關系用帶實心菱形的實線來表示,菱形指向整體。頭和嘴的關系圖,如下圖所示:

5. 泛化關系
??泛化(Generalization)關系是對象之間耦合度最大的一種關系,表示一般與特殊的關系,是父類與子類之間的關系,是一種繼承關系,是 is-a 的關系。
??在 UML 類圖中,泛化關系用帶空心三角箭頭的實線來表示,箭頭從子類指向父類。在代碼實現(xiàn)時,使用面向?qū)ο蟮睦^承機制來實現(xiàn)泛化關系。例如,Student 類和 Teacher 類都是 Person 類的子類,其類圖如下圖所示:

6. 實現(xiàn)關系
??實現(xiàn)(Realization)關系是接口與實現(xiàn)類之間的關系。在這種關系中,類實現(xiàn)了接口,類中的操作實現(xiàn)了接口中所聲明的所有的抽象操作。
??在 UML 類圖中,實現(xiàn)關系使用帶空心三角箭頭的虛線來表示,箭頭從實現(xiàn)類指向接口。例如,汽車和船實現(xiàn)了交通工具,其類圖如圖下圖所示:

UML與軟件工程
UML圖是軟件工程的組成部分,軟件工程從宏觀的角度保證了軟件開發(fā)的各個過程的質(zhì)量。而UML作為一種建模語言,更加有效的實現(xiàn)了軟件工程的要求。
在軟件的各個開發(fā)階段需要的UML圖,如下圖所示:

UML圖的使用人員總結(jié),每種顏色代表一種圖,如黃色代表用例圖,用例圖是用戶,分析人員,測試人員會使用的。如下圖所示:
