架構(gòu)師進(jìn)階必備技能
定義
UML是一種開放的方法,用于說明未巫、可視化窿撬、構(gòu)建和編寫一個正在開發(fā)的、面向?qū)ο蟮男鸱病④浖芗到y(tǒng)的制品的開放方法劈伴。
模型
- 功能模型:從用戶的角度展示系統(tǒng)的功能,包括用例圖握爷。
- 對象模型:采用對象跛璧,屬性严里,操作,關(guān)聯(lián)等概念展示系統(tǒng)的結(jié)構(gòu)和基礎(chǔ)追城,包括類別圖刹碾、對象圖。
- 動態(tài)模型:展現(xiàn)系統(tǒng)的內(nèi)部行為座柱。包括序列圖教硫,活動圖,狀態(tài)圖辆布。
教程
實現(xiàn)UML的工具有很多瞬矩,首先排除所有繪圖軟件,因為這些軟件繪制成的圖片無法用GIT來進(jìn)行版本控制锋玲,也很難集成在markdown里景用。我選擇PlantUML(類似于HTML的標(biāo)記性語言)來實現(xiàn)UML。
-
時序圖
通過描述對象之間發(fā)送消息的時間順序顯示多個對象之間的動態(tài)協(xié)作惭蹂。
->表示消息傳遞伞插,-->表示異步消息傳遞,note [left | right]對消息進(jìn)行說明盾碗。@startuml a --> b: how are you; note right: greeting; a -> a: i am thinking; b -> a: fine; @enduml
-
用例圖
參與者與用例的交互媚污。下圖是飯店的用例圖。@startuml actor customer actor chef rectangle restaurant{ customer --> (eat food) customer --> (pay for food) chef --> (cook food) } @enduml
-
活動圖
我一直是把活動圖當(dāng)流程圖來用廷雅,描述程序的處理過程耗美。下圖描述的是一個經(jīng)典的程序員笑話。@startuml (*) --> "buy 10 apples" if "is there watermelon " then; -->[true] "buy a apple" -right-> (*) else ->[false] "Something else" -->(*) endif @enduml
-
組件圖
表示組件是如何互相組織以構(gòu)建更大的組件或是軟件系統(tǒng)航缀。下圖是Web項目的組件圖商架。@startuml HTTP - [web server] [web server] - [app server] database "mysql" { [database] } [app server] - [database] @enduml
-
狀態(tài)圖
描述一個對象在其生存期間的動態(tài)行為。下圖是線程的狀態(tài)圖芥玉。@startuml [*] -> ready : start; ready -> running : get cpu; running -> ready : lost cpu; running -down-> block : io, sleep, locked; block -up-> ready : io return, sleep over, get lock; running -> [*] : complete; @enduml
-
類圖
用來描述類與類之間的關(guān)系蛇摸。-
訪問權(quán)限控制
@startuml class Dummy { - private field1 # protected field2 ~ package method1() + public method2() } @enduml
-
繼承
@startuml Father <|-- Son @enduml
-
實現(xiàn)
@startuml abstract class AbstractList interface List List <|.. AbstractList @enduml
-
依賴
一個類A使用到了另一個類B,而這種使用關(guān)系是具有偶然性的灿巧、臨時性的赶袄、非常弱的,表現(xiàn)在代碼層面抠藕,為類B作為參數(shù)被類A在某個method中使用饿肺,例如人和煙草的關(guān)系。@startuml Human ..> Cigarette @enduml
-
關(guān)聯(lián)
強(qiáng)依賴關(guān)系幢痘,表現(xiàn)在代碼層面唬格,為被關(guān)聯(lián)類B以類屬性的形式出現(xiàn)在關(guān)聯(lián)類A中家破。@startuml class Water class Human Human --> Water @enduml
-
聚合
關(guān)聯(lián)關(guān)系的一種特例颜说,他體現(xiàn)的是整體與部分购岗、擁有的關(guān)系,即has-a的關(guān)系门粪,此時整體與部分之間是可分離的喊积,他們可以具有各自的生命周期。@startuml Company o-- Human @enduml
組合
關(guān)聯(lián)關(guān)系的一種特例玄妈,他體現(xiàn)的是一種contains-a的關(guān)系乾吻,這種關(guān)系比聚合更強(qiáng),也稱為強(qiáng)聚合拟蜻;他同樣體現(xiàn)整體與部分間的關(guān)系绎签,但此時整體與部分是不可分的,整體的生命周期結(jié)束也就意味著部分的生命周期結(jié)束酝锅。
@startuml Human *-- Brain @enduml
-