UML类图解义 (来自《大话设计模式》)
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
小菜:“對(duì)了,我時(shí)常在一些技術(shù)書中看到這些類圖表示,簡(jiǎn)單的還看得懂,有些標(biāo)記我很容易混淆。要不你給我講講吧。”
大鳥:“這個(gè)其實(shí)多看多用就熟悉了。我給你舉一個(gè)例子,來看這樣一幅圖,其中就包括了UML類圖中的基本圖示法。”
UML類圖圖示樣例
大鳥:“首先你看那個(gè)‘動(dòng)物’矩形框,它就代表一個(gè)類(Class)。類圖分三層,第一層顯示類的名稱,如果是抽象類,則就用斜體顯示。第二層是類的特性,通常就是字段和屬性。第三層是類的操作,通常是方法或行為。注意前面的符號(hào),‘+’表示public,‘-’表示private,‘#’表示protected。”
大鳥:“然后注意左下角的‘飛翔’,它表示一個(gè)接口圖,與類圖的區(qū)別主要是頂端有<<interface>>顯示。第一行是接口名稱,第二行是接口方法。接口還有另一種表示方法,俗稱棒棒糖表示法,就是唐老鴨類實(shí)現(xiàn)了‘講人話’的接口。”
小菜:“為什么要是‘講人話’?”
大鳥:“鴨子本來也有語言,只不過只有唐老鴨是能講人話的鴨子。”
小菜:“有道理。”
大鳥:“接下來就可講類與類,類與接口之間的關(guān)系了。你可首先注意動(dòng)物、鳥、鴨、唐老鴨之間關(guān)系符號(hào)。”
小菜:“明白了,它們都是繼承的關(guān)系,繼承關(guān)系用空心三角形+實(shí)線來表示。”
大鳥:“我舉的幾種鳥中,大雁是最能飛的,我讓它實(shí)現(xiàn)了飛翔接口。實(shí)現(xiàn)接口用空心三角形+虛線來表示。”
大鳥:“你看企鵝和氣候兩個(gè)類,企鵝是很特別的鳥,會(huì)游不會(huì)飛。更重要的是,它與氣候有很大的關(guān)聯(lián)。我們不去討論為什么北極沒有企鵝,為什么它們要每年長(zhǎng)途跋涉。總之,企鵝需要‘知道’氣候的變化,需要‘了解’氣候規(guī)律。當(dāng)一個(gè)類‘知道’另一個(gè)類時(shí),可以用關(guān)聯(lián)(association)。關(guān)聯(lián)關(guān)系用實(shí)線箭頭來表示。”
大鳥:“我們?cè)賮砜创笱闩c雁群這兩個(gè)類,大雁是群居動(dòng)物,每只大雁都是屬于一個(gè)雁群,一個(gè)雁群可以有多只大雁。所以它們之間就滿足聚合(Aggregation)關(guān)系。聚合表示一種弱的‘擁有’關(guān)系,體現(xiàn)的是A對(duì)象可以包含B對(duì)象,但B對(duì)象不是A對(duì)象的一部分[DPE](DPE表示此句摘自《設(shè)計(jì)模式》(第2版),詳細(xì)摘要說明見附錄二)。聚合關(guān)系用空心的菱形+實(shí)線箭頭來表示。”
大鳥:“合成(Composition,也有翻譯成‘組合’的)是一種強(qiáng)的‘擁有’關(guān)系,體現(xiàn)了嚴(yán)格的部分和整體的關(guān)系,部分和整體的生命周期一樣[DPE]。在這里鳥和其翅膀就是合成(組合)關(guān)系,因?yàn)樗鼈兪遣糠趾驼w的關(guān)系,并且翅膀和鳥的生命周期是相同的。合成關(guān)系用實(shí)心的菱形+實(shí)線箭頭來表示。另外,你會(huì)注意到合成關(guān)系的連線兩端還有一個(gè)數(shù)字‘1’和數(shù)字‘2’,這被稱為基數(shù)。表明這一端的類可以有幾個(gè)實(shí)例,很顯然,一個(gè)鳥應(yīng)該有兩只翅膀。如果一個(gè)類可能有無數(shù)個(gè)實(shí)例,則就用‘n’來表示。關(guān)聯(lián)關(guān)系、聚合關(guān)系也可以有基數(shù)的。”
class Bird
{
?? private Wing wing;
?? public Bird()
?? {
?????? wing = new Wing();
?? }
}
大鳥:“動(dòng)物幾大特征,比如有新陳代謝,能繁殖。而動(dòng)物要有生命力,需要氧氣、水以及食物等。也就是說,動(dòng)物依賴于氧氣和水。他們之間是依賴關(guān)系(Dependency),用虛線箭頭來表示。”
abstract class Animal
{
?? public Metabolism (Oxygen oxygen,Water water)
?? {
?? }
}
小菜:“啊,看來UML類圖也不算難呀。回想那天我面試題寫的代碼,我終于明白我為什么寫得不成功了,原來一個(gè)小小的計(jì)算器也可以寫出這么精彩的代碼,謝謝大鳥。”
大鳥:“吼吼,記住哦,編程是一門技術(shù),更加是一門藝術(shù),不能只滿足于寫完代碼運(yùn)行結(jié)果正確就完事,時(shí)常考慮如何讓代碼更加簡(jiǎn)練,更加容易維護(hù),容易擴(kuò)展和復(fù)用,只有這樣才可以真正得到提高。寫出優(yōu)雅的代碼真的是一種很爽的事情。UML類圖也不是一學(xué)就會(huì)的,需要有一個(gè)慢慢熟練的過程。所謂學(xué)無止境,其實(shí)這才是理解面向?qū)ο蟮拈_始呢。”
轉(zhuǎn)載于:https://my.oschina.net/qihh/blog/57381
總結(jié)
以上是生活随笔為你收集整理的UML类图解义 (来自《大话设计模式》)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hdu - 3415 Max Sum o
- 下一篇: ASP.NET MVC3 异步刷新