UML类图解义
小菜:“對(duì)了,我時(shí)常在一些技術(shù)書(shū)中看到這些類(lèi)圖表示,簡(jiǎn)單的還看得懂,有些標(biāo)記我很容易混淆。要不你給我講講吧。”
大鳥(niǎo):“這個(gè)其實(shí)多看多用就熟悉了。我給你舉一個(gè)例子,來(lái)看這樣一幅圖,其中就包括了UML類(lèi)圖中的基本圖示法?!?/p>
UML類(lèi)圖圖示樣例
大鳥(niǎo):“首先你看那個(gè)‘動(dòng)物’矩形框,它就代表一個(gè)類(lèi)(Class)。類(lèi)圖分三層,第一層顯示類(lèi)的名稱(chēng),如果是抽象類(lèi),則就用斜體顯示。第二層是類(lèi)的特性,通常就是字段和屬性。第三層是類(lèi)的操作,通常是方法或行為。注意前面的符號(hào),‘+’表示public,‘-’表示private,‘#’表示protected?!?/p>
大鳥(niǎo):“然后注意左下角的‘飛翔’,它表示一個(gè)接口圖,與類(lèi)圖的區(qū)別主要是頂端有<<interface>>顯示。第一行是接口名稱(chēng),第二行是接口方法。接口還有另一種表示方法,俗稱(chēng)棒棒糖表示法,就是唐老鴨類(lèi)實(shí)現(xiàn)了‘講人話’的接口。”
小菜:“為什么要是‘講人話’?”
大鳥(niǎo):“鴨子本來(lái)也有語(yǔ)言,只不過(guò)只有唐老鴨是能講人話的鴨子。”
小菜:“有道理?!?/p>
?
大鳥(niǎo):“接下來(lái)就可講類(lèi)與類(lèi),類(lèi)與接口之間的關(guān)系了。你可首先注意動(dòng)物、鳥(niǎo)、鴨、唐老鴨之間關(guān)系符號(hào)?!?/p>
小菜:“明白了,它們都是繼承的關(guān)系,繼承關(guān)系用空心三角形+實(shí)線來(lái)表示。”
大鳥(niǎo):“我舉的幾種鳥(niǎo)中,大雁是最能飛的,我讓它實(shí)現(xiàn)了飛翔接口。實(shí)現(xiàn)接口用空心三角形+虛線來(lái)表示?!?/p>
| |
|
大鳥(niǎo):“你看企鵝和氣候兩個(gè)類(lèi),企鵝是很特別的鳥(niǎo),會(huì)游不會(huì)飛。更重要的是,它與氣候有很大的關(guān)聯(lián)。我們不去討論為什么北極沒(méi)有企鵝,為什么它們要每年長(zhǎng)途跋涉??傊?#xff0c;企鵝需要‘知道’氣候的變化,需要‘了解’氣候規(guī)律。當(dāng)一個(gè)類(lèi)‘知道’另一個(gè)類(lèi)時(shí),可以用關(guān)聯(lián)(association)。關(guān)聯(lián)關(guān)系用實(shí)線箭頭來(lái)表示?!?/p>
class Penguin : Bird
{
?? private Climate climate;
大鳥(niǎo):“我們?cè)賮?lái)看大雁與雁群這兩個(gè)類(lèi),大雁是群居動(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ì)摘要說(shuō)明見(jiàn)附錄二)。聚合關(guān)系用空心的菱形+實(shí)線箭頭來(lái)表示?!?/span>
class WideGooseAggregate
{
?? private WideGoose[] arrayWideGoose;
}
大鳥(niǎo):“合成(Composition,也有翻譯成‘組合’的)是一種強(qiáng)的‘擁有’關(guān)系,體現(xiàn)了嚴(yán)格的部分和整體的關(guān)系,部分和整體的生命周期一樣[DPE]。在這里鳥(niǎo)和其翅膀就是合成(組合)關(guān)系,因?yàn)樗鼈兪遣糠趾驼w的關(guān)系,并且翅膀和鳥(niǎo)的生命周期是相同的。合成關(guān)系用實(shí)心的菱形+實(shí)線箭頭來(lái)表示。另外,你會(huì)注意到合成關(guān)系的連線兩端還有一個(gè)數(shù)字‘1’和數(shù)字‘2’,這被稱(chēng)為基數(shù)。表明這一端的類(lèi)可以有幾個(gè)實(shí)例,很顯然,一個(gè)鳥(niǎo)應(yīng)該有兩只翅膀。如果一個(gè)類(lèi)可能有無(wú)數(shù)個(gè)實(shí)例,則就用‘n’來(lái)表示。關(guān)聯(lián)關(guān)系、聚合關(guān)系也可以有基數(shù)的。”
class Bird
{
?? private Wing wing;
?? public Bird()
?? {
?????? wing = new Wing();
?? }
}
大鳥(niǎo):“動(dòng)物幾大特征,比如有新陳代謝,能繁殖。而動(dòng)物要有生命力,需要氧氣、水以及食物等。也就是說(shuō),動(dòng)物依賴(lài)于氧氣和水。他們之間是依賴(lài)關(guān)系(Dependency),用虛線箭頭來(lái)表示?!?/p>
abstract class Animal
{
?? public Metabolism (Oxygen oxygen,Water water)
?? {
?? }
}
小菜:“啊,看來(lái)UML類(lèi)圖也不算難呀?;叵肽翘煳颐嬖囶}寫(xiě)的代碼,我終于明白我為什么寫(xiě)得不成功了,原來(lái)一個(gè)小小的計(jì)算器也可以寫(xiě)出這么精彩的代碼,謝謝大鳥(niǎo)?!?/p>
大鳥(niǎo):“吼吼,記住哦,編程是一門(mén)技術(shù),更加是一門(mén)藝術(shù),不能只滿足于寫(xiě)完代碼運(yùn)行結(jié)果正確就完事,時(shí)??紤]如何讓代碼更加簡(jiǎn)練,更加容易維護(hù),容易擴(kuò)展和復(fù)用,只有這樣才可以真正得到提高。寫(xiě)出優(yōu)雅的代碼真的是一種很爽的事情。UML類(lèi)圖也不是一學(xué)就會(huì)的,需要有一個(gè)慢慢熟練的過(guò)程。所謂學(xué)無(wú)止境,其實(shí)這才是理解面向?qū)ο蟮拈_(kāi)始呢?!?br />
哈哈,很好理解,多多學(xué)習(xí)了!
轉(zhuǎn)載于:https://www.cnblogs.com/HeroBeast/archive/2008/01/23/1050615.html
總結(jié)
- 上一篇: mootools
- 下一篇: FileUtils工具类常用方法