UML及思維導圖的理解與使用
UML
Unified Modeling Language (UML)又稱統一建模語言或標準建模語言。UML從考慮系統的不同角度出發,定義了用例圖、類圖、物件圖、狀態圖、活動圖、序列圖、協作圖、構件圖、部署圖等9種圖。這些圖從不同的側面對系統進行描述。系統模型將這些不同的側面綜合成一致的整體,便於系統的分析和構造。儘管UML和其它開發工具還會設計出許多派生的檢視,但上述這些圖和其它輔助性的文件是軟體開發人員所見的最基本的構造。
圖聚集了相關的事物及其關係的組合,是軟體系統在不同角度的投影。圖由代表事物的頂點和代表關係的連通圖表示。下面對常用的幾類圖進行簡單介紹。
1. 類圖(ClassDiagram)
2. 物件圖(ObjectDiagram)。展現了一組物件以及它們之間的關係。物件圖是類圖的例項,幾乎使用與類圖完全相同的標示。
3. 用例圖(UseCaseDiagram)。展現了一組用例、參與者(actor)以及它們之間的關係。用例圖從使用者角度描述系統的靜態使用情況,用於建立需求模型。
4. 互動圖。用於描述物件間的互動關係,由一組物件和它們之間的關係組成,包含它們之間可能傳遞的訊息。互動圖又分為序列圖和協作圖,其中序列圖描述了以時間順序組織的物件之間的互動活動;協作圖強調收發訊息的物件的結構組織。
5. 狀態圖(StateDiagram)
6. 活動圖(ActiveDiagram)。一種特殊的狀態圖,展現了系統內一個活動到另一個活動的流程。活動圖有利於識別並行活動。
7. 元件圖(ComponentDiagram)。展現了一組元件的物理結構和元件之間的依賴關係。部件圖有助於分析和理解元件之間的相互影響程度。
8. 部署圖(DeploymentDiagram)。展現了執行處理節點以及其中的元件的配置。部署圖給出了系統的體系結構和靜態實施檢視。它與元件圖相關,通常一個節點包含一個或多個構建。
下面主要來介紹下時序圖和類圖。
時序圖
時序圖(Sequence Diagram)是顯示物件之間互動的圖,這些物件是按時間順序排列的。順序圖中顯示的是參與互動的物件及其物件之間訊息互動的順序。時序圖中包括的建模元素主要有:物件(Actor)、生命線(Lifeline)、控制焦點(Focus of control)、訊息(Message)等等。
角色
系統角色,可以是人、及其甚至其他的系統或者子系統。
物件
物件包括三種命名方式:
第一種方式包括物件名和類名;
第二中方式只顯示類名不顯示物件名,即表示他是一個匿名物件;
第三種方式只顯示物件名不顯示類明。
生命線
生命線在順序圖中表示為從物件圖示向下延伸的一條虛線,表示物件存在的時間,同一水平生命線上的表示在同一時刻,如下圖
啟用
當一個物件沒有被啟用期時,該物件處於休眠狀態,什麼事都不做,但它仍然存在,等待新的訊息來啟用它。當一條訊息被傳遞給物件的時候,它會觸發該物件的某個行為,這就是說該物件被激活了。當一個物件處於啟用期時,表明該物件正處於執行某個動作。
啟用用一個細長的矩陣框(在生命線上)表示。
訊息
訊息一般分為同步訊息(Synchronous Message),非同步訊息(Asynchronous Message)和返回訊息(Return Message)等
下面是一個完整時序圖示例:
類圖
類圖描述的是一種靜態關係,在系統的整個生命週期都是有效的,是面向物件系統的建模中最常見的圖。
在UML類圖中,常見的有以下幾種關係:泛化(Generalization), 實現(Realization),關聯(Association),聚合(Aggregation),組合(Composition),依賴(Dependency)。
一個完整的類圖一般包括3個基本元件:類名、屬性、方法:
泛化
泛化(generalization):表示is-a的關係,是物件之間耦合度最大的一種關係,子類繼承父類的所有細節。直接使用語言中的繼承表達。在類圖中使用帶三角箭頭的實線表示,箭頭從子類指向父類。
實現
是一種類與介面的關係,表示類是介面所有特徵和行為的實現。在類圖中使用帶三角箭頭的虛線表示,箭頭從實現類指向介面
關聯
關聯可以是雙向的,也可以是單向的。雙向的關聯可以有兩個箭頭或者沒有箭頭,單向的關聯有一個箭頭。物件之間一種引用關係,比如客戶類與訂單類之間的關係。這種關係通常使用類的屬性表達。
即我們程式碼中成員類變數的關係。
上圖中,老師與學生是雙向關聯,老師有多名學生,學生也可能有多名老師。但學生與某課程間的關係為單向關聯,一名學生可能要上多門課程,課程是個抽象的東西他不擁有學生。
聚合
他體現的是整體與部分、擁有的關係,即has-a的關係,此時整體與部分之間是可分離的,他們可以具有各自的生命週期,部分可以屬於多個整體物件,也可以為多個整體物件共享;比如計算機與CPU、汽車和輪胎;表現在程式碼層面上,和單向關聯關係是一致的,只能從語義級別來區分,
在類圖使用空心的菱形表示,菱形表示整體;
組合
是整體與部分的關係, 但部分不能離開整體而單獨存在.他體現的是一種contains-a的關係, 如公司和部門是整體和部分的關係, 沒有公司就不存在部門,這種關係比聚合更強,也稱為強聚合;整體的生命週期結束也就意味著部分的生命週期結束;
用帶實心菱形的實線表示,菱形指向整體
依賴
對於兩個相對獨立的物件,當一個物件負責構造另一個物件的例項,或者依賴另一個物件的服務時,這兩個物件之間主要體現為依賴關係。
與關聯關係不同的是,依賴關係是以引數變數的形式傳入到依賴類中的,依賴是單向的,要避免雙向依賴。一般來說,不應該存在雙向依賴。
依賴是一種弱關聯,只要一個類用到另一個類,但是和另一個類的關係不是太明顯的時候(可以說是“uses”了那個類),就可以把這種關係看成是依賴。
【程式碼表現】:區域性變數、方法的引數或者對靜態方法的呼叫
下面展示一張網路上的類圖方便大家理解~
思維導圖
思維導圖是一種將思維形象化的方法。,是一種影象式思維的工具以及一種利用影象式思考輔助工具。思維導圖是使用一箇中央關鍵詞或想法引起形象化的構造和分類的想法;它用一箇中央關鍵詞或想法以輻射線形連線所有的代表字詞、想法、任務或其它關聯專案的圖解方式。
常用的思維導圖工具有MindManager和Xmind,這裡介紹Xmind的使用方法。
官方入門使用教程
Xmind使用起來較為簡單,但我們平時總結分析時,更應該注意提高自己的發散性思維,系統的分析問題,再用Xmind總結歸納。