统一建模语言

**統一塑模語言**（英語：Unified Modeling Language，縮寫 **UML**）是非專利的第三代塑模和規約語言。UML 是一種開放的方法，用於說明、視覺化、構建和編寫一個正在開發的、物件導向的、軟體密集系統的製品的開放方法。UML 展現了一系列最佳工程實踐，這些最佳實踐在對大規模，複雜系統進行塑模方面，特別是在軟體架構層次已經被驗證有效。

這個語言由葛來迪・布區，伊瓦爾・雅各布森與詹姆士・蘭寶於 1994 年至 1995 年間，在 Rational Software 公司中開發，於 1996 年又進一步發展。UML 整合了 Booch，物件塑模技術和物件導向程式設計的概念，將這些方法融合為單一的，通用的，並且可以廣泛使用的塑模語言。UML 打算成為可以對並行和分散式系統的標準塑模語言。

1997 年，UML 被物件管理組織接納為標準，並在此之後受該組織管理。2005 年，UML 被國際標準化組織接納為一種標準，自此，該標準被定期修訂以涵蓋 UML 的最新版本。然而，在軟體工程中，大多數從業者不使用 UML，而是產生非正式的手繪圖；不過，這些圖例中仍往往包括 UML 的元素。

## 模型

在 UML 系統開發中有三個主要的模型：

* **功能模型**：從使用者的角度展示系統的功能，包括使用個案圖。
* **物件模型**：採用物件，屬性，操作，關聯等概念展示系統的結構和基礎，包括類別圖、物件圖。
* **動態模型**：展現系統的內部行為。包括序列圖，活動圖，狀態圖。

區分 UML 模型和 UML 圖是非常重要的，UML 圖，包括使用個案圖、協同運作圖、活動圖、序列圖、部署圖、構件圖、類圖、狀態圖，是模型中資訊的圖形表達方式，但是 UML 模型獨立於 UML 圖存在。UML 的目前版本只提供了模型資訊的交換，而沒有提供圖資訊的交換。

UML 使用一套與 Java 語言或其他物件導向語言等價物，同時也是本體論等價物的圖形標記。

UML 並不是一個方法學，也不要求使用一個方法學，但是 UML 對於 Rational 統一過程來說是必不可少的。

## 圖形

UML 2.2 中一共定義了 14 種圖示。為方便了解，可分類成右側的結構。

結構性圖形（_Structure diagrams_）強調的是系統式的塑模：

　
: * 靜態圖（static diagram）
  * 類圖
  * 物件圖
  * 套件圖
* 實現圖（implementation diagram）
  * 組件圖
  * 部署圖
* 剖面圖
* 複合結構圖

行為式圖形（_Behavior diagrams_）強調系統模型中觸發的事件：

　
: * 活動圖
* 狀態圖
* 使用個案圖

互動性圖形（_Interaction diagrams_），屬於行為圖形的子集合，強調系統模型中的資料流程：

　
: * 通信圖
* 互動概述圖（UML 2.0）
* 時序圖（UML 2.0）
* 時間圖（UML 2.0）

UML 並不限定 UML 要素型別非得是某圖形上的型別。一般來說，每個 UML 要素大約會出現在圖的所有型別。這種彈性在 UML 2.0 部分被限定。

為了要保持工程圖的傳統，在您的 UML 圖上加注用途、約束、或意圖永遠無傷大雅。

UML 2 為了符合模型驅動架構（Model Driven Architecture）的需求做了大幅度的修改除在圖形基礎上擴充及變化了部份的展現方式外，也增加了一些圖形標準元件，比前一版多出了由循序圖與互動圖所混合而成的互動概圖（Interaction Overview Diagram）、強調時間點的時序圖（Timing Diagram）與合成結構圖（Composite Structure Diagram），此外，在 UML2 中，UML1 合作圖轉變為通訊圖（Communication Diagram），且在循序圖中也添加了互動框（Interaction Frame）的概念，還有增加一些運算子（如 sd、loop、alt 等）。同時，UML2 支援模型驅動架構（MDA）倡議，提供穩定的基礎架構，容許軟體開發程式增添自動化作業。此外，MDA 把大型的系統分解成幾個元件模型，並與其他模型保持連結，使得 UML 更加精確。

## 概念

UML 從來源中使用相當多的概念。下面僅列代表性的概念。

對於結構而言

　
: 執行者，屬性，類，元件，介面，物件，包。

對於行為而言

　
: 活動，事件，訊息，方法，狀態，用例。

對於關係而言

　
: 聚合，關聯，組合，相依，廣義化（或繼承）。

其他概念

　
: * 構造型 — 這規範符號應用到的模型
* 多重性 — 多重性標記法與資料庫塑模基數對應，例如：1, 0..1, 1..\*
* 角色

* * * * * *

## UML 應用程式

### 開源軟體和自由軟體中

* ArgoUML，UML 設計工具（首頁）
* Dia，可繪製流程圖以及包含 UML 在內的多種圖形（首頁 （頁面存檔備份，存於網際網路檔案館））
* Draw.io，線上流程圖繪製工具，提供各種圖形模板 (首頁 （頁面存檔備份，存於網際網路檔案館）)
* GitMind，可線上繪製心智圖及流程圖包括 UML，泳道圖等各種圖 （首頁 （頁面存檔備份，存於網際網路檔案館））
* Umbrello，強大而又介面友好的 UML 工具。是 KDE 的一部分。（首頁 （頁面存檔備份，存於網際網路檔案館））
* UMLet，用 Java 實現的 UML 簡單繪圖工具（首頁 （頁面存檔備份，存於網際網路檔案館））
* Unimodeler，Linux 下支援 9 種 UML 圖和向量列印的工具（homepage （頁面存檔備份，存於網際網路檔案館））
* astah\*，Java 和 UML 開發者環境（首頁 （頁面存檔備份，存於網際網路檔案館））
* Jumli，用 Java 實現，支援 C++/C#/Java 以及解析 / 生成原始碼（首頁 （頁面存檔備份，存於網際網路檔案館））
* omondo UML，Eclipse 的 UML 外掛程式，提供有限功能的免費版（需註冊）和完整的商業版（首頁 （頁面存檔備份，存於網際網路檔案館））
* Poseidon for UML，專業 UML 工具，提供免費的社群版（Community Edition）。從開源專案 ArgoUML 而來。請參見（首頁）。
* Violet 是為學生、教師以及只需要快速建立簡單 UML 的應用者而設計的工具。GPL 授權（首頁 （頁面存檔備份，存於網際網路檔案館））
* SiSy, SimpleSystem

## 參見

* 整合式開發環境
* 物件約束語言（OCL）
* 物件塑模技術
* 物件導向的程式設計
* 物件導向的系統分析
* XMI，為了交換 UML 模型的基於 XML 的格式
* C4 模型

## 參考文獻

## 外部連結

* 官方網站
* Unified Modeling Language at FOLDOC
* Message board for UML
* A free UML tutorial （頁面存檔備份，存於網際網路檔案館）
* UML Jokes
* Article Precise Use Cases （頁面存檔備份，存於網際網路檔案館） from Methods & Tools （頁面存檔備份，存於網際網路檔案館）
* Article Database modeling in UML （頁面存檔備份，存於網際網路檔案館） from Methods & Tools （頁面存檔備份，存於網際網路檔案館）