【二】、UML基礎知識
UML概述
UML是一個通用的視覺化建模語言,不同於程式語言,它通過一些標準的圖形符號和文字來對系統進行建模。用於對軟體進行描述、視覺化處理、構建軟體系統的文件。是一套總結了以往建模技術的經驗並吸收了當今最優秀成果的標準建模方法。
UML的結構
檢視
- 使用者檢視:以使用者的觀點表示系統的目標,它是所有檢視的核心,該檢視描述系統的需求。
- 結構檢視:表示系統的靜態行為,描述系統的靜態元素,如包、類與物件,以及它們之間的關係。
- 行為檢視:表示系統的動態行為,描述系統的組成元素,如物件在系統執行時的互動關係。
- 實現檢視:表示系統中邏輯元素的分佈,描述系統中的檔案以及它們之間的關係。
- 環境檢視:表示系統中物理元素的分佈,描述系統中的硬體裝置以及它們之間的關係。

圖
- 用例圖
- 類圖、物件圖、包圖、組合結構圖
- 狀態圖、活動圖、順序圖、通訊圖、定時圖、互動概覽圖
- 元件圖
- 部署圖
模型元素
- 模型元素包括事物以及事物與事物之間的關係
- 事物是UML的重要組成部分,它代表任何可以定義的東西
- 事物之間的關係把事物聯絡在一起,組成有意義的結構模型
- 每一個模型元素都有一個與之相對應的圖形元素
- 同一個模型元素可以在不同的UML圖中使用
- 但無論在哪個圖中,同一個模型元素都保持相同的意義和符號
通用機制
- UML提供的通用機制為模型元素提供額外的註釋、語義和其他資訊,包括擴充套件機制,允許使用者對UML進行擴充套件。
類和類圖
- 類(Class)封裝了資料和行為,是物件導向的重要組成部分。
- 類是具有相同屬性、操作、關係的物件集合的總稱。
- 在系統中每個類具有一定的職責,職責指的是類所擔任的任務,即類要完成什麼樣的功能,要承擔什麼樣的義務。一個類可以有多種職責,設計得好的類一般只有一種職責。
- 類的屬性即類的資料職責,類的操作即類的行為職責。
- 類圖使用出現在系統中的不同類來描述系統的靜態結構,它用來描述不同的類以及它們之間的關係。
類的UML圖示
在UML類圖中,類一般由三部分組成:
- 第一部分是類名:每個類都必須有一個名字,類名是一個字串
按照Java語言的命名規範,類名中每一個單詞的首字母均大寫。

- 第二部分是類的屬性:屬性是指類的性質,即類的成員變數。一個類可以有任意多個屬性,也可以沒有屬性。
按照Java語言的命名規範,屬性名中的第一個單詞全小寫,之後每個單詞首字母大寫(駝峰命名法)

- 第三部分是類的操作:操作是類的任意一個例項物件都擁有的行為,是類的成員方法。
按照Java語言的命名規範,屬性名中的第一個單詞全小寫,之後每個單詞首字母大寫(駝峰命名法)

類之間的關係
關聯關係
- 關聯關係是類與類之間最常用的一種關係,它是一種結構化關係,用於表示一類物件與另一類物件之間有聯絡。
- 在UML類圖中,用實線連線有關聯關係的物件所對應的類,在使用Java、C++和C#等程式語言實現關聯關係時,通常將一個類的物件作為另一個類的成員變數
- 在使用類圖表示關聯關係時可以在關聯線上標註角色名

- 雙向關聯

- 單向關聯

- 自關聯


- 多重性關聯:多重性關聯關係又稱為重數性關聯關係,表示兩個關聯物件在數量上的對應關係。在UML中,物件之間的多重性可以直接在關聯直線上用一個數字或一個數字範圍表示


- 聚合關聯
- 聚合關係表示整體與部分的關係
- 在聚合關係中,成員物件是整體物件的一部分,但是成員物件可以脫離整體物件獨立存在
- 在UML中,聚合關係用帶空心菱形的直線表示


- 組合關聯
- 組合關係也表示類之間整體和部分的關係,但是在組合關係中整體物件可以控制成員物件的生命週期,一旦整體物件不存在,成員物件也將不存在。
- 成員物件與整體物件之間具有同生共死的關係。
- 在UML中,組合關係用帶實心菱形的直線表示。


依賴關係
- 依賴關係是一種使用關係,特定事物的改變有可能會影響到使用該事物的其他事物,在需要表示一個事物使用另一個事物時使用依賴關係。
- 大多數情況下,依賴關係體現在某個類的方法使用另一個類的物件作為引數
- 在UML中,依賴關係用帶箭頭的虛線表示,由依賴的一方指向被依賴的一方。


在系統實現階段,依賴關係通常通過三種方式來實現:
- 將一個類的物件作為另一個類中方法的引數
- 在一個類的方法中將另一個類的物件作為其區域性變數
- 在一個類的方法中呼叫另一個類的靜態方法
泛化關係
- 泛化關係也就是繼承關係,用於描述父類與子類之間的關係,父類又稱為基類或超類,子類又稱為派生類。
- 在UML中,泛化關係用帶空心三角形的直線來表示
- 在程式碼實現時,使用物件導向的繼承機制來實現泛化關係,在**Java語言中使用extends關鍵字,在C++/C#中使用冒號":"**來實現。


介面與實現關係
- 介面之間也可以有與類之間關係類似的繼承關係和依賴關係
- 介面與類之間存在一種實現關係,在這種關係中,類實現了介面,類中的操作實現了介面中宣告的操作
- 在UML中,類與介面之間的實現關係用帶空心三角形的虛線來表示



註釋

例項——命令模式

公眾號
能欣賞我的文章的話,可以順便關注一下公眾號,彼此欣賞,何必孤獨:
