軟件設(shè)計(jì)師UML知識(shí)點(diǎn):第六章

字號(hào):

前言
     建模實(shí)際上是對(duì)真實(shí)世界進(jìn)行簡(jiǎn)化,從而可以更好地理解你要開(kāi)發(fā)的系統(tǒng)。使用UML中基本的建筑塊如:類、接口、關(guān)系、協(xié)作、組件、依賴、繼承等,可以建立你想要的模型。還可以利用第五章介紹的機(jī)制擴(kuò)充UML來(lái)表達(dá)問(wèn)題領(lǐng)域獨(dú)特的東西。
     圖是你組織這些建筑塊的方式。圖代表著一系列的元素,這些元素常常被畫(huà)成用點(diǎn)(事物)和?。P(guān)系)相連的圖。利用圖來(lái)從不同的視角來(lái)觀察系統(tǒng)。由于沒(méi)有一個(gè)復(fù)雜的系統(tǒng)可以從一個(gè)透視圖弄明白,UML定義了一些圖使得我們可以獨(dú)立地從幾個(gè)不同的視角來(lái)了解系統(tǒng)。
     好的圖使得你要開(kāi)發(fā)的系統(tǒng)是易于理解和可以接近的。選擇好的圖對(duì)系統(tǒng)建模讓你找到系統(tǒng)中真正要問(wèn)的問(wèn)題,幫助你闡述清楚你的系統(tǒng)。
    術(shù)語(yǔ)和概念
     系統(tǒng)是組織起來(lái)完成特定目標(biāo)的一組子系統(tǒng)。系統(tǒng)可以用一組模型,可能來(lái)自不同的視角,進(jìn)行描述。子系統(tǒng)是一組元素,其中一些通過(guò)包含的另外的元素組成特定的行為。模型是對(duì)系統(tǒng)進(jìn)行語(yǔ)義上的抽象,它是整個(gè)真實(shí)系統(tǒng)的簡(jiǎn)化,為了更好地理解系統(tǒng)而創(chuàng)建的。圖是一系列的元素,這些元素常常被畫(huà)成用點(diǎn)(事物)和?。P(guān)系)相連的圖。利用圖來(lái)從不同的視角來(lái)觀察系統(tǒng)。
    系統(tǒng)代表著你要開(kāi)發(fā)的事物,通過(guò)不同的模型從不同的透視圖來(lái)觀察系統(tǒng),這些透視圖以圖的形式表達(dá)。
     在對(duì)真實(shí)世界進(jìn)行建模的時(shí)候,你可以發(fā)現(xiàn)不管你的問(wèn)題處于什么樣的領(lǐng)域,你都會(huì)創(chuàng)建相同的圖,因?yàn)樗麄兇碇ㄓ玫哪P偷耐ㄓ玫囊?。通常,你利用下面的圖來(lái)觀察系統(tǒng)的靜態(tài)部分:
    1. 類圖(Class Diagram)
    2. 對(duì)象圖(Object Diagram)
    3. 組件圖(Compoment Diagram)
    4. 分布圖(Deployment Diagram)
    使用下面的五種額外的圖來(lái)觀察系統(tǒng)動(dòng)態(tài)的方面:
    1. Usecase圖
    2. 序列圖(Sequence Diagram)
    3. 協(xié)作圖(Collaboration Diagram)
    4. 狀態(tài)圖(Statechart Diagram)
    5. 活動(dòng)圖(Activity Diagram)
    UML定義了這五種圖。
    結(jié)構(gòu)化圖(Structural Diagrams)
    1. 類圖(Class Diagram) 類、接口和協(xié)作
    2. 對(duì)象圖(Object Diagram) 對(duì)象
    3. 組件圖(Compoment Diagram) 組件
    4. 分布圖(Deployment Diagram) 節(jié)點(diǎn)(Notes)
    類圖
     類圖顯示了一組類、接口和協(xié)作以及它們之間的關(guān)系。類圖在面向?qū)ο蟮慕TO(shè)計(jì)中是很常用的。利用類圖闡明系統(tǒng)的靜態(tài)的設(shè)計(jì)。包含活動(dòng)類(active classes)的類圖通常用來(lái)說(shuō)明看到的系統(tǒng)靜態(tài)過(guò)程。
    對(duì)象圖
     對(duì)象圖顯示了一組對(duì)象和他們之間的關(guān)系。使用對(duì)象圖來(lái)說(shuō)明數(shù)據(jù)結(jié)構(gòu),類圖中的類或組件等的實(shí)例的靜態(tài)快照。對(duì)象圖和類圖一樣反映系統(tǒng)的靜態(tài)過(guò)程,但它是從實(shí)際的或原型化的情景來(lái)表達(dá)的。
    組件圖
     組件圖顯示了一些組件和它們之間的關(guān)系。使用組件圖來(lái)說(shuō)明系統(tǒng)的靜態(tài)實(shí)現(xiàn)。組件圖和類圖是有聯(lián)系的,通常一個(gè)組件可以映射成一個(gè)或多個(gè)類,接口或協(xié)作。
    分布圖
     分布圖顯示了一些節(jié)點(diǎn)和它們之間的關(guān)系。使用分布圖來(lái)說(shuō)明系統(tǒng)的靜態(tài)結(jié)構(gòu)。分布圖和組件圖是有聯(lián)系的,通常一個(gè)節(jié)點(diǎn)封裝了一個(gè)或多個(gè)組件。
    動(dòng)作圖(Behavioral Diagrams)
    UML中定義的動(dòng)作圖包括:
    1. Usecase圖
    2. 序列圖(Sequence Diagram)
    3. 協(xié)作圖(Collaboration Diagram)
    4. 狀態(tài)圖(Statechart Diagram)
    5. 活動(dòng)圖(Activity Diagram)
    Usecase圖
     Usecase圖顯示了一些Usecase和角色(特殊的類)和他們的關(guān)系。使用usecase圖來(lái)描述系統(tǒng)靜態(tài)的功能場(chǎng)景。Usecase圖對(duì)于組織和模型化系統(tǒng)的動(dòng)作是很重要的。
    序列圖
     序列圖是一種交互圖(interaction diagram),強(qiáng)調(diào)的是時(shí)間和消息的次序。一個(gè)序列圖顯示了一系列的對(duì)象和在這些對(duì)象之間發(fā)送和接收的消息。對(duì)象通常是命名或匿名的類的實(shí)例,也可以代表其他事物的實(shí)例,例如協(xié)作、組件和節(jié)點(diǎn)。使用序列圖來(lái)說(shuō)明系統(tǒng)的動(dòng)態(tài)情況。
    協(xié)作圖
     協(xié)作圖是一種交互圖(interaction diagram),強(qiáng)調(diào)的是發(fā)送和接收消息的對(duì)象之間的組織結(jié)構(gòu)。一個(gè)協(xié)作圖顯示了一系列的對(duì)象和在這些對(duì)象之間的聯(lián)系以及對(duì)象間發(fā)送和接收的消息。對(duì)象通常是命名或匿名的類的實(shí)例,也可以代表其他事物的實(shí)例,例如協(xié)作、組件和節(jié)點(diǎn)。使用協(xié)作圖來(lái)說(shuō)明系統(tǒng)的動(dòng)態(tài)情況。
    注意:序列圖和協(xié)作圖是同構(gòu)的,它們相互之間可以轉(zhuǎn)化而不損失信息。
    狀態(tài)圖
     狀態(tài)圖顯示了一個(gè)狀態(tài)機(jī),由狀態(tài)、轉(zhuǎn)換、事件和活動(dòng)組成。使用狀態(tài)圖說(shuō)明系統(tǒng)動(dòng)態(tài)情況。狀態(tài)圖對(duì)于建模接口的動(dòng)作、類的動(dòng)作或協(xié)作的動(dòng)作是重要的。狀態(tài)圖強(qiáng)調(diào)的是事件驅(qū)動(dòng)的對(duì)象的動(dòng)作,這在對(duì)反應(yīng)式系統(tǒng)的建模是相當(dāng)重要的。
    活動(dòng)圖:
     活動(dòng)圖顯示了系統(tǒng)中從一個(gè)活動(dòng)到另一個(gè)活動(dòng)的流程?;顒?dòng)圖顯示了一些活動(dòng),他們很象傳統(tǒng)的流程圖有序列或分支。活動(dòng)圖對(duì)于給系統(tǒng)的功能建模是很重要的。活動(dòng)圖強(qiáng)調(diào)的是對(duì)象之間的流程控制。
    通用建模技巧
    1. 對(duì)系統(tǒng)的不同視進(jìn)行建模
    l 決定采用哪個(gè)視才能地表達(dá)系統(tǒng)的結(jié)構(gòu),以及暴露出項(xiàng)目的技術(shù)風(fēng)險(xiǎn)。前面討論的五種圖是很好的開(kāi)始點(diǎn)。
    l 對(duì)每一種視圖決定要畫(huà)那些圖,通常一個(gè)視圖會(huì)對(duì)應(yīng)多個(gè)圖
    l 作為你的過(guò)程計(jì)劃的一部分,決定那些圖是要作為項(xiàng)目文檔保存。
    l 不要認(rèn)為一次能夠?qū)D畫(huà)好,準(zhǔn)備一個(gè)裝廢紙的房間。
    例如,如果你為一個(gè)簡(jiǎn)單的應(yīng)用建模。你可能只需要其中一部分視圖。
    Usecase 視圖
     usecase圖
    設(shè)計(jì)(Design)視圖
     類圖
    交互圖
    處理(Process)視圖
     不需要
    展開(kāi)視圖 不需要
    實(shí)現(xiàn)視圖 不需要
    如果你是一個(gè)反應(yīng)式的系統(tǒng)或系統(tǒng)的重點(diǎn)在處理流程上,你可能想包括狀態(tài)圖和活動(dòng)圖來(lái)建立系統(tǒng)的動(dòng)作模型。
    同樣的,如果你是一個(gè)Client/Server系統(tǒng),你可能想用組件圖和分布圖來(lái)為你的系統(tǒng)的物理細(xì)節(jié)進(jìn)行建模。
    最后,如果你是要對(duì)一個(gè)復(fù)雜的、分布式的系統(tǒng)建模,你需要使用所有的UML的圖來(lái)表達(dá)系統(tǒng)的結(jié)構(gòu)和項(xiàng)目的技術(shù)風(fēng)險(xiǎn),如下所示:
    Usecase視圖
     Usecase圖
    活動(dòng)圖
    設(shè)計(jì)視圖
     類圖(結(jié)構(gòu)化建模)
    交互圖(動(dòng)作建模)
    狀態(tài)圖(動(dòng)作建模)
    過(guò)程視圖
     類圖(結(jié)構(gòu)化建模)
    交互圖(動(dòng)作建模)
    實(shí)現(xiàn)視圖
     組件圖
    展開(kāi)視圖
     分布圖
    1. 不同抽象層次建模
     你不僅要從不同的視角觀察系統(tǒng),還要系統(tǒng)進(jìn)行不同層次的抽象,因?yàn)閰⒓禹?xiàng)目開(kāi)發(fā)的人可能對(duì)同一個(gè)系統(tǒng)的視圖需要不同的抽象層次。對(duì)于程序員來(lái)說(shuō),他希望看到的是類的屬性、方法,而對(duì)于一個(gè)系統(tǒng)分析員使用usecase場(chǎng)景來(lái)說(shuō)只要看到存在這么個(gè)類就可以了,這里程序員要求的抽象層次較底層??梢酝ㄟ^(guò)隱藏或顯示不同層次的細(xì)節(jié)來(lái)實(shí)現(xiàn)不同抽象層次的模型,或者創(chuàng)建不同層次抽象的圖。
     考慮你的讀者的需要,從一個(gè)給定的模型開(kāi)始
     如果你的讀者使用模型是構(gòu)造一個(gè)實(shí)現(xiàn),他需要的是較低層的抽象,也就是說(shuō)他需要更多的細(xì)節(jié)。如果他利用概念模型只是為了和最終用戶交流,他需要的是高層次的抽象,不需要細(xì)節(jié)的東西。
    2. 復(fù)雜視圖建模
     首先確信沒(méi)有更好的方法可以利用高層次的抽象表達(dá)要表達(dá)的信息,即便是刪除一部分圖或保留細(xì)節(jié)到另外一部分。
     如果你隱藏了你所能隱藏的細(xì)節(jié)而你的圖還是很復(fù)雜,考慮將一部分元素分組放到包里或放到較高層次的協(xié)作中,然后在你的圖中只畫(huà)這些包和協(xié)作。
     如果你的圖還是很復(fù)雜,使用注釋或顏色來(lái)鉤出你的重點(diǎn)好引起讀者的注意
     如果你的圖依然很復(fù)雜,哈哈,打印出來(lái),貼到墻上,將讀者叫來(lái)親自講解給他聽(tīng)吧。希望他能明白……其實(shí)你可以自己慢慢研究,最后發(fā)現(xiàn)簡(jiǎn)化還是可以的。