# 統一建模語言(Unified Modeling Language, UML)
uml 是一種繪制軟件藍圖的標準語言
可以對軟件密集型的系統進行可視化、詳述、構造和文檔化
## UML的模型概念
> @todo
### UML的構造塊
#### 事物
##### 結構事物 (類、接口、協作、用況、主動類、構件、制品、節點)
``通常是模型的 *靜態部分*(不參與邏輯 只作為工具), 描述概念元素或物理元素``
類: 具有相同屬性、相同操作、相同關系、相同語義的對象的描述
接口:定義了一組操作規范(非操作實現) 描述了外部的可見行為。可定常量,不需要屬性
協作:定義了一個交互。具有結構、行為、和維度。由一組共同工作提供協作行為的角色和其他元素構成的群體。一個類/對象可以參與幾個協作
用況:用于構建模型中的行為事物,是一組動作序列都描述。通過協作實現。
主動類: 能夠啟動控制活動,對象元素行為和其他元素的行為并發 其余和類 一樣
構件:系統設計的模塊化部件,實現隱藏,對外只提供接口
制品: 系統中物理的可代替的部件;比如現成的動態庫、源代碼文件、腳本
節點:運行時存在的物理元素、表示計算機資源、有一些記憶/處理能力
``以上是基本結構事物 還有變體 參與者、信號、使用程序(一種類)、進程和線程(兩種主動類)、應用、文檔、文件、庫、頁和表(一種制品)等``









##### 行為事物 (交互、狀態機、活動、)
``UML模型中的動態部分 代表了跨越時間和空間的行為``
交互(interaction):共同完成一定任務的一組對象/角色之間交換的信息組成。 一個對象的群體/單個操作可以用一個交互來描述。交互設計其他元素 包括消息、動作、連接件(對象之間的鏈接)。
狀態機(state machine):描述一個對象/交互在生命期內響應事件所經歷的狀態序列以及對事件的響應。
活動(activity):計算過程執行的步驟序列。
``交互注重一系列相互起作用的對象、狀態機注重一定之間內一個對象的生命周期、活動注重的是步驟之間的流而不關心那個對象執行那個步驟``

")

##### 分組事物 (包)

##### 注釋事物 ()

##### 關系 (依賴、關聯、泛化、實現 )
``關系構造塊可以寫出結構良好的模型``
依賴:其中一個元素(獨立元素)發生變化 影響另一個元素(依賴元素)
關聯:類之間的結構關系。描述了一組鏈(是實例對象之間的連接)
《聚合》是一種特殊類型的關聯 描述了整體與部分件的結構關系
泛化:一種特殊/一般的關系。特殊元素(子元素)基于一般元素(父元素)而建立 子繼承了父的結構和行為
實現:類目之間的語義關系。一個類目指向由另一個類目保證執行的合約。
兩種情景: 接口和實現它們的類/構件之間; 用況和實現 它們的協作之間
``以上是基本關系事物 可能有變體 精華、跟蹤、包含、擴展``




#### 圖
``一組元素的圖形表現 一般吧圖化成定點(代表事物)和弧(代表關系的連通圖)``
*類圖*、*對象圖*、*構件圖*、*組合結構圖*、*用況圖*、*順序圖*、*通信圖*、*狀態圖*、*活動圖*、*部署圖*、*包圖*、*定時圖*、*交互概覽圖*
類圖:展示了一組類、接口、協作和他們之間的關系
對象圖:展示了一組對象以及他們之間的關系
構造圖:展示了一個封裝的類和他的接口、端口、以及又內嵌的構件和連接件構成的內部結構
用況圖 : 展示了一組用況、參與者(一種特殊的類)以及他們之間的關系
順序圖/通信圖:都是交互圖 展示了一種交互,有一組對象或角色以及他們之間可能發送的消息構成 。 交互圖專注于系統的動態視圖。順序圖強調消息的時間次序;通信圖強調收發消息的對象或角色的結構組織
狀態圖: 由狀態、轉義、時間和活動組成。展示了一個狀態機(對象的動態視圖)
活動圖 : 將進程或其他計算結構展示為計算機內部一步步的控制流和數據流;系統的動態視圖;強調對象間的控制流程
部署圖: 展示了對運行時的處理節點以及在其中生成的構件的配署 (靜態部署視圖)
制品圖: 計算機中的一個系統的物理結構
包圖: 模塊本身分解而成的組織單元以及它們的依賴關系
定時圖: 一種交互圖,消息跨越不同對象/角色的實際時間,而不僅僅關心消息的相對順序
交互概覽圖: 活動圖和順序圖都而混合物
### UML規則
#### 語法和語義規則
* 命名 (為事物、關系、圖起的名字
* 范圍 (使名字具有特定含義的語境
* 可見性 (這些名字如何讓其他成員看見和使用
* 完整性 (事物如何正確 一致的相互聯系
* 執行 (運行或模擬動態模型的含義是什么
為了應對開發期間的變化 有時候也建造這樣的模型
* 省略 ( 因此某些元素以簡化視圖
* 不完全 ( 可能遺漏了某些元素
* 不一致 ( 不保證模型的完整性
#### UML中的公共機制
* 詳述 (提供了對構造塊的語法和語義的文字敘述
* 修飾 (唯一和直接的圖形表示符號 如 是否是抽象類 屬性操作是否可見 +公共 # 受保護 -私有
* 通用劃分(類和對象的劃分 接口和實現的分離 類型和角色的分離。如 對象:名稱有下劃線
* 擴展機制(
衍型:擴展UML的詞匯 用來構造新的構造塊
標記值:擴展了UML衍型的特性
約束:擴展了UML構造塊的語義
## 體系結構
``要求從多個角度去觀察系統 最終 用戶、分析人員、開發人員、測試人員。。。``
軟件結構是一組有關下屬內容的總要決策:
* 軟件系統的組織
* 對組成系統的結構元素及其接口的選擇
* 像元素間的協作鎖描述的那樣的行為
* 將這些結構元素和行為元素組合刀逐步增大的子系統中
* 知道這種組織的體系結構風格:靜態、動態元素及其他們的接口 協作和組成
``軟件體系結構不僅關心結構和行為 還關心 用法 功能 性能 彈性 復用 可理解 。。。``
**最好用5個互聯的視圖來描述軟件的密集型系統的體系結構 設計、實現、用況、交互、部署視圖**
用況視圖: 被最終用戶 分析人員 測試人員看到的系統行為的用況組成。(業務邏輯?)
設計視圖: 包含類 接口 協作
交互視圖:系統的不同部分之間的控制流,包括并發/同步機制。主要針對性能 可伸縮性 系統吞吐量
實現視圖: 裝配和發布物理系統的制品
部署視圖:包含了形成系統硬件拓撲結構的節點
## 軟件的開發周期
任務>業務模型>需求>分析和設計>實現>測試>部署