大話設計模式——UML圖

一舵变、前言

很多博客里面都會涉及到UML圖,主要快速反映出程序的設計結構瘦穆,類與類之間的依賴關系等纪隙,所以這個技能還是需要掌握的。以后自己也要多畫一些扛或,這樣熟能生巧绵咱,便于掌握。

什么是UML

Unified Modeling Language (UML)又稱統(tǒng)一建模語言或標準建模語言告喊,是始于1997年一個OMG標準麸拄,它是一個支持模型化和軟件系統(tǒng)開發(fā)的圖形化語言派昧,為軟件開發(fā)的所有階段提供模型化和可視化支持,包括由需求分析到規(guī)格拢切,到構造和配置蒂萎。
UML規(guī)范用來描述建模的概念有,類(對象的)淮椰、對象五慈、關聯(lián)、職責主穗、行為泻拦、接口、用例忽媒、包争拐、順序、協(xié)作晦雨,以及狀態(tài)架曹。

繪制UML工具

補充知識——類間關系

  • 縱向關系:繼承
  • 橫向關系:依賴(Dependency)、關聯(lián)(Association)闹瞧、聚合(Aggregation)和組合(Composition)
    • 依賴:" ... uses a ..."绑雄,就是某個對象的功能依賴于另外的某個對象,而被依賴的對象只是作為一種工具在使用奥邮,而并不持有對它的引用万牺。

      public class Human{   
          public void breath(){   
              Air freshAir = new Air();   
              freshAir.releasePower();   
          }   
          
          public static void main(String[] args){   
              Human me = new Human();  
              while(true) { me.breath(); }   
          }  
      }   
      public class Air{   
          public void releasePower(){   
          //do sth.   
          }   
      }   
      
    • 關聯(lián):" ... has a ...",某個對象會長期的持有另一個對象的引用洽腺,而二者的關聯(lián)往往也是相互的脚粟。關聯(lián)的兩個對象彼此間沒有任何強制性的約束,只要二者同意已脓,可以隨時解除關系或是進行關聯(lián)珊楼,它們在生命期問題上沒有任何約定通殃。被關聯(lián)的對象還可以再被別的對象關聯(lián)度液,所以關聯(lián)是可以共享的。

      public class Human{   
          private ArrayList friends = new ArrayList();   
          public void makeFriend(Human human){ 
              friends.add(human); 
          }   
          public static void main(String[] args){   
              Human me = new Human();  
              while(true)   
                  me.makeFriend(mySchool.getStudent());   
          }   
      } 
      
    • 聚合:" ... owns a ..."画舌,聚合是強版本的關聯(lián)堕担,它暗含著一種所屬關系以及生命期關系。被聚合的對象還可以再被別的對象關聯(lián)曲聂,所以被聚合對象是可以共享的霹购。雖然是共享的,聚合代表的是一種更親密的關系朋腋。

      public class Human{   
          private Home myHome;   
          public void goHome(){   
              //在回家的路上   
              myHome.openDoor();   
              //看電視   
          }  
          public static void main(String[] args){   
              Human me = new Human();   
              while(true){   
                //上學  
                //吃飯   
                me.goHome();   
              }  
          }   
      }   
      
    • 組合:" ... is a part of ..."齐疙,組合是關系當中的最強版本膜楷,它直接要求包含對象對被包含對象的擁有以及包含對象與被包含對象生命期的關系。被包含的對象還可以再被別的對象關聯(lián)贞奋,所以被包含對象是可以共享的赌厅,然而絕不存在兩個包含對象對同一個被包含對象的共享。組合關系就是整體與部分的關系轿塔,部分屬于整體特愿,整體不存在,部分一定不存在勾缭,然而部分不存在整體是可以存在的揍障,說的更明確一些就是部分必須創(chuàng)生于整體創(chuàng)生之后,而銷毀于整體銷毀之前俩由。部分在這個生命期內可以被其它對象關聯(lián)甚至聚合毒嫡,但有一點必須注意,一旦部分所屬于的整體銷毀了幻梯,那么與之關聯(lián)的對象中的引用就會成為空引用审胚,這一點可以利用程序來保障。

      public class Human{   
          private Heart myHeart = new Heart();   
          public static void main(String[] args){   
              Human me = new Human();   
              while(true)  { myHeart.beat(); }   
          }   
      }   
      

注:依賴常常是局部變量礼旅、形參或者對靜態(tài)方法的調用膳叨,其他三個常常是成員變量。

二痘系、計算器程序的UML圖

關于上一篇文章中實現的計算器程序菲嘴,最終的UML圖可以表示為:

計算器程序的UML圖

需要注意連線箭頭的區(qū)別。圖中一個方框代表一個類汰翠,第一行代表類的名稱龄坪,第二行表示類包含的屬性,第三行代表類中包含的方法复唤。在屬性和方法前有一個“+”修飾健田,表示public屬性,而“-”代表private屬性佛纫,“#”代表protected屬性妓局。

三、UML圖的繪制

  • 總體UML圖
    動物需要氧氣和水呈宇,鳥類也是一種動物好爬,它還有翅膀。大雁甥啄、鴨子都屬于鳥類存炮,多個大雁形成雁群,而企鵝的生存和氣候相關。大雁區(qū)別于其他倆種穆桂,它能夠飛翔宫盔,而唐老鴨是一種特殊的鴨子,畢竟它可以說話享完。

    總體UML圖

  • 依賴關系
    動物類包含有生命的public屬性和新陳代謝和繁殖的public方法飘言。如果類名用斜體表示,則該類為抽象類驼侠。動物的生存需要氧氣姿鸿、水等,所以這是一個依賴關系倒源,用虛線箭頭表示即可苛预。

    public class Animal{
        public void metaBolism(Oxygen oxygen, Water water){
            ...
        }
    } 
    

依賴關系
  • 組合關系
    組合關系是一種強的“擁有”關系,體現了嚴格的部分與整體的關系笋熬,部分和整體的生命周期一樣热某。鳥和翅膀就是一個組合關系,組合關系用實心菱形+實線箭頭來表示胳螟。同時連線倆端還有數字來表示基數昔馋,表明一個類可以擁有幾個實例。這里糖耸,顯然一個鳥有倆個翅膀秘遏。如果一個類可以擁有無數個實例,則可以用n來表示嘉竟。下面的關聯(lián)關系邦危、聚合關系也是可以有基數的。

    public class Bird{
        private Wing wing;
        public Bird(){
            wing = new Wing();
        }
    }
    

組合關系
  • 聚合關系
    大雁是群居動物舍扰,每只大雁都屬于一個雁群倦蚪,一個雁群可以有多個大雁,所以這是一個聚合關系边苹。聚合表示一個弱擁有關系陵且,體現的是A對象可以包含B對象,但B對象不是A對象的一部分个束。聚合關系用空心菱形+實線箭頭來表示慕购。在雁群類中,有大雁數組對象arrayWideGoose播急。

    public class WideGooseAggregate{
        private WideGoose[] arrayWideGoose;
    }
    

聚合關系
  • 關聯(lián)關系
    企鵝是特別的鳥脓钾,會游不會飛。更重要的是桩警,它得生活在特定的氣候條件下,它需要知道氣候的變化情況昌妹,需要了解氣候規(guī)律捶枢。當一個類“知道”另一個類的時候握截,可以用關聯(lián)關系表示。關聯(lián)關系用實線箭頭表示烂叔。

    public class Penguin extends Animal{
        private Climate climate;
    }
    

關聯(lián)關系
  • 繼承關系
    繼承關系應該非常容易理解谨胞,不多BB,關系用空心三角形+實線表示蒜鸡。

    public class Bird extends Animal{
        ...
    }
    

繼承關系
  • 實現接口
    因為大雁胯努、企鵝和鴨中只有大雁能在高空飛翔,所以實現了飛翔接口逢防。接口圖的表示與類不同叶沛,接口在第一行有<<interface>>顯示,第二行是接口方法忘朝。書中還舉例了棒棒糖表示法表示接口灰署,可自行查看。實現接口用空心三角形+虛線表示局嘁。

    public interface IFly{
        ...
    }
    
    public interface ILanguage{
        ...
    }
    

實現接口

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末溉箕,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子悦昵,更是在濱河造成了極大的恐慌肴茄,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件但指,死亡現場離奇詭異独郎,居然都是意外死亡,警方通過查閱死者的電腦和手機枚赡,發(fā)現死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門氓癌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人贫橙,你說我怎么就攤上這事贪婉。” “怎么了卢肃?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵疲迂,是天一觀的道長。 經常有香客問我莫湘,道長尤蒿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任幅垮,我火速辦了婚禮腰池,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己示弓,他們只是感情好讳侨,可當我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著奏属,像睡著了一般跨跨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上囱皿,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天勇婴,我揣著相機與錄音,去河邊找鬼嘱腥。 笑死耕渴,一個胖子當著我的面吹牛,可吹牛的內容都是我干的爹橱。 我是一名探鬼主播萨螺,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼愧驱!你這毒婦竟也來了慰技?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤组砚,失蹤者是張志新(化名)和其女友劉穎吻商,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體糟红,經...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡艾帐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了盆偿。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片柒爸。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖事扭,靈堂內的尸體忽然破棺而出捎稚,到底是詐尸還是另有隱情,我是刑警寧澤求橄,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布今野,位于F島的核電站,受9級特大地震影響罐农,放射性物質發(fā)生泄漏条霜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦杯道、人聲如沸夹厌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽矛纹。三九已至,卻和暖如春光稼,著一層夾襖步出監(jiān)牢的瞬間或南,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工艾君, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留采够,地道東北人。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓冰垄,卻偏偏與公主長得像蹬癌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子虹茶,可洞房花燭夜當晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理逝薪,服務發(fā)現,斷路器蝴罪,智...
    卡卡羅2017閱讀 134,657評論 18 139
  • 在UML 2.0的13種圖形中董济,類圖是使用頻率最高的UML圖之一。Martin Fowler在其著作《UML Di...
    雷雷_zll閱讀 13,243評論 0 14
  • 忘記了uml類圖連線之間的關系要门,記錄一下虏肾。 1. 關聯(lián)關系 關聯(lián)(Association)關系是類與類之間最常用的...
    cutieagain閱讀 1,834評論 0 2
  • UML類圖是一種結構圖,用于描述一個系統(tǒng)的靜態(tài)結構欢搜。類圖以反映類結構和類之間關系為目的封豪,用以描述軟件系統(tǒng)的結構,是...
    美虎轆轆閱讀 631評論 0 0
  • 我渴望母親般的溫暖 那是五十度溫開水的觸感 把我徹底融化 藏著野花的田堤 下著細雨的鄉(xiāng)村 找著野菜的奶奶炒瘟、我吹埠、妹妹
    陳秀_6089閱讀 198評論 0 1