UML 中文翻譯爲統一建模語言,其實說白了 UML 就是將軟件的各類狀態以圖表的方式展示出來。由於 UML 涉及的圖表很是的多,這裏只介紹比較重要的類圖、時序圖、用例圖,爲了加深讀者的理解,這裏會使用 StarUML 來說解。html
類圖就是表示系統中包含了哪些實體,各實體之間如何關聯的。node
從概念就能夠知道類圖其實就是由兩部分組成的,一個是實體,另外一個就是關聯。關聯會在下一篇文章講解,這篇文章先講解實體。bash
類圖實體的意思其實就是表示在 UML 當中怎麼表示一個類。例如,如今有一個 Dog 類,代碼以下:併發
public class Dog {
private int age;
private String name;
public void printInfo(){
System.out.println("name: " + name + " " + "age: " + age);
}
}
複製代碼
若是用類圖表示以下圖: post
一個類的類圖就是由類名,屬性和方法組成的,如今來介紹一下這些元素的細節。spa
在 StartUML 中,若是雙擊類名會看到右邊的控制面板出現下圖的表格: 翻譯
這個就是描述當前類的值,那它們分別表明什麼意思呢?如下一個個解釋。3d
(1)stereotype:這個中文翻譯也叫構造型,其實就是對類的概念的精化。簡單的說加一句話來更加清楚準確描述這個類。 如今往 stereotype 添加 Animal,看看類圖會發生什麼變化? code
能夠發如今類名 Dog 上面會出現 <> ,由於在 UML 當中構造型(Stereotype)就是用<< >> 符號來表示。(2)visibility:這個是可見性的意思,這裏一共有四個選項,分別是 public、protected、private、package。不過你不管選什麼選項類圖都不會有什麼變化的,不過要注意的是 Java 中只能使用 public 和 package 來修飾類。cdn
(3)isAbstract:顧名思義,這個選項就表明是否爲抽象類。若是選上這個選項類名就會變成斜體字,如圖:
(4)isFinalSpecialization:是否爲 final 類,若是選上這個選項,類圖並無什麼變化。
(5)isLeaf:其實這個的意思和 isFinalSpecialization 基本上都是同樣的,都表明選上都表明這個類爲 final 類。若是選上這個選項類圖會有以下變化。
能夠看到類名的右下角出現 {leaf}。(6)isActive:是否爲活動對象。那什麼是活動對象呢?活動對象就是能夠主動的啓動某些流程,而被動對象就是要其餘對象來調用它。若是選上這個選項類圖會有以下變化:
能夠看到類圖左右兩邊加多了一條線。(1) visibility:有些人可能會問了,類名那一節不是已經說了這個屬性嗎?爲何還要說。沒錯,類名那裏確實說過了,並且這個屬性的值和類名也是同樣的,可是在這裏若是選不一樣的選項,類圖是會有相應不一樣的變化的。
看上圖,能夠知道選擇不一樣訪問控制符,age 前的符號是不同的,總結以下表:訪問控制符 | UML 符號 |
---|---|
public | + |
protected | # |
private | - |
package | ~ |
(2)isStatic:是否爲靜態。若是選擇了這個選項後,類圖會有以下變化
age 屬性下面會出現一道橫線。(3)type:表明該屬性的類型
(4)multiplicity:這個表明該類實例與其餘類實例鏈接時所須要的數量範圍。這裏有幾種表達方式,總結以下表:
符號 | 說明 |
---|---|
0..1 | 零個或一個 |
1 | 一個 |
0..* | 零個或多個 |
1..* | 一個或多個 |
* | 多個 |
若是選擇了 0..1 選項類圖就會變成以下圖:
age 後面就會出現 [0..1] 。
(5)isReadOnly:表明只能讀取。選擇了這個選項類圖會有以下變化:
在屬性的後面會出現 {readOnly}(6)isOrdered:若是選擇了 multiplicity,在選擇了 isOrdered。證實這個屬性多個值是按某種特殊排序法排序的,選擇了這個選項類圖會有以下變化:
在屬性的後面會出現 {ordered}
(7)isUnique:若是選擇了 multiplicity,在選擇了 isOrdered。證實這個屬性多個值是否惟一,選擇了這個選項類圖會有以下變化:
在屬性的後面會出現 {unique}(8)defaultValue:默認值,設置的話,類圖會有以下變化:
會在 age 後面 增長了 「= 18」 符號。
(9)isDerived:表明這個值是否由其餘模型計算出來的。選擇了這個選項類圖會有以下變化:
能夠看到會在 age 前增長 「/」 符號。(10)aggregation:這裏面有三個選項以下圖:
類型 | 做用 |
---|---|
none | 不設置聚合狀態 |
shared | 能夠獨立存在 |
composite | 沒有這個屬性,整個類就不能存在 |
設置了這幾個值類圖並不會有什麼變化。
(11)isID:表明這個屬性值是不是這個類實例的惟一標識碼。選擇了這個選項類圖會有以下變化:
能夠看到會在 name 屬性後面增長 「{id}」 符號(1)raisedExeptions:添加可能會引起的異常。 這裏我定義了一個 MyException 類,而後在 printInfo() 方法中添加異常,添加後如圖所示:
添加後,類圖並不會有變化。
(2) concurrency:表明這個方法的併發性,這裏有三個選項,做用下表總結:
類型 | 做用 |
---|---|
sequential | 按順序執行 |
guarded | 後臺執行 |
concurrent | 併發執行 |
改變後,類圖並不會有變化。
(3)isQuery:表明此方法若是並無改變系統的狀態。選擇了這個選項類圖會有以下的變化:
會在 printInfo() 方法後出現 「{query}」 符號
(4)specification:對這個方法的做用進行說明 增長內容後,類圖並不會有變化。
基本上咱們日常能用到的類圖實體的元素都講解的差很少了,下一篇文章咱們繼續講解類圖關聯。
下篇文章在此:UML 剖析(2) —— 類圖關聯和時序圖
參考書籍與文章: