21分鐘入門UML

架構(gòu)師進(jìn)階必備技能

定義

UML是一種開放的方法,用于說明未巫、可視化窿撬、構(gòu)建和編寫一個正在開發(fā)的、面向?qū)ο蟮男鸱病④浖芗到y(tǒng)的制品的開放方法劈伴。

模型

  1. 功能模型:從用戶的角度展示系統(tǒng)的功能,包括用例圖握爷。
  2. 對象模型:采用對象跛璧,屬性严里,操作,關(guān)聯(lián)等概念展示系統(tǒng)的結(jié)構(gòu)和基礎(chǔ)追城,包括類別圖刹碾、對象圖。
  3. 動態(tài)模型:展現(xiàn)系統(tǒng)的內(nèi)部行為座柱。包括序列圖教硫,活動圖,狀態(tài)圖辆布。

教程

實現(xiàn)UML的工具有很多瞬矩,首先排除所有繪圖軟件,因為這些軟件繪制成的圖片無法用GIT來進(jìn)行版本控制锋玲,也很難集成在markdown里景用。我選擇PlantUML(類似于HTML的標(biāo)記性語言)來實現(xiàn)UML。

  1. 時序圖
    通過描述對象之間發(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 
    
    image.png
  2. 用例圖
    參與者與用例的交互媚污。下圖是飯店的用例圖。

    @startuml
    actor customer
    actor chef
    rectangle restaurant{
    customer --> (eat food)
    customer --> (pay for food)
    chef --> (cook food)
    }
    @enduml
    
    image.png
  3. 活動圖
    我一直是把活動圖當(dāng)流程圖來用廷雅,描述程序的處理過程耗美。下圖描述的是一個經(jīng)典的程序員笑話。

    @startuml
    (*) --> "buy 10 apples"
    if "is there watermelon " then;
      -->[true] "buy a apple"
      -right-> (*)
    else
      ->[false] "Something else"
      -->(*)
    endif
    @enduml
    
    image.png
  4. 組件圖
    表示組件是如何互相組織以構(gòu)建更大的組件或是軟件系統(tǒng)航缀。下圖是Web項目的組件圖商架。

    @startuml
    HTTP - [web server]
    [web server] - [app server]
    database "mysql" {
    [database]
    }
    [app server] - [database]
    @enduml
    
    image.png
  5. 狀態(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
    
    image.png
  6. 類圖
    用來描述類與類之間的關(guān)系蛇摸。

    1. 訪問權(quán)限控制

      @startuml
      class Dummy {
        - private field1
        # protected field2
        ~ package method1()
        + public method2()
      }
      @enduml
      
      image.png
    2. 繼承

      @startuml
      Father <|-- Son
      @enduml
      
      image.png
    3. 實現(xiàn)

      @startuml
      abstract class AbstractList
      interface List
      List <|.. AbstractList
      @enduml
      
      image.png
    4. 依賴
      一個類A使用到了另一個類B,而這種使用關(guān)系是具有偶然性的灿巧、臨時性的赶袄、非常弱的,表現(xiàn)在代碼層面抠藕,為類B作為參數(shù)被類A在某個method中使用饿肺,例如人和煙草的關(guān)系。

      @startuml
      Human ..> Cigarette
      @enduml
      
      image.png
    5. 關(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
      
      image.png
    6. 聚合
      關(guān)聯(lián)關(guān)系的一種特例颜说,他體現(xiàn)的是整體與部分购岗、擁有的關(guān)系,即has-a的關(guān)系门粪,此時整體與部分之間是可分離的喊积,他們可以具有各自的生命周期。

      @startuml
      Company o-- Human
      @enduml
      
      image.png
    7. 組合
      關(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   
    
image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末诡必,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子搔扁,更是在濱河造成了極大的恐慌爸舒,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件稿蹲,死亡現(xiàn)場離奇詭異扭勉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)苛聘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進(jìn)店門涂炎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人设哗,你說我怎么就攤上這事璧尸。” “怎么了熬拒?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵爷光,是天一觀的道長。 經(jīng)常有香客問我澎粟,道長蛀序,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任活烙,我火速辦了婚禮徐裸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘啸盏。我一直安慰自己重贺,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著气笙,像睡著了一般次企。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上潜圃,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天缸棵,我揣著相機(jī)與錄音,去河邊找鬼谭期。 笑死堵第,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的隧出。 我是一名探鬼主播踏志,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼胀瞪!你這毒婦竟也來了狰贯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤赏廓,失蹤者是張志新(化名)和其女友劉穎涵紊,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體幔摸,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡摸柄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了既忆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片驱负。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖患雇,靈堂內(nèi)的尸體忽然破棺而出跃脊,到底是詐尸還是另有隱情,我是刑警寧澤苛吱,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布酪术,位于F島的核電站,受9級特大地震影響翠储,放射性物質(zhì)發(fā)生泄漏绘雁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一援所、第九天 我趴在偏房一處隱蔽的房頂上張望庐舟。 院中可真熱鬧,春花似錦住拭、人聲如沸挪略。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽杠娱。三九已至挽牢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間墨辛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工趴俘, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留睹簇,地道東北人。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓寥闪,卻偏偏與公主長得像太惠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子疲憋,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 在UML 2.0的13種圖形中凿渊,類圖是使用頻率最高的UML圖之一。Martin Fowler在其著作《UML Di...
    雷雷_zll閱讀 13,224評論 0 14
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理缚柳,服務(wù)發(fā)現(xiàn)埃脏,斷路器,智...
    卡卡羅2017閱讀 134,628評論 18 139
  • 【講故事】早晨給主角想了個名字現(xiàn)在忘了…... 有這么一個推銷員秋忙,以電話推銷普通日用品過活彩掐。推銷員么,都不掙錢灰追,可...
    扣舷閱讀 497評論 6 13
  • 童年的泥巴路堵幽、磚瓦房,赤腳跳過的方格子弹澎,翻過的竹籬笆朴下。一起勾肩搭背上下課的鈴聲,放風(fēng)箏奔跑過的清風(fēng)……別了苦蒿,遠(yuǎn)去了...
    雅粒閱讀 444評論 0 0