一. UML概述
UML(Unified Modeling Language,統一建模語言)是當前面向對象軟件系統建模的標準語言,它融合了衆多軟件建模技術的優點,通過一系列標準的圖形符號來描述系統。
UML是一個通用的可視化建模語言,不同於編程語言,它通過一些標準的圖形符號和文字對系統進行建模,用於對軟件進行描述、可視化處理、構造和建立軟件系統製品的文檔。UML適用於各種軟件開發方法、軟件生命週期的各個階段、各種應用領域以及各種開發工具,UML是一套總結了以往建模技術的經驗並吸收了當今最優秀成果的標準建模方法。
二. UML結構組成
UML是一種主要由圖形符號表達的建模語言,其結構主要包括以下4個部分。
(1)視圖(View):UML視圖用於從不同的角度來表示待建模系統。視圖是由許多圖形組成的一個抽象集合,在建立一個系統 模型時只有通過定義多個視圖,每個視圖顯示該系統的一個特定方面,才能構造出該系統的完整藍圖,視圖也將建模語言鏈接到開發所選擇的方法和過程。UML視圖包括用戶視圖、結構視圖、行爲視圖、實現視圖和環境視圖。
(2)圖(Diagram):UML圖是描述UML視圖內容的圖形。UML2.0提供了13種圖,分別是用例圖(Use Case Diagram)、類圖(Class Diagram)、對象圖(Object Diagram)、包圖(Package Diagram)、組合圖(Composite Structure Diagram)、狀態圖(State Diagram)、活動圖(Activity Diagram)、順序圖(Sequence Diagram)、通信圖(Communication Diagram)、定時圖(Timimg Diagram)、交互概覽圖(Interaction Diagram)、組件圖(Component Diagram)和部署圖(Deployment Diagram),通過它們之間的相互結合可提供待建模系統的所有視圖。
(3)模型元素(Model Element):模型元素是指UML圖中所使用的一些概念,它們對應於普通的面向對象概念,如類、對象、屬性以及這些概念之間的關係,例如關聯關係、依賴關係、泛化關係等。同一個模型元素可以在多個不同的UML圖中使用,但是無論在哪個圖中,同一個模型元素都必須保持相同的意義並具有相同的符號。
(4)通用機制(General Mechanism):UML提供的通用機制爲模型元素提供額外的註釋、語義和其他信息,這些通用機制也提供了擴展機制,允許用戶對UML進行擴展,如定義新的建模元素、擴展原有元素的定義、天劍新的特殊信息來擴展模型元素的規則說明等,以便適用於一個特定的方法或過程、組織或用戶。
三. 類與類的UML表示
在UML2.0的13中圖形中,類圖是使用最廣泛的圖形之一,它用於描述系統所包含的類以及它們之間的相互關係。類圖幫助人們簡化對系統的理解,是系統分析和設計階段的產物,也是系統編碼的重要模型依據。
1. 類
在系統中每個類都具有一定的職責,職責指的是類要完成什麼樣的功能,要承擔什麼樣的義務。一個類可以有多種職責,設計得好的類通常有且僅有一種職責。在定義類的時候將類的職責分解成類的屬性和操作(即方法)。類的屬性即類的數據職責,累的操作即類的行爲職責。
類圖(Class Diagram)使用出現在系統中的不同類來描述系統的靜態結構,它用來描述不同的類以及它們之間的關係。
2. 類的UML圖示
在UML中類使用包含類名、屬性和操作且帶有分割線的長方形來表示。如下圖所示:
該圖表示了一個Person類,它包含屬性name、age和address以及操作work()和eat()。該圖所對應的代碼如下:
public class Person {
public String name;
private int age;
private String address;
public void work() {
}
public String eat() {
return "rice";
}
}
在UML類圖中,類一般由3部分組成。
(1)第一部分是類名:每個類都必須有一個名字,類名是一個字符串。
(2)第二部分是累的屬性:屬性是指類的性質,即類的成員變量。一個類通常可以有任意多個屬性,也可以沒有屬性。
UML規定屬性的表示方式如下:
[可見性] 名稱 : 類型 [ = 默認值 ]
其中:
① “可見性”表示該屬性對於類外的元素而言是否可見,包括共有(public)、私有(private)和受保護(protected)3種,在UML類圖中分別用 “+” “-” 和 “#”表示。在Java語言中還新增了默認的包內可見,包內可見在UML建模工具中用符號 “*”表示。
② “名稱” 表示屬性名,用一個字符串表示。
③ “類型” 表示屬性的數據類型,可以是基本數據類型,也可以是用戶自定義類型。
④ “默認值” 是一個可選項,即屬性的初始值。
(3)第三部分是類的操作:操作是類的任意一個實例對象都可以使用的行爲,是類的成員方法。
UML規定操作的表示方式如下:
[ 可見性 ] 名稱 ([參數列表]) [ : 返回類型 ]
其中:
① “可見性” 的定義與屬性的可見性定義相同
② “名稱” 即方法名或操作名,用一個字符串表示。
③ “參數列表” 表示方法的參數,其語法與屬性的定義相似,參數個數是任意的,多個參數之間用逗號“,”隔開。
④ “返回類型” 是一個可選項,表示方法的返回值類型,依賴於具體的編程語言,可以是基本數據類型,也可以是用戶自定義類型,還是是空類型,如果是構造方法,則無返回類型。
3. 類之間的關係
在軟件系統中類並不是孤立存在的,類與類之間存在各種關係,對於不同類型的關係,UML提供了不同的表示方式。
1. 關聯關係
關聯關係是類與類之間最常用的一種關係,表示一類對象與另一類對象之間有聯繫。如汽車與輪胎老師和學生等。在UML類圖中用實線連接有關聯關係的對象所對應的類,在Java中通常將一個類的對象作爲另一個類的成員變量或者以類的屬性的形式出現。在使用類圖表示關聯關係時可以在關聯線上標註角色名,關係的兩端代表兩種不同的角色,因此在一個關聯關係中可以包含兩個角色名,角色名不是必須的,可以根據需要增加,其目的是使類之間的關係更加明確。
例如:學生和老師之間,每個老師可以教很多學生,每個學生也可能有多個老師,他們是雙向關聯。
代碼如下所示:
public class Teacher {
private String name;
private List<Student> stus;
public void teaching(){}
}
public class Student {
private String name;
private List<Teacher> teas;
public void study(){}
}
2. 聚合關係
聚合關係表示整體與部分的關係。在聚合關係中,成員對象是整體對象的一部分,但是成員對象可以脫離整體對象獨立存在。UML中,聚合關係用帶空心菱形的直線表示。例如汽車發動機是汽車的組成部分,但是汽車發動機可以獨立存在,因此汽車和發動機是聚合關係。
聚合關係如圖所示:
在代碼實現聚合關係時,成員對象通常作爲構造方法,Setter方法或業務方法的參數注入到整體對象中。
代碼如下:
public class Car {
private Engine engine;
public Car(Engine engine) {
this.engine = engine;
}
public void setEngine(Engine engine){}
}
public class Engine {
........
}
3. 組合關係
組合關係也表示類之間整體和部分的關係,但是在組合關係中整體對象可以控制成員對象的生命週期,一旦整體對象不存在,成員對象也將不存在,成員對象與整體對象之間具有同生共死的關係。在UML中,組合關係用帶實心菱形的直線表示。例如人的頭和嘴巴,嘴巴是頭的組成部分之一,而且如果頭沒了,嘴巴也就沒了,因此頭和嘴巴是組合關係。UML如圖所示:
在代碼實現組合關係時,通常在整體類的構造方法中直接實例化成員類。代碼如下所示:
public class Head {
private Mouth mouth;
public Head(){
mouth = new Mouth();
}
}
public class Mouth{
......
}
4. 依賴關係
依賴關係是一種使用關係,特定事物的改變可能會影響使用該事物的其他事物,在需要表示一個事物使用另一個事物時使用依賴關係。一般情況下,依賴關係體現在某個類的方法使用另一個類的對象做爲參數。在UML中使用帶箭頭的虛線表示依賴關係,由依賴的一方指向被依賴的一方。例如駕駛員開車,在Driver類的drive()方法中將Car類型的對象作爲一個參數傳遞,以便在drive()方法中能夠調用car的move()方法,駕駛員的drive()方法依賴車的move()方法,因此類Driver依賴類Car。如下圖所示:
在代碼實現中,依賴關係通常通過3中方式實現:第一種,將一個類的對象作爲一個類中方法的參數;第二種方式是在一個類的方法中將另一個類的對象作爲其局部變量;第三種方式是在一個類的方法中調用另一個類的靜態方法。
5. 泛化關係
泛化關係也就是繼承關係,用於描述子類與父類之間的關係,在UML中,泛化關係用帶空心三角形的直線來表示。例如,Teacher和Student都可以是Person的子類,他們都可以移動move()和說話say()。UML如下所示:
對應的代碼如下:
public class Person {
public String name;
private int age;
public void move() {
......
}
public void say() {
......
}
}
public class Teacher extends Person {
private String teacherNo;
public void teach(){
.......
}
}
public class Student extends Person{
private String studentNo;
public void study(){
......
}
}
6. 接口與實現關係
實現(Realization)關係是接口與實現類之間的關係。在這種關係中,類實現了接口,類中的操作實現了接口中所聲明的所有的抽象操作。在UML中,類與接口之間的實現關係用帶空心三角形的虛線來表示。例如定義一個交通工具接口Vehicle,包含一個抽象操作move(),在類Ship和類Car中都實現了該move()操作,不過具體細節可能不同。UML如下圖所示:
代碼如下:
public interface Vehicle {
void move();
}
public class Ship implements Vehicle {
@Override
public void move() {
}
}
public class Car implements Vehicle{
@Override
public void move() {
}
}
以上就是今天我要分享給大家的內容,UML有太多的東西了,類圖只是其中最常用的一小部分,其他的各種圖還需要繼續學習和使用。
多謝大家的瀏覽,歡迎留言交流共同進步。