UML 剖析(1) —— 類圖實體

0. 簡介

UML 中文翻譯爲統一建模語言,其實說白了 UML 就是將軟件的各類狀態以圖表的方式展示出來。由於 UML 涉及的圖表很是的多,這裏只介紹比較重要的類圖、時序圖、用例圖,爲了加深讀者的理解,這裏會使用 StarUML 來說解。html

1. 類圖

1.1 概念

類圖就是表示系統中包含了哪些實體,各實體之間如何關聯的。node

1.2 類圖組成

從概念就能夠知道類圖其實就是由兩部分組成的,一個是實體,另外一個就是關聯。關聯會在下一篇文章講解,這篇文章先講解實體bash

1.2.1 類圖實體

類圖實體的意思其實就是表示在 UML 當中怎麼表示一個類。例如,如今有一個 Dog 類,代碼以下:併發

public class Dog {
    
    private int age;
    private String name;

    public void printInfo(){
        System.out.println("name: " + name + " " + "age: " + age);
    }
}
複製代碼

若是用類圖表示以下圖: post

Dog

一個類的類圖就是由類名,屬性和方法組成的,如今來介紹一下這些元素的細節。spa

1.2.1.1 類名

在 StartUML 中,若是雙擊類名會看到右邊的控制面板出現下圖的表格: 翻譯

Class Properties

這個就是描述當前類的值,那它們分別表明什麼意思呢?如下一個個解釋。3d

(1)stereotype:這個中文翻譯也叫構造型,其實就是對類的概念的精化。簡單的說加一句話來更加清楚準確描述這個類。 如今往 stereotype 添加 Animal,看看類圖會發生什麼變化? code

stereotype
能夠發如今類名 Dog 上面會出現 <> ,由於在 UML 當中構造型(Stereotype)就是用<< >> 符號來表示。

(2)visibility:這個是可見性的意思,這裏一共有四個選項,分別是 public、protected、private、package。不過你不管選什麼選項類圖都不會有什麼變化的,不過要注意的是 Java 中只能使用 public 和 package 來修飾類。cdn

(3)isAbstract:顧名思義,這個選項就表明是否爲抽象類。若是選上這個選項類名就會變成斜體字,如圖:

isAbstract

(4)isFinalSpecialization:是否爲 final 類,若是選上這個選項,類圖並無什麼變化。

(5)isLeaf:其實這個的意思和 isFinalSpecialization 基本上都是同樣的,都表明選上都表明這個類爲 final 類。若是選上這個選項類圖會有以下變化。

isLeaf
能夠看到類名的右下角出現 {leaf}。

(6)isActive:是否爲活動對象。那什麼是活動對象呢?活動對象就是能夠主動的啓動某些流程,而被動對象就是要其餘對象來調用它。若是選上這個選項類圖會有以下變化:

isActive
能夠看到類圖左右兩邊加多了一條線。

1.2.1.2 屬性

Attribute Properties
有些選項與類名的選項是同樣的,這裏就不重複講解了,說一些類名沒有或特有的屬性。

(1) visibility:有些人可能會問了,類名那一節不是已經說了這個屬性嗎?爲何還要說。沒錯,類名那裏確實說過了,並且這個屬性的值和類名也是同樣的,可是在這裏若是選不一樣的選項,類圖是會有相應不一樣的變化的。

visibility
看上圖,能夠知道選擇不一樣訪問控制符,age 前的符號是不同的,總結以下表:

訪問控制符 UML 符號
public +
protected #
private -
package ~

(2)isStatic:是否爲靜態。若是選擇了這個選項後,類圖會有以下變化

isStatic
age 屬性下面會出現一道橫線。

(3)type:表明該屬性的類型

(4)multiplicity:這個表明該類實例與其餘類實例鏈接時所須要的數量範圍。這裏有幾種表達方式,總結以下表:

符號 說明
0..1 零個或一個
1 一個
0..* 零個或多個
1..* 一個或多個
* 多個

若是選擇了 0..1 選項類圖就會變成以下圖:

multiplicity

age 後面就會出現 [0..1] 。

(5)isReadOnly:表明只能讀取。選擇了這個選項類圖會有以下變化:

isReadOnly
在屬性的後面會出現 {readOnly}

(6)isOrdered:若是選擇了 multiplicity,在選擇了 isOrdered。證實這個屬性多個值是按某種特殊排序法排序的,選擇了這個選項類圖會有以下變化:

isOrdered

在屬性的後面會出現 {ordered}

(7)isUnique:若是選擇了 multiplicity,在選擇了 isOrdered。證實這個屬性多個值是否惟一,選擇了這個選項類圖會有以下變化:

isUnique
在屬性的後面會出現 {unique}

(8)defaultValue:默認值,設置的話,類圖會有以下變化:

defaultValue

會在 age 後面 增長了 「= 18」 符號。

(9)isDerived:表明這個值是否由其餘模型計算出來的。選擇了這個選項類圖會有以下變化:

isDerived
能夠看到會在 age 前增長 「/」 符號。

(10)aggregation:這裏面有三個選項以下圖:

aggregation

類型 做用
none 不設置聚合狀態
shared 能夠獨立存在
composite 沒有這個屬性,整個類就不能存在

設置了這幾個值類圖並不會有什麼變化。

(11)isID:表明這個屬性值是不是這個類實例的惟一標識碼。選擇了這個選項類圖會有以下變化:

isID
能夠看到會在 name 屬性後面增長 「{id}」 符號

1.2.1.3 方法

Opeartion Properties

(1)raisedExeptions:添加可能會引起的異常。 這裏我定義了一個 MyException 類,而後在 printInfo() 方法中添加異常,添加後如圖所示:

raisedExeptions

添加後,類圖並不會有變化。

(2) concurrency:表明這個方法的併發性,這裏有三個選項,做用下表總結:

concurrency

類型 做用
sequential 按順序執行
guarded 後臺執行
concurrent 併發執行

改變後,類圖並不會有變化。

(3)isQuery:表明此方法若是並無改變系統的狀態。選擇了這個選項類圖會有以下的變化:

isQuery

會在 printInfo() 方法後出現 「{query}」 符號

(4)specification:對這個方法的做用進行說明 增長內容後,類圖並不會有變化。

基本上咱們日常能用到的類圖實體的元素都講解的差很少了,下一篇文章咱們繼續講解類圖關聯

下篇文章在此:UML 剖析(2) —— 類圖關聯和時序圖

參考書籍與文章:

《UML和模式應用》

《大象:Thinking in UML》

在Java中保留Stereotype

Active class versus passive class

快速上手UML類別圖的初級概念:類別(一)

Composite Vs Shared

UML Operation

相關文章
相關標籤/搜索