UML 及 StarUml

UML

UML:統一建模語言(Unified Modeling Language)。在 UML 系統開發中有三個主要的模型:java

  • 功能模型:從用戶的角度展現系統的功能,包括用例圖。
  • 對象模型:採用對象,屬性,操做,關聯等概念展現系統的結構和基礎,包括類圖、對象圖、包圖。
  • 動態模型:展示系統的內部行爲。包括時序圖,活動圖,狀態圖。

如下主要總結開發過程當中經常使用的類圖和時序圖,及類之間的各類關係。node

類圖

類圖使用類來描述系統的靜態結構,類圖包含類和它們之間的關係,它描述系統內所聲明的類,但它沒有描述系統運行時類的行爲。git

在UML類圖中,類通常由三部分組成:github

  • 類名:每一個類都必須有一個名字,類名是一個字符串。
  • 屬性(Attributes):屬性是指類的性質,即類的成員變量。類能夠有任意多個屬性,也能夠沒有屬性。
  • 操做(Operations):操做是類的任意一個實例對象均可以使用的行爲,操做是類的成員方法。

類之間的關係

關聯關係

關聯關係(Association)是類與類之間最經常使用的一種關係,它是一種結構化關係,用於表示一個類對象與另外一個類對象之間有聯繫。併發

在 UML 類圖中,用實線鏈接有關聯的對象所對應的類。在實現關聯關係時,一般將一個類的對象做爲另外一個類的屬性。函數

單向關聯

類的關聯關係能夠是單向的,單向關聯用帶箭頭的實線表示。工具

connect_singe

public class Customer
{
    private Address address;
    ……
}

public class Address
{
    ……
}
雙向關聯

默認狀況下,關聯是雙向的。oop

connect_double

public class Customer
{
    private Product[] products;
    ……
}
public class Product
{
    private Customer customer;
    ……
}
自關聯

在系統中可能會存在一些類的屬性對象類型爲該類自己,這種特殊的關聯關係稱爲自關聯。this

connect_self

重數性關聯

重數性關聯關係又稱爲多重性關聯關係(Multiplicity),表示一個類的對象與另外一個類的對象鏈接的個數。在 UML 中多重性關係能夠直接在關聯直線上增長一個數字表示與之對應的另外一個類的對象的個數。spa

connect_multiple

表示方式 多重性說明
1..1 表示另外一個類的一個對象只與一個該類對象有關係
0..* 表示另外一個類的一個對象與零個或多個該類對象有關係
1..* 表示另外一個類的一個對象與一個或多個該類對象有關係
0..1 表示另外一個類的一個對象沒有或只與一個該類對象有關係
m..n 表示另外一個類的一個對象與最少m、最多n個該類對象有關係 (m<=n)

聚合關係

聚合關係(Aggregation)表示一個總體與部分的關係。一般在定義一個總體類後,再去找出這個總體類的一些成員類,該總體類和成員類之間就造成了聚合關係。

在聚合關係中,成員類是總體類的一部分,即成員對象是總體對象的一部分,可是成員對象能夠脫離總體對象獨立存在。在 UML 中,聚合關係用帶空心菱形的直線表示。

contains

public class Car
{
    private Engine engine;
    public Car(Engine engine)
   {
        this.engine = engine;
    }
    
    public void setEngine(Engine engine)
    {
        this.engine = engine;
    }
    ……
}
public class Engine
{
    ……
}

組合關係

組合關係(Composition)也表示類之間總體和部分的關係,可是組合關係中部分和總體具備統一的生存期。一旦總體對象不存在,部分對象也將不存在,部分對象與總體對象之間具備同生共死的關係。

在組合關係中,成員類是總體類的一部分,並且總體類能夠控制成員類的生命週期,即成員類的存在依賴於總體類。在UML中,組合關係用帶實心菱形的直線表示。

has

public class Head
{
    private Mouth mouth;
    public Head()
    {
    mouth = new Mouth();
    }
    ……
}

public class Mouth
{
    ……
}

依賴關係

依賴關係(Dependency)是一種使用關係,特定事物的改變有可能會影響到使用該事物的其餘事物,在須要表示一個事物使用另外一個事物時使用依賴關係。大多數狀況下,依賴關係體如今某個類的方法使用另外一個類的對象做爲參數。

在UML中,依賴關係用帶箭頭的虛線表示,由依賴的一方指向被依賴的一方。

depend

public class Driver
{
    public void drive(Car car)
    {
        car.move();
    }
    ……
}
public class Car
{
    public void move()
    {
        ......
    }
    ……
}

泛化關係

泛化關係(Generalization)也就是繼承關係,也稱爲「is-a-kind-of」關係,泛化關係用於描述父類與子類之間的關係,父類又稱做基類或超類,子類又稱做派生類。在 UML 中,泛化關係用帶空心三角形的直線來表示。

extends

實現關係

實現關係(Realization)是類實現了接口,類中的操做實現了接口中所聲明的操做。在UML中,類與接口之間的實現關係用帶空心三角形的虛線來表示。

implent

時序圖

時序圖用於表示對象之間的交互,重點表示對象之間發送消息的時間順序。它以圖形化的方式描述了在一個用例或操做的執行過程當中對象如何經過消息相互交互,說明了消息如何在對象之間被髮送和接收以及發送的順序。時序圖容許直觀地表示出對象的生存期,在生存期內,對象能夠對輸入消息作出響應,還能夠發送信息。

seq

一個複雜的時序圖能夠劃分爲幾個小塊,每個小塊稱爲一個交互片斷(Interaction Fragment)。每一個交互片斷由一個大方框包圍,在方框左上角的間隔區內標註該交互片斷的操做類型,該操做類型用操做符表示,經常使用的操做符包括:

  • alt:多條路徑,條件爲真時執行。
  • opt:任選,僅當條件爲真時執行。
  • par:並行,每一片斷都併發執行。
  • loop:循環,片斷可屢次執行。

StarUML

開發過程當中須要繪製類圖和時序圖,經常使用的軟件有:StarUML,PowerDesigner 等,在線的有:ProcessOn。這裏我最經常使用的是 StarUML,由於它顏值高~~~

軟件破解

StarUML 是一款收費軟件,但它的破解頗有意思。在安裝 StarUML 的 www/license/node 目錄下,找到 LicenseManagerDomain.js,在校驗函數中直接返回用戶信息便可。

license_verify

類之間的關係

在繪製類之間的關係時,對應 UML 的工具以下圖所示:

class_relationship

其中實現的關係,要達到帶空心三角形的虛線表示,則不要使用這個 Interface Realization,而應該在 Composite Structure 目錄下找到 Realization 的工具。

reelization

複雜時序圖

在繪製時序圖的時候,會趕上選擇,循環等複雜的表示,StarUML 能夠利用組合片斷來完成。

  1. 添加組合片斷到時序圖上:

seq_alt_1

  1. 若是有多條分支,則在右邊菜單中,拷貝 Operand:

seq_alt_2

  1. 更更名字和操做類型,默認是seq,還有 alt,opt,loop 等。

seq_alt_3

  1. 填寫不一樣分支的「guard」 信息(如雙擊左邊對應分支的空白處,輸入的[yes]和[no]),再處理對應的消息:

seq_alt_4

本文發表於我的博客:http://lavnfan.github.io/,歡迎指教。

相關文章
相關標籤/搜索