版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
UML周期表放規(guī)定和應(yīng)用細(xì)則一、UML周期表概述
UML(統(tǒng)一建模語(yǔ)言)周期表是面向?qū)ο蠓治雠c設(shè)計(jì)領(lǐng)域中的一種重要工具,用于規(guī)范和簡(jiǎn)化UML圖的設(shè)計(jì)與使用。它通過(guò)定義一系列常用的UML圖及其應(yīng)用場(chǎng)景,幫助開(kāi)發(fā)者在建模過(guò)程中提高效率和質(zhì)量。本指南將詳細(xì)介紹UML周期表的規(guī)定和應(yīng)用細(xì)則,以確保使用者能夠正確理解和應(yīng)用。
(一)UML周期表的基本規(guī)定
1.周期表的構(gòu)成:UML周期表主要包含以下幾類(lèi)圖:
-用例圖
-類(lèi)圖
-時(shí)序圖
-狀態(tài)圖
-活動(dòng)圖
-組件圖
-部署圖
2.圖的應(yīng)用場(chǎng)景:
-用例圖:用于描述系統(tǒng)功能和用戶交互。
-類(lèi)圖:用于表示系統(tǒng)中的類(lèi)及其關(guān)系。
-時(shí)序圖:用于展示對(duì)象之間消息傳遞的時(shí)間順序。
-狀態(tài)圖:用于描述對(duì)象狀態(tài)變化及其觸發(fā)條件。
-活動(dòng)圖:用于表示系統(tǒng)中的業(yè)務(wù)流程。
-組件圖:用于展示系統(tǒng)中的組件及其依賴(lài)關(guān)系。
-部署圖:用于描述系統(tǒng)物理部署結(jié)構(gòu)。
(二)UML周期表的使用規(guī)范
1.命名規(guī)范:
-圖的名稱(chēng)應(yīng)簡(jiǎn)潔明了,反映其功能。
-類(lèi)和對(duì)象的命名應(yīng)符合駝峰命名法或下劃線命名法。
2.圖例規(guī)范:
-使用標(biāo)準(zhǔn)的UML圖例符號(hào),確保一致性。
-避免使用非標(biāo)準(zhǔn)的符號(hào)和標(biāo)記。
二、UML周期表的應(yīng)用細(xì)則
(一)用例圖的應(yīng)用
1.繪制步驟:
-(1)確定系統(tǒng)邊界。
-(2)識(shí)別參與者。
-(3)定義用例。
-(4)繪制用例圖,連接參與者和用例。
2.注意事項(xiàng):
-用例應(yīng)具有明確的觸發(fā)條件和結(jié)果。
-參與者應(yīng)具有唯一的標(biāo)識(shí)。
(二)類(lèi)圖的應(yīng)用
1.繪制步驟:
-(1)識(shí)別系統(tǒng)中的類(lèi)。
-(2)定義類(lèi)的屬性和方法。
-(3)確定類(lèi)之間的關(guān)系(繼承、關(guān)聯(lián)、依賴(lài)等)。
-(4)繪制類(lèi)圖,展示類(lèi)及其關(guān)系。
2.注意事項(xiàng):
-類(lèi)的命名應(yīng)反映其功能。
-屬性和方法應(yīng)具有明確的類(lèi)型和訪問(wèn)權(quán)限。
(三)時(shí)序圖的應(yīng)用
1.繪制步驟:
-(1)確定對(duì)象。
-(2)定義消息傳遞的順序。
-(3)繪制時(shí)序圖,展示對(duì)象和消息傳遞。
2.注意事項(xiàng):
-消息傳遞應(yīng)具有明確的時(shí)間順序。
-對(duì)象的激活和終止應(yīng)清晰表示。
(四)狀態(tài)圖的應(yīng)用
1.繪制步驟:
-(1)確定對(duì)象的狀態(tài)。
-(2)定義狀態(tài)轉(zhuǎn)換的條件。
-(3)繪制狀態(tài)圖,展示狀態(tài)和轉(zhuǎn)換。
2.注意事項(xiàng):
-狀態(tài)轉(zhuǎn)換應(yīng)具有明確的觸發(fā)條件。
-狀態(tài)的命名應(yīng)簡(jiǎn)潔明了。
(五)活動(dòng)圖的應(yīng)用
1.繪制步驟:
-(1)確定業(yè)務(wù)流程的步驟。
-(2)定義活動(dòng)的順序和條件。
-(3)繪制活動(dòng)圖,展示活動(dòng)和流程。
2.注意事項(xiàng):
-活動(dòng)的命名應(yīng)反映其功能。
-活動(dòng)的順序和條件應(yīng)明確表示。
(六)組件圖的應(yīng)用
1.繪制步驟:
-(1)確定系統(tǒng)中的組件。
-(2)定義組件的依賴(lài)關(guān)系。
-(3)繪制組件圖,展示組件及其關(guān)系。
2.注意事項(xiàng):
-組件的命名應(yīng)反映其功能。
-組件的依賴(lài)關(guān)系應(yīng)明確表示。
(七)部署圖的應(yīng)用
1.繪制步驟:
-(1)確定系統(tǒng)的物理部署結(jié)構(gòu)。
-(2)定義節(jié)點(diǎn)和組件的部署關(guān)系。
-(3)繪制部署圖,展示節(jié)點(diǎn)和組件。
2.注意事項(xiàng):
-節(jié)點(diǎn)的命名應(yīng)反映其功能。
-節(jié)點(diǎn)和組件的部署關(guān)系應(yīng)明確表示。
三、總結(jié)
UML周期表是面向?qū)ο蠓治雠c設(shè)計(jì)中的一種重要工具,通過(guò)規(guī)范和簡(jiǎn)化UML圖的設(shè)計(jì)與使用,幫助開(kāi)發(fā)者在建模過(guò)程中提高效率和質(zhì)量。本指南詳細(xì)介紹了UML周期表的規(guī)定和應(yīng)用細(xì)則,包括用例圖、類(lèi)圖、時(shí)序圖、狀態(tài)圖、活動(dòng)圖、組件圖和部署圖的應(yīng)用步驟和注意事項(xiàng)。正確理解和應(yīng)用UML周期表,將有助于提高建模的準(zhǔn)確性和一致性。
二、UML周期表的應(yīng)用細(xì)則(續(xù))
(八)用例圖的應(yīng)用(續(xù))
1.繪制步驟(續(xù))
1.(1)確定系統(tǒng)邊界:
具體操作:明確系統(tǒng)所包含的功能范圍以及不包含的功能范圍。這通常通過(guò)與系統(tǒng)用戶(參與者)的溝通以及分析系統(tǒng)目標(biāo)來(lái)完成。
實(shí)用技巧:可以使用一個(gè)“沉默的外部實(shí)體”來(lái)代表系統(tǒng)之外的、不直接交互但影響系統(tǒng)的因素(如外部數(shù)據(jù)源)。明確邊界有助于界定參與者和用例的合理性。
示例:在一個(gè)在線圖書(shū)銷(xiāo)售系統(tǒng)的用例圖中,系統(tǒng)邊界可以定義為“處理圖書(shū)購(gòu)買(mǎi)、支付、訂單管理和用戶賬戶相關(guān)操作”。而系統(tǒng)外部的因素,如“郵政服務(wù)”可以作為沉默的外部實(shí)體處理圖書(shū)的物理配送。
2.(2)識(shí)別參與者:
具體操作:識(shí)別所有與系統(tǒng)交互的外部實(shí)體,這些實(shí)體可以是人、其他系統(tǒng)或設(shè)備。參與者是主動(dòng)發(fā)起用例的實(shí)體。
實(shí)用技巧:采用“角色”的思維來(lái)思考參與者。問(wèn)自己:“誰(shuí)會(huì)使用這個(gè)功能?”“誰(shuí)需要從系統(tǒng)中獲取信息?”“誰(shuí)會(huì)對(duì)系統(tǒng)的運(yùn)行產(chǎn)生影響?”
示例:在線圖書(shū)銷(xiāo)售系統(tǒng)的參與者可能包括“普通用戶”、“管理員”、“支付網(wǎng)關(guān)”(作為一個(gè)系統(tǒng)參與者)。
3.(3)定義用例:
具體操作:為每個(gè)參與者定義其能請(qǐng)求系統(tǒng)執(zhí)行的操作或任務(wù)。用例應(yīng)描述系統(tǒng)為參與者提供的價(jià)值,通常以動(dòng)詞短語(yǔ)開(kāi)頭(如“查詢(xún)圖書(shū)”、“下訂單”)。
實(shí)用技巧:每個(gè)用例應(yīng)具有一個(gè)清晰的、用戶可理解的名稱(chēng)。用例描述應(yīng)簡(jiǎn)潔,但足夠詳細(xì)地說(shuō)明用例的目的、參與者、前置條件、基本流程和后置條件??梢圆捎谩皡⑴c者:用例名稱(chēng)”的格式來(lái)組織。
示例:針對(duì)“普通用戶”和“管理員”,可能的用例包括:“普通用戶:瀏覽圖書(shū)”、“普通用戶:搜索圖書(shū)”、“普通用戶:下訂單”、“管理員:管理圖書(shū)目錄”、“管理員:處理訂單”。
4.(4)繪制用例圖,連接參與者和用例:
具體操作:使用標(biāo)準(zhǔn)的UML用例圖符號(hào)(參與者矩形、用例橢圓、關(guān)聯(lián)線)來(lái)繪制圖形。將參與者放置在系統(tǒng)的邊界之外,用例放置在邊界之內(nèi),用關(guān)聯(lián)線連接參與者和它所參與的用例。
實(shí)用技巧:確保圖面布局清晰、簡(jiǎn)潔??梢允褂冒ň匦危﹣?lái)組織相關(guān)的用例,特別是當(dāng)用例較多時(shí),可以提高可讀性。例如,可以將所有與用戶賬戶相關(guān)的用例(如“注冊(cè)”、“登錄”、“修改個(gè)人信息”)放在一個(gè)名為“用戶管理”的包中。
示例:在繪圖中,將代表“普通用戶”和“管理員”的參與者放在圖的左側(cè),將“瀏覽圖書(shū)”、“搜索圖書(shū)”、“下訂單”、“管理圖書(shū)目錄”、“處理訂單”等用例橢圓放在右側(cè),并用線條分別連接用戶到其對(duì)應(yīng)的用例。
2.注意事項(xiàng)(續(xù))
用例的粒度:用例應(yīng)保持在一個(gè)合理的粒度級(jí)別。太細(xì)的用例會(huì)使圖變得雜亂,太粗的用例則可能隱藏重要的交互細(xì)節(jié)。通常,一個(gè)用例對(duì)應(yīng)一個(gè)用戶故事或一個(gè)屏幕上的操作流程是比較合適的。
前置條件與后置條件:雖然不總是在用例圖中詳細(xì)表示,但理解每個(gè)用例的前置條件(執(zhí)行用例前必須滿足的條件)和后置條件(用例執(zhí)行完成后的結(jié)果狀態(tài))對(duì)于深入理解用例至關(guān)重要。這些信息通常在用例描述文檔中詳細(xì)說(shuō)明。
擴(kuò)展用例與泛化用例:對(duì)于復(fù)雜的用例,可以使用擴(kuò)展(<擴(kuò)展>關(guān)系)來(lái)表示特定條件下的附加流程,或者使用泛化(<泛化>關(guān)系)來(lái)表示共享相同核心行為的多個(gè)用例(例如,“搜索圖書(shū)”和“按ISBN搜索圖書(shū)”可以泛化自一個(gè)“搜索”的基用例)。
(九)類(lèi)圖的應(yīng)用(續(xù))
1.繪制步驟(續(xù))
1.(1)識(shí)別系統(tǒng)中的類(lèi):
具體操作:通過(guò)分析用例圖、業(yè)務(wù)需求或領(lǐng)域知識(shí),識(shí)別出系統(tǒng)中需要建模的核心概念,這些概念通??梢赞D(zhuǎn)化為類(lèi)。思考:“系統(tǒng)需要存儲(chǔ)哪些信息?”“系統(tǒng)需要執(zhí)行哪些操作?”“哪些是系統(tǒng)中的關(guān)鍵實(shí)體?”
實(shí)用技巧:可以采用“名詞識(shí)別法”,從需求文檔或用例描述中提取名詞,并判斷這些名詞是否代表類(lèi)。同時(shí),注意識(shí)別名詞短語(yǔ)中的動(dòng)詞,這可能暗示關(guān)聯(lián)或依賴(lài)關(guān)系。例如,“用戶登錄”可能涉及“用戶”和“登錄”兩個(gè)類(lèi)或概念。
2.(2)定義類(lèi)的屬性和方法:
具體操作:為每個(gè)識(shí)別出的類(lèi),定義其具有的屬性(數(shù)據(jù))和方法(行為)。屬性描述了類(lèi)的靜態(tài)特征,方法描述了類(lèi)的動(dòng)態(tài)行為。
實(shí)用技巧:屬性應(yīng)包括其名稱(chēng)、數(shù)據(jù)類(lèi)型(或表示復(fù)雜類(lèi)型的類(lèi)型名)、以及訪問(wèn)權(quán)限(public,private,protected)。方法應(yīng)包括其名稱(chēng)、參數(shù)列表(名稱(chēng)和類(lèi)型)、返回類(lèi)型(或void表示無(wú)返回值)以及訪問(wèn)權(quán)限。考慮類(lèi)的職責(zé)原則(SingleResponsibilityPrinciple),確保一個(gè)類(lèi)只負(fù)責(zé)一項(xiàng)核心職責(zé)。
示例:在在線圖書(shū)銷(xiāo)售系統(tǒng)中,“用戶”類(lèi)可能具有屬性:`用戶ID`(String),`用戶名`(String),`密碼`(String,private),`郵箱`(String),`注冊(cè)日期`(Date);可能具有方法:`登錄()`(void),`修改密碼()`(String->void),`獲取用戶信息()`(->用戶信息)?!皥D書(shū)”類(lèi)可能具有屬性:`圖書(shū)ID`(String),`書(shū)名`(String),`作者`(String),`價(jià)格`(Decimal),`庫(kù)存數(shù)量`(Integer);方法:`更新庫(kù)存()`(Integer->void)。
3.(3)確定類(lèi)之間的關(guān)系:
具體操作:分析類(lèi)與類(lèi)之間的相互作用和依賴(lài)。常見(jiàn)的UML關(guān)系包括關(guān)聯(lián)、依賴(lài)、泛化、實(shí)現(xiàn)和聚合/組合。
實(shí)用技巧:
關(guān)聯(lián):表示兩個(gè)類(lèi)之間的語(yǔ)義連接,通常隱含了“有一個(gè)”或“屬于”的關(guān)系。例如,“用戶”關(guān)聯(lián)到“訂單”(一個(gè)用戶可以有多個(gè)訂單)。使用關(guān)聯(lián)線,并可以附加角色名來(lái)明確關(guān)系含義(如“用戶”到“訂單”的關(guān)聯(lián)可以標(biāo)注角色名“訂單所有者”)。
依賴(lài):表示一個(gè)類(lèi)的變化可能影響另一個(gè)類(lèi),但影響是單向的、臨時(shí)的。通常用虛線表示。例如,“訂單”類(lèi)可能依賴(lài)“支付網(wǎng)關(guān)”接口類(lèi)來(lái)處理支付,但并不直接持有支付網(wǎng)關(guān)的實(shí)例。
泛化:表示繼承關(guān)系,子類(lèi)繼承父類(lèi)的屬性和方法。使用空心三角形箭頭指向父類(lèi)。例如,“普通用戶”和“管理員”可以泛化自一個(gè)基類(lèi)“用戶”。
實(shí)現(xiàn):表示一個(gè)類(lèi)實(shí)現(xiàn)了另一個(gè)接口。使用實(shí)線加空心三角形箭頭指向接口。例如,“支付網(wǎng)關(guān)”可能定義一個(gè)接口,“支付寶支付”和“微信支付”類(lèi)實(shí)現(xiàn)該接口。
聚合/組合:表示整體與部分的關(guān)系。聚合表示部分可以獨(dú)立于整體存在(如“訂單”包含“圖書(shū)”,但圖書(shū)也可以獨(dú)立存在),組合表示部分的生命周期完全屬于整體(如“汽車(chē)”包含“引擎”,引擎隨汽車(chē)生滅)。聚合用空心菱形表示,組合用實(shí)心菱形表示。
示例:“用戶”與“訂單”之間存在一對(duì)多(1:N)的關(guān)聯(lián)關(guān)系?!坝唵巍迸c“圖書(shū)”之間存在多對(duì)多(M:N)的關(guān)聯(lián)關(guān)系,可能需要一個(gè)中間類(lèi)“訂單項(xiàng)”來(lái)表示。“用戶”泛化自“實(shí)體”。“訂單”可能依賴(lài)一個(gè)抽象的“支付方式”接口。
4.(4)繪制類(lèi)圖,展示類(lèi)及其關(guān)系:
具體操作:使用標(biāo)準(zhǔn)的UML類(lèi)圖符號(hào)(類(lèi)矩形,分為三個(gè)部分:名稱(chēng)、屬性、方法)來(lái)繪制每個(gè)類(lèi),并使用相應(yīng)的線條和符號(hào)表示類(lèi)之間的關(guān)系。確保圖面布局合理,避免線條交叉。
實(shí)用技巧:可以使用包(矩形)來(lái)組織相關(guān)的類(lèi)。例如,將所有表示實(shí)體的類(lèi)放在“模型”包中,表示功能或服務(wù)的類(lèi)放在“服務(wù)”包中。使用包的嵌套來(lái)表示更細(xì)粒度的組織。
示例:繪制一個(gè)類(lèi)圖,包含“用戶”、“訂單”、“圖書(shū)”、“訂單項(xiàng)”、“支付方式”等類(lèi),并正確表示它們之間的關(guān)聯(lián)、依賴(lài)和泛化關(guān)系。
2.注意事項(xiàng)(續(xù))
類(lèi)的職責(zé):持續(xù)評(píng)估每個(gè)類(lèi)的職責(zé)是否符合單一職責(zé)原則。如果一個(gè)類(lèi)承擔(dān)了太多職責(zé),可能需要將其拆分為更小的類(lèi)。
關(guān)聯(lián)的表示:清晰地標(biāo)注關(guān)聯(lián)的角色名,這有助于理解數(shù)據(jù)流和責(zé)任分配。明確關(guān)聯(lián)是雙向的還是單向的(通常通過(guò)屬性表示)。
屬性和方法的可見(jiàn)性:合理使用public,private,protected等訪問(wèn)修飾符。public表示類(lèi)外部都可以訪問(wèn),private表示只能在類(lèi)內(nèi)部訪問(wèn),protected表示只能在類(lèi)本身及其子類(lèi)中訪問(wèn)。良好的封裝性是面向?qū)ο笤O(shè)計(jì)的重要原則。
常量與變量:對(duì)于不應(yīng)改變的屬性,應(yīng)將其定義為常量(在UML中通常用斜體表示)。
(十)時(shí)序圖的應(yīng)用
1.繪制步驟:
1.(1)確定對(duì)象:
具體操作:識(shí)別在特定場(chǎng)景(用例或操作)中需要交互的主要對(duì)象。這些對(duì)象將作為時(shí)序圖中的“生命線”(Lifeline)。
實(shí)用技巧:重點(diǎn)關(guān)注那些主動(dòng)發(fā)送消息或接收重要消息的對(duì)象??紤]參與該場(chǎng)景的主要參與者對(duì)應(yīng)的類(lèi)實(shí)例。
示例:在“用戶下訂單”場(chǎng)景中,主要對(duì)象可能包括“用戶”(發(fā)起者)、“訂單”對(duì)象、“購(gòu)物車(chē)”對(duì)象(如果適用)、“支付網(wǎng)關(guān)”對(duì)象。
2.(2)定義消息傳遞的順序:
具體操作:根據(jù)用例描述或業(yè)務(wù)流程,詳細(xì)列出對(duì)象之間交互的消息序列,并確定消息發(fā)送的時(shí)間順序。
實(shí)用技巧:可以從第一個(gè)動(dòng)作開(kāi)始,按時(shí)間順序逐步描述。使用不同的消息類(lèi)型:同步消息(一個(gè)對(duì)象等待另一個(gè)對(duì)象響應(yīng))、異步消息(發(fā)送方不等待響應(yīng))、返回消息(方法調(diào)用的結(jié)果返回)。注意區(qū)分主要流程和可選流程、異常流程。
示例:“用戶”對(duì)象首先向“購(gòu)物車(chē)”對(duì)象發(fā)送“獲取購(gòu)物車(chē)商品”消息。“購(gòu)物車(chē)”返回商品列表?!坝脩簟边x擇商品,并發(fā)送“將商品加入購(gòu)物車(chē)”消息給“購(gòu)物車(chē)”。“購(gòu)物車(chē)”更新?tīng)顟B(tài)并返回確認(rèn)?!坝脩簟毕颉坝唵巍睂?duì)象發(fā)送“創(chuàng)建新訂單”消息,附帶商品列表?!坝唵巍眲?chuàng)建訂單并返回訂單號(hào)?!坝脩簟毕颉爸Ц毒W(wǎng)關(guān)”發(fā)送“發(fā)起支付”消息,附帶訂單號(hào)和金額?!爸Ц毒W(wǎng)關(guān)”處理支付,并發(fā)送“支付成功”或“支付失敗”消息給“訂單”。
3.(3)繪制時(shí)序圖,展示對(duì)象和消息傳遞:
具體操作:
繪制垂直的“生命線”代表每個(gè)對(duì)象。
在生命線上按時(shí)間順序繪制“消息框”(矩形),框內(nèi)寫(xiě)明消息名稱(chēng)。同步消息直接連接發(fā)送方和接收方的生命線。異步消息用帶箭頭的虛線表示發(fā)送。返回消息用帶箭頭的返回線表示。
在對(duì)象生命線的特定位置可以繪制“激活條”(細(xì)矩形),表示該對(duì)象正在執(zhí)行操作或處理消息。
在圖的頂部可以標(biāo)注場(chǎng)景名稱(chēng)或時(shí)間點(diǎn)。
實(shí)用技巧:保持圖面清晰,時(shí)間沿著水平方向遞增。對(duì)于復(fù)雜的交互,可以使用分組框(矩形)來(lái)組織消息序列,提高可讀性??梢詷?biāo)注消息的順序號(hào),幫助理解流程。
示例:繪制一個(gè)時(shí)序圖,包含“用戶”、“購(gòu)物車(chē)”、“訂單”、“支付網(wǎng)關(guān)”四條生命線。按上述示例的消息序列,在對(duì)應(yīng)生命線之間繪制同步消息框,并在適當(dāng)位置繪制激活條。
2.注意事項(xiàng):
焦點(diǎn):時(shí)序圖主要關(guān)注消息傳遞的順序和時(shí)間,而不是對(duì)象間的靜態(tài)結(jié)構(gòu)。如果需要強(qiáng)調(diào)結(jié)構(gòu),應(yīng)同時(shí)參考類(lèi)圖。
簡(jiǎn)化:對(duì)于不直接參與核心交互的對(duì)象,可以將其生命線僅表示為接收某些消息,而不必畫(huà)出所有細(xì)節(jié)。
異常處理:時(shí)序圖也可以表示異常流程,通過(guò)在消息框旁標(biāo)注條件或異常標(biāo)簽來(lái)表示。
(十一)狀態(tài)圖的應(yīng)用
1.繪制步驟:
1.(1)確定對(duì)象的狀態(tài):
具體操作:識(shí)別該對(duì)象可能經(jīng)歷的所有有意義的狀態(tài)。狀態(tài)是對(duì)象生命周期中的特定條件或活動(dòng)。思考對(duì)象在生命周期中會(huì)經(jīng)歷哪些不同的表現(xiàn)或階段。
實(shí)用技巧:狀態(tài)通常與對(duì)象的屬性值或正在執(zhí)行的活動(dòng)相關(guān)。例如,一個(gè)“訂單”對(duì)象可能有“待付款”、“已付款”、“已發(fā)貨”、“已完成”、“已取消”等狀態(tài)。
示例:對(duì)于一個(gè)“訂單”對(duì)象,其狀態(tài)可能包括:`初始化`、`待付款`、`已付款`、`處理中`、`已發(fā)貨`、`已完成`、`已取消`。
2.(2)定義狀態(tài)轉(zhuǎn)換的條件:
具體操作:確定對(duì)象從一個(gè)狀態(tài)轉(zhuǎn)換到另一個(gè)狀態(tài)的原因或觸發(fā)條件。通常是一個(gè)事件或操作。
實(shí)用技巧:每個(gè)狀態(tài)轉(zhuǎn)換都應(yīng)有明確的觸發(fā)事件。使用簡(jiǎn)潔、明確的語(yǔ)言描述事件。思考哪些操作或外部條件會(huì)導(dǎo)致?tīng)顟B(tài)改變。
示例:“訂單”對(duì)象的狀態(tài)轉(zhuǎn)換條件可能包括:`用戶支付成功`(觸發(fā)從`待付款`到`已付款`的轉(zhuǎn)換)、`系統(tǒng)處理訂單`(觸發(fā)從`已付款`到`處理中`)、`倉(cāng)庫(kù)發(fā)貨`(觸發(fā)從`處理中`到`已發(fā)貨`)、`用戶確認(rèn)收貨`或`系統(tǒng)超時(shí)`(觸發(fā)從`已發(fā)貨`到`已完成`)、`用戶申請(qǐng)取消`(觸發(fā)從`任何可取消狀態(tài)`到`已取消`)。
3.(3)繪制狀態(tài)圖,展示狀態(tài)和轉(zhuǎn)換:
具體操作:
使用標(biāo)準(zhǔn)的UML狀態(tài)圖符號(hào)(圓角矩形表示狀態(tài),箭頭表示轉(zhuǎn)換,轉(zhuǎn)換旁標(biāo)注事件/條件)繪制圖形。
將初始狀態(tài)用一個(gè)實(shí)心圓表示,放在狀態(tài)圖的左側(cè)。
將最終狀態(tài)(可選)用一個(gè)包含實(shí)心圓的空心圓表示,放在狀態(tài)圖的右側(cè)。
在狀態(tài)內(nèi)部可以包含“活動(dòng)”(用虛線框和文本表示對(duì)象在該狀態(tài)執(zhí)行的活動(dòng))和“子狀態(tài)”(用嵌套的圓角矩形表示并發(fā)或順序活動(dòng))。
在狀態(tài)轉(zhuǎn)換旁標(biāo)注觸發(fā)事件和可選的Guard條件(判斷是否允許轉(zhuǎn)換的條件)。
實(shí)用技巧:保持圖面清晰,狀態(tài)和轉(zhuǎn)換關(guān)系明確。對(duì)于復(fù)雜的狀態(tài)圖,可以使用嵌套狀態(tài)來(lái)分解狀態(tài)內(nèi)部的行為。考慮使用狀態(tài)機(jī)工具或偽代碼來(lái)輔助描述復(fù)雜的轉(zhuǎn)換邏輯。
示例:繪制一個(gè)狀態(tài)圖,包含“訂單”的七個(gè)狀態(tài)。從“初始化”開(kāi)始,根據(jù)示例中的轉(zhuǎn)換條件,用箭頭連接各個(gè)狀態(tài),并在箭頭旁標(biāo)注觸發(fā)事件,如“用戶支付成功”、“系統(tǒng)處理訂單”等。
2.注意事項(xiàng):
適用性:狀態(tài)圖最適合用于描述那些有明確生命周期、狀態(tài)變化顯著且狀態(tài)驅(qū)動(dòng)行為的對(duì)象(如訂單、訂單項(xiàng)、按鈕等)。不適合描述行為主要由方法調(diào)用驅(qū)動(dòng)的類(lèi)。
狀態(tài)粒度:狀態(tài)的粒度需要適中。太細(xì)的狀態(tài)圖會(huì)過(guò)于復(fù)雜,太粗的狀態(tài)圖則可能丟失重要的行為細(xì)節(jié)。
并發(fā)狀態(tài):使用嵌套狀態(tài)或復(fù)合狀態(tài)可以表示對(duì)象在某個(gè)狀態(tài)下同時(shí)執(zhí)行多個(gè)活動(dòng)。
(十二)活動(dòng)圖的應(yīng)用
1.繪制步驟:
1.(1)確定業(yè)務(wù)流程的步驟:
具體操作:識(shí)別系統(tǒng)要執(zhí)行的業(yè)務(wù)流程或操作的步驟。這些步驟可以是活動(dòng)的、動(dòng)作的或決策點(diǎn)。
實(shí)用技巧:從業(yè)務(wù)角度或用例實(shí)現(xiàn)的角度來(lái)思考流程。將大任務(wù)分解為更小的子任務(wù)。
示例:在線圖書(shū)銷(xiāo)售系統(tǒng)的“處理訂單”業(yè)務(wù)流程可能包括步驟:“驗(yàn)證訂單信息”、“檢查庫(kù)存”、“扣減庫(kù)存”、“創(chuàng)建支付請(qǐng)求”、“等待支付結(jié)果”、“處理支付結(jié)果”、“創(chuàng)建發(fā)貨單”、“安排發(fā)貨”。
2.(2)定義活動(dòng)的順序和條件:
具體操作:確定步驟之間的執(zhí)行順序,以及哪些步驟是條件性的(即,只有在滿足特定條件時(shí)才執(zhí)行)。
實(shí)用技巧:使用決策節(jié)點(diǎn)(菱形)來(lái)表示條件判斷。使用合并節(jié)點(diǎn)(相同的菱形)來(lái)表示從不同路徑到達(dá)同一后續(xù)步驟。使用分叉節(jié)點(diǎn)(相同的矩形)來(lái)表示一個(gè)活動(dòng)分裂為多個(gè)并行活動(dòng),匯合節(jié)點(diǎn)(相同的矩形)來(lái)表示多個(gè)并行活動(dòng)合并到一起。
示例:在“處理訂單”流程中,“檢查庫(kù)存”之后可能有一個(gè)決策節(jié)點(diǎn):“庫(kù)存充足?”(是/否)。如果“是”,則執(zhí)行“扣減庫(kù)存”和“創(chuàng)建支付請(qǐng)求”。如果“否”,則可能執(zhí)行“返回庫(kù)存不足錯(cuò)誤”。
3.(3)繪制活動(dòng)圖,展示活動(dòng)和流程:
具體操作:
使用標(biāo)準(zhǔn)的UML活動(dòng)圖符號(hào)(圓角矩形表示活動(dòng),菱形表示決策/合并/分叉節(jié)點(diǎn),箭頭表示流程方向)繪制圖形。
將流程的起始點(diǎn)用一個(gè)圓表示,放在圖的左側(cè)。
將流程的結(jié)束點(diǎn)用一個(gè)圓圈(帶有叉)表示,放在圖的右側(cè)。
按照步驟和決策邏輯,連接各個(gè)活動(dòng)節(jié)點(diǎn)和決策節(jié)點(diǎn)。
在活動(dòng)或決策節(jié)點(diǎn)內(nèi)部可以添加文本說(shuō)明。
實(shí)用技巧:活動(dòng)圖可以清晰地展示流程的控制流和數(shù)據(jù)流(通過(guò)對(duì)象流,用帶箭頭的虛線表示,標(biāo)明數(shù)據(jù)名稱(chēng))。對(duì)于復(fù)雜的流程,可以使用泳道(Swimlane)來(lái)按角色或部門(mén)劃分責(zé)任,提高可讀性。
示例:繪制一個(gè)活動(dòng)圖,展示“處理訂單”流程。從起始圓開(kāi)始,依次連接“驗(yàn)證訂單信息”、“檢查庫(kù)存”決策節(jié)點(diǎn)、“庫(kù)存充足?是->扣減庫(kù)存&創(chuàng)建支付請(qǐng)求”、“庫(kù)存充足?否->返回庫(kù)存不足錯(cuò)誤”等步驟,最后到達(dá)結(jié)束圓圈。
2.注意事項(xiàng):
焦點(diǎn):活動(dòng)圖側(cè)重于展示跨越多個(gè)對(duì)象或操作的流程控制和業(yè)務(wù)邏輯,而不是單個(gè)對(duì)象的行為。
泳道的使用:當(dāng)流程涉及多個(gè)參與者或部門(mén)時(shí),使用泳道可以使責(zé)任分配和流程路徑更加清晰。
與狀態(tài)圖的區(qū)別:活動(dòng)圖關(guān)注活動(dòng)的執(zhí)行順序和流程,而狀態(tài)圖關(guān)注對(duì)象在其生命周期中的狀態(tài)變化。
(十三)組件圖的應(yīng)用
1.繪制步驟:
1.(1)確定系統(tǒng)中的組件:
具體操作:識(shí)別系統(tǒng)中可替換的、物理的或邏輯的軟件單元。組件通常封裝了代碼和資源,并提供了接口供其他組件使用。常見(jiàn)的組件包括類(lèi)庫(kù)、接口、數(shù)據(jù)庫(kù)、文件、框架等。
實(shí)用技巧:思考哪些部分是系統(tǒng)可部署的單元?哪些部分提供了明確的接口供外部或內(nèi)部使用?哪些部分是源代碼、字節(jié)碼或可執(zhí)行文件?
示例:在線圖書(shū)銷(xiāo)售系統(tǒng)可能包含組件:“用戶界面組件”(UI)、“業(yè)務(wù)邏輯組件”(包含訂單處理、庫(kù)存管理等類(lèi))、“數(shù)據(jù)訪問(wèn)組件”(負(fù)責(zé)與數(shù)據(jù)庫(kù)交互)、“支付網(wǎng)關(guān)接口組件”、“日志組件”、“數(shù)據(jù)庫(kù)”。
2.(2)定義組件的依賴(lài)關(guān)系:
具體操作:確定組件之間如何相互依賴(lài)。依賴(lài)通常表示一個(gè)組件使用另一個(gè)組件的接口。
實(shí)用技巧:依賴(lài)關(guān)系是單向的。思考哪些組件需要調(diào)用其他組件的方法?哪些組件需要訪問(wèn)其他組件提供的接口或數(shù)據(jù)?
示例:“業(yè)務(wù)邏輯組件”可能依賴(lài)“數(shù)據(jù)訪問(wèn)組件”來(lái)獲取訂單數(shù)據(jù)?!坝脩艚缑娼M件”可能依賴(lài)“業(yè)務(wù)邏輯組件”來(lái)處理用戶操作并獲取數(shù)據(jù)?!皹I(yè)務(wù)邏輯組件”可能依賴(lài)“支付網(wǎng)關(guān)接口組件”來(lái)處理支付。
3.(3)繪制組件圖,展示組件及其依賴(lài)關(guān)系:
具體操作:
使用標(biāo)準(zhǔn)的UML組件圖符號(hào)(矩形,內(nèi)含兩個(gè)小矩形,一個(gè)代表接口,一個(gè)代表實(shí)現(xiàn)/內(nèi)部類(lèi))來(lái)繪制每個(gè)組件。
使用帶箭頭的虛線(<依賴(lài)>關(guān)系)表示組件之間的依賴(lài)關(guān)系。箭頭指向被依賴(lài)的組件。
可以使用組件名、接口名和實(shí)現(xiàn)類(lèi)名來(lái)詳細(xì)描述組件。
實(shí)用技巧:組件圖有助于理解系統(tǒng)的物理或邏輯結(jié)構(gòu)以及組件間的交互方式??梢耘c包圖結(jié)合使用,包圖表示更高層次的模塊劃分,組件圖表示包內(nèi)部的實(shí)現(xiàn)細(xì)節(jié)。
示例:繪制一個(gè)組件圖,包含上述示例的五個(gè)組件。用帶箭頭的虛線表示“業(yè)務(wù)邏輯組件”依賴(lài)“數(shù)據(jù)訪問(wèn)組件”、“用戶界面組件”依賴(lài)“業(yè)務(wù)邏輯組件”、“業(yè)務(wù)邏輯組件”依賴(lài)“支付網(wǎng)關(guān)接口組件”的關(guān)系。
2.注意事項(xiàng):
組件粒度:組件的粒度應(yīng)根據(jù)建模目的確定??梢员硎敬至6鹊哪K,也可以表示細(xì)粒度的類(lèi)庫(kù)。
依賴(lài)方向:明確依賴(lài)關(guān)系的方向,理解是誰(shuí)在使用誰(shuí)。
與部署圖的關(guān)系:組件圖側(cè)重于組件的邏輯或物理構(gòu)成及其接口關(guān)系。部署圖則側(cè)重于這些組件在物理節(jié)點(diǎn)(如服務(wù)器、PC)上的實(shí)際分布和部署方式。一個(gè)組件可以在多個(gè)節(jié)點(diǎn)上部署。
(十四)部署圖的應(yīng)用
1.繪制步驟:
1.(1)確定系統(tǒng)的物理部署結(jié)構(gòu):
具體操作:識(shí)別系統(tǒng)運(yùn)行所需的物理節(jié)點(diǎn)(如服務(wù)器、客戶端計(jì)算機(jī)、網(wǎng)絡(luò)設(shè)備等)以及節(jié)點(diǎn)上的軟件組件或軟件運(yùn)行環(huán)境(如應(yīng)用服務(wù)器、數(shù)據(jù)庫(kù)服務(wù)器、Web服務(wù)器等)。
實(shí)用技巧:從系統(tǒng)的運(yùn)行環(huán)境出發(fā),思考軟件在哪里運(yùn)行?運(yùn)行在什么樣的硬件上?
示例:在線圖書(shū)銷(xiāo)售系統(tǒng)可能部署在以下物理節(jié)點(diǎn)上:“Web服務(wù)器節(jié)點(diǎn)”(運(yùn)行用戶界面組件和Web服務(wù)器軟件)、“應(yīng)用服務(wù)器節(jié)點(diǎn)”(運(yùn)行業(yè)務(wù)邏輯組件)、“數(shù)據(jù)庫(kù)服務(wù)器節(jié)點(diǎn)”(運(yùn)行數(shù)據(jù)庫(kù)管理系統(tǒng))、“支付網(wǎng)關(guān)服務(wù)器”(由第三方提供)。
2.(2)定義節(jié)點(diǎn)和組件的部署關(guān)系:
具體操作:確定哪些軟件組件或運(yùn)行環(huán)境部署在哪些物理節(jié)點(diǎn)上。這通常表示為節(jié)點(diǎn)之間的“部署”關(guān)系。
實(shí)用技巧:思考每個(gè)組件或運(yùn)行環(huán)境需要運(yùn)行在什么樣的硬件或軟件平臺(tái)上。
示例:“用戶界面組件”和“Web服務(wù)器軟件”部署在“Web服務(wù)器節(jié)點(diǎn)”上?!皹I(yè)務(wù)邏輯組件”部署在“應(yīng)用服務(wù)器節(jié)點(diǎn)”上?!皵?shù)據(jù)庫(kù)管理系統(tǒng)”運(yùn)行在“數(shù)據(jù)庫(kù)服務(wù)器節(jié)點(diǎn)”上?!爸Ц毒W(wǎng)關(guān)接口組件”(可能是一個(gè)客戶端庫(kù)或配置)運(yùn)行在“Web服務(wù)器節(jié)點(diǎn)”或“應(yīng)用服務(wù)器節(jié)點(diǎn)”上,與外部支付網(wǎng)關(guān)服務(wù)交互。
3.(3)繪制部署圖,展示節(jié)點(diǎn)和組件:
具體操作:
使用標(biāo)準(zhǔn)的UML部署圖符號(hào)(矩形表示節(jié)點(diǎn),圓柱體表示軟件組件,圓表示設(shè)備,黑點(diǎn)表示處理器)來(lái)繪制圖形。
在節(jié)點(diǎn)內(nèi)可以列出其包含的軟件組件或運(yùn)行環(huán)境。
使用帶箭頭的實(shí)線(<部署>關(guān)系)表示組件被部署在節(jié)點(diǎn)上。箭頭指向節(jié)點(diǎn)。
實(shí)用技巧:部署圖清晰地展示了系統(tǒng)的物理架構(gòu)和軟件分布。有助于進(jìn)行系統(tǒng)部署規(guī)劃、網(wǎng)絡(luò)配置和硬件資源分配。
示例:繪制一個(gè)部署圖,包含“Web服務(wù)器節(jié)點(diǎn)”、“應(yīng)用服務(wù)器節(jié)點(diǎn)”、“數(shù)據(jù)庫(kù)服務(wù)器節(jié)點(diǎn)”。在“Web服務(wù)器節(jié)點(diǎn)”內(nèi)標(biāo)注“Web服務(wù)器”、“用戶界面組件”、“支付網(wǎng)關(guān)接口組件”。在“應(yīng)用服務(wù)器節(jié)點(diǎn)”內(nèi)標(biāo)注“應(yīng)用服務(wù)器”、“業(yè)務(wù)邏輯組件”。在“數(shù)據(jù)庫(kù)服務(wù)器節(jié)點(diǎn)”內(nèi)標(biāo)注“數(shù)據(jù)庫(kù)管理系統(tǒng)”。
2.注意事項(xiàng):
抽象級(jí)別:部署圖通常表示相對(duì)較高的抽象級(jí)別??梢员硎具壿嫻?jié)點(diǎn),也可以表示物理服務(wù)器。
關(guān)系類(lèi)型:明確使用“部署”關(guān)系來(lái)表示組件與節(jié)點(diǎn)的綁定。
與組件圖和組件的關(guān)系:部署圖中的節(jié)點(diǎn)包含了組件圖中的組件。一個(gè)組件可能被部署在多個(gè)節(jié)點(diǎn)上(如應(yīng)用服務(wù)器軟件),也可能一個(gè)節(jié)點(diǎn)上部署多個(gè)組件。
三、總結(jié)
UML周期表提供了一套規(guī)范化的UML圖及其應(yīng)用場(chǎng)景,是面向?qū)ο蠓治雠c設(shè)計(jì)中不可或缺的工具。本指南詳細(xì)闡述了UML周期表中主要圖(用例圖、類(lèi)圖、時(shí)序圖、狀態(tài)圖、活動(dòng)圖、組件圖和部署圖)的應(yīng)用細(xì)則,包括具體的繪制步驟、注意事項(xiàng)以及實(shí)用技巧。通過(guò)學(xué)習(xí)和實(shí)踐這些規(guī)定和應(yīng)用細(xì)則,開(kāi)發(fā)者能夠更系統(tǒng)、高效、準(zhǔn)確地使用UML進(jìn)行建模,從而提升軟件設(shè)計(jì)的質(zhì)量、可維護(hù)性和可理解性。掌握UML周期表的應(yīng)用,是成為一名優(yōu)秀軟件開(kāi)發(fā)者或系統(tǒng)分析員的關(guān)鍵技能之一。
一、UML周期表概述
UML(統(tǒng)一建模語(yǔ)言)周期表是面向?qū)ο蠓治雠c設(shè)計(jì)領(lǐng)域中的一種重要工具,用于規(guī)范和簡(jiǎn)化UML圖的設(shè)計(jì)與使用。它通過(guò)定義一系列常用的UML圖及其應(yīng)用場(chǎng)景,幫助開(kāi)發(fā)者在建模過(guò)程中提高效率和質(zhì)量。本指南將詳細(xì)介紹UML周期表的規(guī)定和應(yīng)用細(xì)則,以確保使用者能夠正確理解和應(yīng)用。
(一)UML周期表的基本規(guī)定
1.周期表的構(gòu)成:UML周期表主要包含以下幾類(lèi)圖:
-用例圖
-類(lèi)圖
-時(shí)序圖
-狀態(tài)圖
-活動(dòng)圖
-組件圖
-部署圖
2.圖的應(yīng)用場(chǎng)景:
-用例圖:用于描述系統(tǒng)功能和用戶交互。
-類(lèi)圖:用于表示系統(tǒng)中的類(lèi)及其關(guān)系。
-時(shí)序圖:用于展示對(duì)象之間消息傳遞的時(shí)間順序。
-狀態(tài)圖:用于描述對(duì)象狀態(tài)變化及其觸發(fā)條件。
-活動(dòng)圖:用于表示系統(tǒng)中的業(yè)務(wù)流程。
-組件圖:用于展示系統(tǒng)中的組件及其依賴(lài)關(guān)系。
-部署圖:用于描述系統(tǒng)物理部署結(jié)構(gòu)。
(二)UML周期表的使用規(guī)范
1.命名規(guī)范:
-圖的名稱(chēng)應(yīng)簡(jiǎn)潔明了,反映其功能。
-類(lèi)和對(duì)象的命名應(yīng)符合駝峰命名法或下劃線命名法。
2.圖例規(guī)范:
-使用標(biāo)準(zhǔn)的UML圖例符號(hào),確保一致性。
-避免使用非標(biāo)準(zhǔn)的符號(hào)和標(biāo)記。
二、UML周期表的應(yīng)用細(xì)則
(一)用例圖的應(yīng)用
1.繪制步驟:
-(1)確定系統(tǒng)邊界。
-(2)識(shí)別參與者。
-(3)定義用例。
-(4)繪制用例圖,連接參與者和用例。
2.注意事項(xiàng):
-用例應(yīng)具有明確的觸發(fā)條件和結(jié)果。
-參與者應(yīng)具有唯一的標(biāo)識(shí)。
(二)類(lèi)圖的應(yīng)用
1.繪制步驟:
-(1)識(shí)別系統(tǒng)中的類(lèi)。
-(2)定義類(lèi)的屬性和方法。
-(3)確定類(lèi)之間的關(guān)系(繼承、關(guān)聯(lián)、依賴(lài)等)。
-(4)繪制類(lèi)圖,展示類(lèi)及其關(guān)系。
2.注意事項(xiàng):
-類(lèi)的命名應(yīng)反映其功能。
-屬性和方法應(yīng)具有明確的類(lèi)型和訪問(wèn)權(quán)限。
(三)時(shí)序圖的應(yīng)用
1.繪制步驟:
-(1)確定對(duì)象。
-(2)定義消息傳遞的順序。
-(3)繪制時(shí)序圖,展示對(duì)象和消息傳遞。
2.注意事項(xiàng):
-消息傳遞應(yīng)具有明確的時(shí)間順序。
-對(duì)象的激活和終止應(yīng)清晰表示。
(四)狀態(tài)圖的應(yīng)用
1.繪制步驟:
-(1)確定對(duì)象的狀態(tài)。
-(2)定義狀態(tài)轉(zhuǎn)換的條件。
-(3)繪制狀態(tài)圖,展示狀態(tài)和轉(zhuǎn)換。
2.注意事項(xiàng):
-狀態(tài)轉(zhuǎn)換應(yīng)具有明確的觸發(fā)條件。
-狀態(tài)的命名應(yīng)簡(jiǎn)潔明了。
(五)活動(dòng)圖的應(yīng)用
1.繪制步驟:
-(1)確定業(yè)務(wù)流程的步驟。
-(2)定義活動(dòng)的順序和條件。
-(3)繪制活動(dòng)圖,展示活動(dòng)和流程。
2.注意事項(xiàng):
-活動(dòng)的命名應(yīng)反映其功能。
-活動(dòng)的順序和條件應(yīng)明確表示。
(六)組件圖的應(yīng)用
1.繪制步驟:
-(1)確定系統(tǒng)中的組件。
-(2)定義組件的依賴(lài)關(guān)系。
-(3)繪制組件圖,展示組件及其關(guān)系。
2.注意事項(xiàng):
-組件的命名應(yīng)反映其功能。
-組件的依賴(lài)關(guān)系應(yīng)明確表示。
(七)部署圖的應(yīng)用
1.繪制步驟:
-(1)確定系統(tǒng)的物理部署結(jié)構(gòu)。
-(2)定義節(jié)點(diǎn)和組件的部署關(guān)系。
-(3)繪制部署圖,展示節(jié)點(diǎn)和組件。
2.注意事項(xiàng):
-節(jié)點(diǎn)的命名應(yīng)反映其功能。
-節(jié)點(diǎn)和組件的部署關(guān)系應(yīng)明確表示。
三、總結(jié)
UML周期表是面向?qū)ο蠓治雠c設(shè)計(jì)中的一種重要工具,通過(guò)規(guī)范和簡(jiǎn)化UML圖的設(shè)計(jì)與使用,幫助開(kāi)發(fā)者在建模過(guò)程中提高效率和質(zhì)量。本指南詳細(xì)介紹了UML周期表的規(guī)定和應(yīng)用細(xì)則,包括用例圖、類(lèi)圖、時(shí)序圖、狀態(tài)圖、活動(dòng)圖、組件圖和部署圖的應(yīng)用步驟和注意事項(xiàng)。正確理解和應(yīng)用UML周期表,將有助于提高建模的準(zhǔn)確性和一致性。
二、UML周期表的應(yīng)用細(xì)則(續(xù))
(八)用例圖的應(yīng)用(續(xù))
1.繪制步驟(續(xù))
1.(1)確定系統(tǒng)邊界:
具體操作:明確系統(tǒng)所包含的功能范圍以及不包含的功能范圍。這通常通過(guò)與系統(tǒng)用戶(參與者)的溝通以及分析系統(tǒng)目標(biāo)來(lái)完成。
實(shí)用技巧:可以使用一個(gè)“沉默的外部實(shí)體”來(lái)代表系統(tǒng)之外的、不直接交互但影響系統(tǒng)的因素(如外部數(shù)據(jù)源)。明確邊界有助于界定參與者和用例的合理性。
示例:在一個(gè)在線圖書(shū)銷(xiāo)售系統(tǒng)的用例圖中,系統(tǒng)邊界可以定義為“處理圖書(shū)購(gòu)買(mǎi)、支付、訂單管理和用戶賬戶相關(guān)操作”。而系統(tǒng)外部的因素,如“郵政服務(wù)”可以作為沉默的外部實(shí)體處理圖書(shū)的物理配送。
2.(2)識(shí)別參與者:
具體操作:識(shí)別所有與系統(tǒng)交互的外部實(shí)體,這些實(shí)體可以是人、其他系統(tǒng)或設(shè)備。參與者是主動(dòng)發(fā)起用例的實(shí)體。
實(shí)用技巧:采用“角色”的思維來(lái)思考參與者。問(wèn)自己:“誰(shuí)會(huì)使用這個(gè)功能?”“誰(shuí)需要從系統(tǒng)中獲取信息?”“誰(shuí)會(huì)對(duì)系統(tǒng)的運(yùn)行產(chǎn)生影響?”
示例:在線圖書(shū)銷(xiāo)售系統(tǒng)的參與者可能包括“普通用戶”、“管理員”、“支付網(wǎng)關(guān)”(作為一個(gè)系統(tǒng)參與者)。
3.(3)定義用例:
具體操作:為每個(gè)參與者定義其能請(qǐng)求系統(tǒng)執(zhí)行的操作或任務(wù)。用例應(yīng)描述系統(tǒng)為參與者提供的價(jià)值,通常以動(dòng)詞短語(yǔ)開(kāi)頭(如“查詢(xún)圖書(shū)”、“下訂單”)。
實(shí)用技巧:每個(gè)用例應(yīng)具有一個(gè)清晰的、用戶可理解的名稱(chēng)。用例描述應(yīng)簡(jiǎn)潔,但足夠詳細(xì)地說(shuō)明用例的目的、參與者、前置條件、基本流程和后置條件??梢圆捎谩皡⑴c者:用例名稱(chēng)”的格式來(lái)組織。
示例:針對(duì)“普通用戶”和“管理員”,可能的用例包括:“普通用戶:瀏覽圖書(shū)”、“普通用戶:搜索圖書(shū)”、“普通用戶:下訂單”、“管理員:管理圖書(shū)目錄”、“管理員:處理訂單”。
4.(4)繪制用例圖,連接參與者和用例:
具體操作:使用標(biāo)準(zhǔn)的UML用例圖符號(hào)(參與者矩形、用例橢圓、關(guān)聯(lián)線)來(lái)繪制圖形。將參與者放置在系統(tǒng)的邊界之外,用例放置在邊界之內(nèi),用關(guān)聯(lián)線連接參與者和它所參與的用例。
實(shí)用技巧:確保圖面布局清晰、簡(jiǎn)潔。可以使用包(矩形)來(lái)組織相關(guān)的用例,特別是當(dāng)用例較多時(shí),可以提高可讀性。例如,可以將所有與用戶賬戶相關(guān)的用例(如“注冊(cè)”、“登錄”、“修改個(gè)人信息”)放在一個(gè)名為“用戶管理”的包中。
示例:在繪圖中,將代表“普通用戶”和“管理員”的參與者放在圖的左側(cè),將“瀏覽圖書(shū)”、“搜索圖書(shū)”、“下訂單”、“管理圖書(shū)目錄”、“處理訂單”等用例橢圓放在右側(cè),并用線條分別連接用戶到其對(duì)應(yīng)的用例。
2.注意事項(xiàng)(續(xù))
用例的粒度:用例應(yīng)保持在一個(gè)合理的粒度級(jí)別。太細(xì)的用例會(huì)使圖變得雜亂,太粗的用例則可能隱藏重要的交互細(xì)節(jié)。通常,一個(gè)用例對(duì)應(yīng)一個(gè)用戶故事或一個(gè)屏幕上的操作流程是比較合適的。
前置條件與后置條件:雖然不總是在用例圖中詳細(xì)表示,但理解每個(gè)用例的前置條件(執(zhí)行用例前必須滿足的條件)和后置條件(用例執(zhí)行完成后的結(jié)果狀態(tài))對(duì)于深入理解用例至關(guān)重要。這些信息通常在用例描述文檔中詳細(xì)說(shuō)明。
擴(kuò)展用例與泛化用例:對(duì)于復(fù)雜的用例,可以使用擴(kuò)展(<擴(kuò)展>關(guān)系)來(lái)表示特定條件下的附加流程,或者使用泛化(<泛化>關(guān)系)來(lái)表示共享相同核心行為的多個(gè)用例(例如,“搜索圖書(shū)”和“按ISBN搜索圖書(shū)”可以泛化自一個(gè)“搜索”的基用例)。
(九)類(lèi)圖的應(yīng)用(續(xù))
1.繪制步驟(續(xù))
1.(1)識(shí)別系統(tǒng)中的類(lèi):
具體操作:通過(guò)分析用例圖、業(yè)務(wù)需求或領(lǐng)域知識(shí),識(shí)別出系統(tǒng)中需要建模的核心概念,這些概念通常可以轉(zhuǎn)化為類(lèi)。思考:“系統(tǒng)需要存儲(chǔ)哪些信息?”“系統(tǒng)需要執(zhí)行哪些操作?”“哪些是系統(tǒng)中的關(guān)鍵實(shí)體?”
實(shí)用技巧:可以采用“名詞識(shí)別法”,從需求文檔或用例描述中提取名詞,并判斷這些名詞是否代表類(lèi)。同時(shí),注意識(shí)別名詞短語(yǔ)中的動(dòng)詞,這可能暗示關(guān)聯(lián)或依賴(lài)關(guān)系。例如,“用戶登錄”可能涉及“用戶”和“登錄”兩個(gè)類(lèi)或概念。
2.(2)定義類(lèi)的屬性和方法:
具體操作:為每個(gè)識(shí)別出的類(lèi),定義其具有的屬性(數(shù)據(jù))和方法(行為)。屬性描述了類(lèi)的靜態(tài)特征,方法描述了類(lèi)的動(dòng)態(tài)行為。
實(shí)用技巧:屬性應(yīng)包括其名稱(chēng)、數(shù)據(jù)類(lèi)型(或表示復(fù)雜類(lèi)型的類(lèi)型名)、以及訪問(wèn)權(quán)限(public,private,protected)。方法應(yīng)包括其名稱(chēng)、參數(shù)列表(名稱(chēng)和類(lèi)型)、返回類(lèi)型(或void表示無(wú)返回值)以及訪問(wèn)權(quán)限??紤]類(lèi)的職責(zé)原則(SingleResponsibilityPrinciple),確保一個(gè)類(lèi)只負(fù)責(zé)一項(xiàng)核心職責(zé)。
示例:在在線圖書(shū)銷(xiāo)售系統(tǒng)中,“用戶”類(lèi)可能具有屬性:`用戶ID`(String),`用戶名`(String),`密碼`(String,private),`郵箱`(String),`注冊(cè)日期`(Date);可能具有方法:`登錄()`(void),`修改密碼()`(String->void),`獲取用戶信息()`(->用戶信息)?!皥D書(shū)”類(lèi)可能具有屬性:`圖書(shū)ID`(String),`書(shū)名`(String),`作者`(String),`價(jià)格`(Decimal),`庫(kù)存數(shù)量`(Integer);方法:`更新庫(kù)存()`(Integer->void)。
3.(3)確定類(lèi)之間的關(guān)系:
具體操作:分析類(lèi)與類(lèi)之間的相互作用和依賴(lài)。常見(jiàn)的UML關(guān)系包括關(guān)聯(lián)、依賴(lài)、泛化、實(shí)現(xiàn)和聚合/組合。
實(shí)用技巧:
關(guān)聯(lián):表示兩個(gè)類(lèi)之間的語(yǔ)義連接,通常隱含了“有一個(gè)”或“屬于”的關(guān)系。例如,“用戶”關(guān)聯(lián)到“訂單”(一個(gè)用戶可以有多個(gè)訂單)。使用關(guān)聯(lián)線,并可以附加角色名來(lái)明確關(guān)系含義(如“用戶”到“訂單”的關(guān)聯(lián)可以標(biāo)注角色名“訂單所有者”)。
依賴(lài):表示一個(gè)類(lèi)的變化可能影響另一個(gè)類(lèi),但影響是單向的、臨時(shí)的。通常用虛線表示。例如,“訂單”類(lèi)可能依賴(lài)“支付網(wǎng)關(guān)”接口類(lèi)來(lái)處理支付,但并不直接持有支付網(wǎng)關(guān)的實(shí)例。
泛化:表示繼承關(guān)系,子類(lèi)繼承父類(lèi)的屬性和方法。使用空心三角形箭頭指向父類(lèi)。例如,“普通用戶”和“管理員”可以泛化自一個(gè)基類(lèi)“用戶”。
實(shí)現(xiàn):表示一個(gè)類(lèi)實(shí)現(xiàn)了另一個(gè)接口。使用實(shí)線加空心三角形箭頭指向接口。例如,“支付網(wǎng)關(guān)”可能定義一個(gè)接口,“支付寶支付”和“微信支付”類(lèi)實(shí)現(xiàn)該接口。
聚合/組合:表示整體與部分的關(guān)系。聚合表示部分可以獨(dú)立于整體存在(如“訂單”包含“圖書(shū)”,但圖書(shū)也可以獨(dú)立存在),組合表示部分的生命周期完全屬于整體(如“汽車(chē)”包含“引擎”,引擎隨汽車(chē)生滅)。聚合用空心菱形表示,組合用實(shí)心菱形表示。
示例:“用戶”與“訂單”之間存在一對(duì)多(1:N)的關(guān)聯(lián)關(guān)系?!坝唵巍迸c“圖書(shū)”之間存在多對(duì)多(M:N)的關(guān)聯(lián)關(guān)系,可能需要一個(gè)中間類(lèi)“訂單項(xiàng)”來(lái)表示?!坝脩簟狈夯浴皩?shí)體”。“訂單”可能依賴(lài)一個(gè)抽象的“支付方式”接口。
4.(4)繪制類(lèi)圖,展示類(lèi)及其關(guān)系:
具體操作:使用標(biāo)準(zhǔn)的UML類(lèi)圖符號(hào)(類(lèi)矩形,分為三個(gè)部分:名稱(chēng)、屬性、方法)來(lái)繪制每個(gè)類(lèi),并使用相應(yīng)的線條和符號(hào)表示類(lèi)之間的關(guān)系。確保圖面布局合理,避免線條交叉。
實(shí)用技巧:可以使用包(矩形)來(lái)組織相關(guān)的類(lèi)。例如,將所有表示實(shí)體的類(lèi)放在“模型”包中,表示功能或服務(wù)的類(lèi)放在“服務(wù)”包中。使用包的嵌套來(lái)表示更細(xì)粒度的組織。
示例:繪制一個(gè)類(lèi)圖,包含“用戶”、“訂單”、“圖書(shū)”、“訂單項(xiàng)”、“支付方式”等類(lèi),并正確表示它們之間的關(guān)聯(lián)、依賴(lài)和泛化關(guān)系。
2.注意事項(xiàng)(續(xù))
類(lèi)的職責(zé):持續(xù)評(píng)估每個(gè)類(lèi)的職責(zé)是否符合單一職責(zé)原則。如果一個(gè)類(lèi)承擔(dān)了太多職責(zé),可能需要將其拆分為更小的類(lèi)。
關(guān)聯(lián)的表示:清晰地標(biāo)注關(guān)聯(lián)的角色名,這有助于理解數(shù)據(jù)流和責(zé)任分配。明確關(guān)聯(lián)是雙向的還是單向的(通常通過(guò)屬性表示)。
屬性和方法的可見(jiàn)性:合理使用public,private,protected等訪問(wèn)修飾符。public表示類(lèi)外部都可以訪問(wèn),private表示只能在類(lèi)內(nèi)部訪問(wèn),protected表示只能在類(lèi)本身及其子類(lèi)中訪問(wèn)。良好的封裝性是面向?qū)ο笤O(shè)計(jì)的重要原則。
常量與變量:對(duì)于不應(yīng)改變的屬性,應(yīng)將其定義為常量(在UML中通常用斜體表示)。
(十)時(shí)序圖的應(yīng)用
1.繪制步驟:
1.(1)確定對(duì)象:
具體操作:識(shí)別在特定場(chǎng)景(用例或操作)中需要交互的主要對(duì)象。這些對(duì)象將作為時(shí)序圖中的“生命線”(Lifeline)。
實(shí)用技巧:重點(diǎn)關(guān)注那些主動(dòng)發(fā)送消息或接收重要消息的對(duì)象??紤]參與該場(chǎng)景的主要參與者對(duì)應(yīng)的類(lèi)實(shí)例。
示例:在“用戶下訂單”場(chǎng)景中,主要對(duì)象可能包括“用戶”(發(fā)起者)、“訂單”對(duì)象、“購(gòu)物車(chē)”對(duì)象(如果適用)、“支付網(wǎng)關(guān)”對(duì)象。
2.(2)定義消息傳遞的順序:
具體操作:根據(jù)用例描述或業(yè)務(wù)流程,詳細(xì)列出對(duì)象之間交互的消息序列,并確定消息發(fā)送的時(shí)間順序。
實(shí)用技巧:可以從第一個(gè)動(dòng)作開(kāi)始,按時(shí)間順序逐步描述。使用不同的消息類(lèi)型:同步消息(一個(gè)對(duì)象等待另一個(gè)對(duì)象響應(yīng))、異步消息(發(fā)送方不等待響應(yīng))、返回消息(方法調(diào)用的結(jié)果返回)。注意區(qū)分主要流程和可選流程、異常流程。
示例:“用戶”對(duì)象首先向“購(gòu)物車(chē)”對(duì)象發(fā)送“獲取購(gòu)物車(chē)商品”消息?!百?gòu)物車(chē)”返回商品列表?!坝脩簟边x擇商品,并發(fā)送“將商品加入購(gòu)物車(chē)”消息給“購(gòu)物車(chē)”?!百?gòu)物車(chē)”更新?tīng)顟B(tài)并返回確認(rèn)?!坝脩簟毕颉坝唵巍睂?duì)象發(fā)送“創(chuàng)建新訂單”消息,附帶商品列表?!坝唵巍眲?chuàng)建訂單并返回訂單號(hào)?!坝脩簟毕颉爸Ц毒W(wǎng)關(guān)”發(fā)送“發(fā)起支付”消息,附帶訂單號(hào)和金額。“支付網(wǎng)關(guān)”處理支付,并發(fā)送“支付成功”或“支付失敗”消息給“訂單”。
3.(3)繪制時(shí)序圖,展示對(duì)象和消息傳遞:
具體操作:
繪制垂直的“生命線”代表每個(gè)對(duì)象。
在生命線上按時(shí)間順序繪制“消息框”(矩形),框內(nèi)寫(xiě)明消息名稱(chēng)。同步消息直接連接發(fā)送方和接收方的生命線。異步消息用帶箭頭的虛線表示發(fā)送。返回消息用帶箭頭的返回線表示。
在對(duì)象生命線的特定位置可以繪制“激活條”(細(xì)矩形),表示該對(duì)象正在執(zhí)行操作或處理消息。
在圖的頂部可以標(biāo)注場(chǎng)景名稱(chēng)或時(shí)間點(diǎn)。
實(shí)用技巧:保持圖面清晰,時(shí)間沿著水平方向遞增。對(duì)于復(fù)雜的交互,可以使用分組框(矩形)來(lái)組織消息序列,提高可讀性??梢詷?biāo)注消息的順序號(hào),幫助理解流程。
示例:繪制一個(gè)時(shí)序圖,包含“用戶”、“購(gòu)物車(chē)”、“訂單”、“支付網(wǎng)關(guān)”四條生命線。按上述示例的消息序列,在對(duì)應(yīng)生命線之間繪制同步消息框,并在適當(dāng)位置繪制激活條。
2.注意事項(xiàng):
焦點(diǎn):時(shí)序圖主要關(guān)注消息傳遞的順序和時(shí)間,而不是對(duì)象間的靜態(tài)結(jié)構(gòu)。如果需要強(qiáng)調(diào)結(jié)構(gòu),應(yīng)同時(shí)參考類(lèi)圖。
簡(jiǎn)化:對(duì)于不直接參與核心交互的對(duì)象,可以將其生命線僅表示為接收某些消息,而不必畫(huà)出所有細(xì)節(jié)。
異常處理:時(shí)序圖也可以表示異常流程,通過(guò)在消息框旁標(biāo)注條件或異常標(biāo)簽來(lái)表示。
(十一)狀態(tài)圖的應(yīng)用
1.繪制步驟:
1.(1)確定對(duì)象的狀態(tài):
具體操作:識(shí)別該對(duì)象可能經(jīng)歷的所有有意義的狀態(tài)。狀態(tài)是對(duì)象生命周期中的特定條件或活動(dòng)。思考對(duì)象在生命周期中會(huì)經(jīng)歷哪些不同的表現(xiàn)或階段。
實(shí)用技巧:狀態(tài)通常與對(duì)象的屬性值或正在執(zhí)行的活動(dòng)相關(guān)。例如,一個(gè)“訂單”對(duì)象可能有“待付款”、“已付款”、“已發(fā)貨”、“已完成”、“已取消”等狀態(tài)。
示例:對(duì)于一個(gè)“訂單”對(duì)象,其狀態(tài)可能包括:`初始化`、`待付款`、`已付款`、`處理中`、`已發(fā)貨`、`已完成`、`已取消`。
2.(2)定義狀態(tài)轉(zhuǎn)換的條件:
具體操作:確定對(duì)象從一個(gè)狀態(tài)轉(zhuǎn)換到另一個(gè)狀態(tài)的原因或觸發(fā)條件。通常是一個(gè)事件或操作。
實(shí)用技巧:每個(gè)狀態(tài)轉(zhuǎn)換都應(yīng)有明確的觸發(fā)事件。使用簡(jiǎn)潔、明確的語(yǔ)言描述事件。思考哪些操作或外部條件會(huì)導(dǎo)致?tīng)顟B(tài)改變。
示例:“訂單”對(duì)象的狀態(tài)轉(zhuǎn)換條件可能包括:`用戶支付成功`(觸發(fā)從`待付款`到`已付款`的轉(zhuǎn)換)、`系統(tǒng)處理訂單`(觸發(fā)從`已付款`到`處理中`)、`倉(cāng)庫(kù)發(fā)貨`(觸發(fā)從`處理中`到`已發(fā)貨`)、`用戶確認(rèn)收貨`或`系統(tǒng)超時(shí)`(觸發(fā)從`已發(fā)貨`到`已完成`)、`用戶申請(qǐng)取消`(觸發(fā)從`任何可取消狀態(tài)`到`已取消`)。
3.(3)繪制狀態(tài)圖,展示狀態(tài)和轉(zhuǎn)換:
具體操作:
使用標(biāo)準(zhǔn)的UML狀態(tài)圖符號(hào)(圓角矩形表示狀態(tài),箭頭表示轉(zhuǎn)換,轉(zhuǎn)換旁標(biāo)注事件/條件)繪制圖形。
將初始狀態(tài)用一個(gè)實(shí)心圓表示,放在狀態(tài)圖的左側(cè)。
將最終狀態(tài)(可選)用一個(gè)包含實(shí)心圓的空心圓表示,放在狀態(tài)圖的右側(cè)。
在狀態(tài)內(nèi)部可以包含“活動(dòng)”(用虛線框和文本表示對(duì)象在該狀態(tài)執(zhí)行的活動(dòng))和“子狀態(tài)”(用嵌套的圓角矩形表示并發(fā)或順序活動(dòng))。
在狀態(tài)轉(zhuǎn)換旁標(biāo)注觸發(fā)事件和可選的Guard條件(判斷是否允許轉(zhuǎn)換的條件)。
實(shí)用技巧:保持圖面清晰,狀態(tài)和轉(zhuǎn)換關(guān)系明確。對(duì)于復(fù)雜的狀態(tài)圖,可以使用嵌套狀態(tài)來(lái)分解狀態(tài)內(nèi)部的行為??紤]使用狀態(tài)機(jī)工具或偽代碼來(lái)輔助描述復(fù)雜的轉(zhuǎn)換邏輯。
示例:繪制一個(gè)狀態(tài)圖,包含“訂單”的七個(gè)狀態(tài)。從“初始化”開(kāi)始,根據(jù)示例中的轉(zhuǎn)換條件,用箭頭連接各個(gè)狀態(tài),并在箭頭旁標(biāo)注觸發(fā)事件,如“用戶支付成功”、“系統(tǒng)處理訂單”等。
2.注意事項(xiàng):
適用性:狀態(tài)圖最適合用于描述那些有明確生命周期、狀態(tài)變化顯著且狀態(tài)驅(qū)動(dòng)行為的對(duì)象(如訂單、訂單項(xiàng)、按鈕等)。不適合描述行為主要由方法調(diào)用驅(qū)動(dòng)的類(lèi)。
狀態(tài)粒度:狀態(tài)的粒度需要適中。太細(xì)的狀態(tài)圖會(huì)過(guò)于復(fù)雜,太粗的狀態(tài)圖則可能丟失重要的行為細(xì)節(jié)。
并發(fā)狀態(tài):使用嵌套狀態(tài)或復(fù)合狀態(tài)可以表示對(duì)象在某個(gè)狀態(tài)下同時(shí)執(zhí)行多個(gè)活動(dòng)。
(十二)活動(dòng)圖的應(yīng)用
1.繪制步驟:
1.(1)確定業(yè)務(wù)流程的步驟:
具體操作:識(shí)別系統(tǒng)要執(zhí)行的業(yè)務(wù)流程或操作的步驟。這些步驟可以是活動(dòng)的、動(dòng)作的或決策點(diǎn)。
實(shí)用技巧:從業(yè)務(wù)角度或用例實(shí)現(xiàn)的角度來(lái)思考流程。將大任務(wù)分解為更小的子任務(wù)。
示例:在線圖書(shū)銷(xiāo)售系統(tǒng)的“處理訂單”業(yè)務(wù)流程可能包括步驟:“驗(yàn)證訂單信息”、“檢查庫(kù)存”、“扣減庫(kù)存”、“創(chuàng)建支付請(qǐng)求”、“等待支付結(jié)果”、“處理支付結(jié)果”、“創(chuàng)建發(fā)貨單”、“安排發(fā)貨”。
2.(2)定義活動(dòng)的順序和條件:
具體操作:確定步驟之間的執(zhí)行順序,以及哪些步驟是條件性的(即,只有在滿足特定條件時(shí)才執(zhí)行)。
實(shí)用技巧:使用決策節(jié)點(diǎn)(菱形)來(lái)表示條件判斷。使用合并節(jié)點(diǎn)(相同的菱形)來(lái)表示從不同路徑到達(dá)同一后續(xù)步驟。使用分叉節(jié)點(diǎn)(相同的矩形)來(lái)表示一個(gè)活動(dòng)分裂為多個(gè)并行活動(dòng),匯合節(jié)點(diǎn)(相同的矩形)來(lái)表示多個(gè)并行活動(dòng)合并到一起。
示例:在“處理訂單”流程中,“檢查庫(kù)存”之后可能有一個(gè)決策節(jié)點(diǎn):“庫(kù)存充足?”(是/否)。如果“是”,則執(zhí)行“扣減庫(kù)存”和“創(chuàng)建支付請(qǐng)求”。如果“否”,則可能執(zhí)行“返回庫(kù)存不足錯(cuò)誤”。
3.(3)繪制活動(dòng)圖,展示活動(dòng)和流程:
具體操作:
使用標(biāo)準(zhǔn)的UML活動(dòng)圖符號(hào)(圓角矩形表示活動(dòng),菱形表示決策/合并/分叉節(jié)點(diǎn),箭頭表示流程方向)繪制圖形。
將流程的起始點(diǎn)用一個(gè)圓表示,放在圖的左側(cè)。
將流程的結(jié)束點(diǎn)用一個(gè)圓圈(帶有叉)表示,放在圖的右側(cè)。
按照步驟和決策邏輯,連接各個(gè)活動(dòng)節(jié)點(diǎn)和決策節(jié)點(diǎn)。
在活動(dòng)或決策節(jié)點(diǎn)內(nèi)部可以添加文本說(shuō)明。
實(shí)用技巧:活動(dòng)圖可以清晰地展示流程的控制流和數(shù)據(jù)流(通過(guò)對(duì)象流,用帶箭頭的虛線表示,標(biāo)明數(shù)據(jù)名稱(chēng))。對(duì)于復(fù)雜的流程,可以使用泳道(Swimlane)來(lái)按角色或部門(mén)劃分責(zé)任,提高可讀性。
示例:繪制一個(gè)活動(dòng)圖,展示“處理訂單”流程。從起始圓開(kāi)始,依次連接“驗(yàn)證訂單信息”、“檢查庫(kù)存”決策節(jié)點(diǎn)、“庫(kù)存充足?是->扣減庫(kù)存&創(chuàng)建支付請(qǐng)求”、“庫(kù)存充足?否->返回庫(kù)存不足錯(cuò)誤”等步驟,最后到達(dá)結(jié)束圓圈。
2.注意事項(xiàng):
焦點(diǎn):活動(dòng)圖側(cè)重于展示跨越多個(gè)對(duì)象或操作的流程控制和業(yè)務(wù)邏輯,而不是單個(gè)對(duì)象的行為。
泳道的使用:當(dāng)流程涉及多個(gè)參與者或部門(mén)時(shí),使用泳道可以使責(zé)任分配和流程路徑更加清晰。
與狀態(tài)圖的區(qū)別:活動(dòng)圖關(guān)注活動(dòng)的執(zhí)行順序和流程,而狀態(tài)圖關(guān)注對(duì)象在其生命周期中的狀態(tài)變化。
(十三)組件圖的應(yīng)用
1.繪制步驟:
1.(1)確定系統(tǒng)中的組件:
具體操作:識(shí)別系統(tǒng)中可替換的、物理的或邏輯的軟件單元。組件通常封裝了代碼和資源,并提供了接口供其他組件使用。常見(jiàn)的組件包括類(lèi)庫(kù)、接口、數(shù)據(jù)庫(kù)、文件、框架等。
實(shí)用技巧:思考哪些部分是系統(tǒng)可部署的單元?哪些部分提供了明確的接口供外部或內(nèi)部使用?哪些部分是源代碼、字節(jié)碼或可執(zhí)行文件?
示例:在線圖書(shū)銷(xiāo)售系統(tǒng)可能包含組件:“用戶界面組件”(UI)、“業(yè)務(wù)邏輯組件”(包含訂單處理、庫(kù)存管理等類(lèi))、“數(shù)據(jù)訪問(wèn)組件”(負(fù)責(zé)與數(shù)據(jù)庫(kù)交互)、“支付網(wǎng)關(guān)接口組件”、“日志組件”、“數(shù)據(jù)庫(kù)”。
2.(2)定義組件的依賴(lài)關(guān)系:
具體操作:確定組件之間如何相互依賴(lài)。依賴(lài)通常表示一個(gè)組件使用另一個(gè)組件的接口。
實(shí)用技巧:依賴(lài)關(guān)系是單向的。思考哪些組件需要調(diào)用其他組件的方法?哪些組件需要訪問(wèn)其他組件提供的接口或數(shù)據(jù)?
示例:“業(yè)務(wù)邏輯組件”可能依賴(lài)“數(shù)據(jù)訪問(wèn)組件”來(lái)獲取訂單數(shù)據(jù)。“用戶界面組件”可能依賴(lài)“業(yè)務(wù)邏輯組件”來(lái)處理用戶操作并獲取數(shù)據(jù)?!皹I(yè)務(wù)邏輯組件”可能依賴(lài)“支付網(wǎng)關(guān)接口組件”來(lái)處理支付。
3.(3)繪制組件圖,展示組件及其依賴(lài)關(guān)系:
具體操作:
使用標(biāo)準(zhǔn)的UML組件圖符號(hào)(矩形,內(nèi)含兩個(gè)小矩形,一個(gè)代表接口,一個(gè)代表實(shí)現(xiàn)/內(nèi)部類(lèi))來(lái)繪制每個(gè)組件。
使用帶箭頭的虛線(<依賴(lài)>關(guān)系)表示組件之間的依賴(lài)關(guān)系。箭頭指向被依賴(lài)的組件。
可以使用組件名、接口名和實(shí)現(xiàn)類(lèi)名來(lái)詳細(xì)描述組件。
實(shí)用技巧:組件圖有助于理解系統(tǒng)的物理或邏輯結(jié)構(gòu)以及組件間的交互方式。可以與包圖結(jié)合使用,包圖表示更高層次的模塊劃分,組件圖表示包內(nèi)部的實(shí)現(xiàn)細(xì)節(jié)。
示例:繪制一個(gè)組件圖,包含上述示例的五個(gè)組件。用帶箭頭的虛線表示“業(yè)務(wù)邏輯組件”依賴(lài)“數(shù)據(jù)訪問(wèn)組件”、“用戶界面組件”依賴(lài)“業(yè)務(wù)邏輯組件”、“業(yè)務(wù)邏輯組件”依賴(lài)“支付網(wǎng)關(guān)接口組件”的關(guān)系。
2.注意事項(xiàng):
組件粒度:組件的粒度應(yīng)根據(jù)建模目的確定??梢员硎敬至6鹊哪K,也可以表示細(xì)粒度的類(lèi)庫(kù)。
依賴(lài)方向:明確依賴(lài)關(guān)系的方向,理解是誰(shuí)在使用誰(shuí)。
與部署圖的關(guān)系:組件圖側(cè)重于組件的邏輯或物理構(gòu)成及其接口關(guān)系。部署圖則側(cè)重于這些組件在物理節(jié)點(diǎn)(如服務(wù)器、PC)上的實(shí)際分布和部署方式。一個(gè)組件可以在多個(gè)節(jié)點(diǎn)上部署。
(十四)部署圖的應(yīng)用
1.繪制步驟:
1.(1)確定系統(tǒng)的物理部署結(jié)構(gòu):
具體操作:識(shí)別系統(tǒng)運(yùn)行所需的物理節(jié)點(diǎn)(如服務(wù)器、客戶端計(jì)算機(jī)、網(wǎng)絡(luò)設(shè)備等)以及節(jié)點(diǎn)上的軟件組件或軟件運(yùn)行環(huán)境(如應(yīng)用服務(wù)器、數(shù)據(jù)庫(kù)服務(wù)器、Web服務(wù)器等)。
實(shí)用技巧:從系統(tǒng)的運(yùn)行環(huán)境出發(fā),思考軟件在哪里運(yùn)行?運(yùn)行在什么樣的硬件上?
示例:在線圖書(shū)銷(xiāo)售系統(tǒng)可能部署在以下物理節(jié)點(diǎn)上:“Web服務(wù)器節(jié)點(diǎn)”(運(yùn)行用戶界面組件和Web服務(wù)器軟件)、“應(yīng)用服務(wù)器節(jié)點(diǎn)”(運(yùn)行業(yè)務(wù)邏輯組件)、“數(shù)據(jù)庫(kù)服務(wù)器節(jié)點(diǎn)”(運(yùn)行數(shù)據(jù)庫(kù)管理系統(tǒng))、“支付網(wǎng)關(guān)服務(wù)器”(由第三方提供)。
2.(2)定義節(jié)點(diǎn)和組件的部署關(guān)系:
具體操作:確定哪些軟件組件或運(yùn)行環(huán)境部署在哪些物理節(jié)點(diǎn)上。這通常表示為節(jié)點(diǎn)之間的“部署”關(guān)系。
實(shí)用技巧:思考每個(gè)組件或運(yùn)行環(huán)境需要運(yùn)行在什么樣的硬件或軟件平臺(tái)上。
示例:“用戶界面組件”和“Web服務(wù)器軟件”部署在“Web服務(wù)器節(jié)點(diǎn)”上?!皹I(yè)務(wù)邏輯組件”部署在“應(yīng)用服務(wù)器節(jié)點(diǎn)”上?!皵?shù)據(jù)庫(kù)管理系統(tǒng)”運(yùn)行在“數(shù)據(jù)庫(kù)服務(wù)器節(jié)點(diǎn)”上?!爸Ц毒W(wǎng)關(guān)接口組件”(可能是一個(gè)客戶端庫(kù)或配置)運(yùn)行在“Web服務(wù)器節(jié)點(diǎn)”或“應(yīng)用服務(wù)器節(jié)點(diǎn)”上,與外部支付網(wǎng)關(guān)服務(wù)交互。
3.(3)繪制部署圖,展示節(jié)點(diǎn)和組件:
具體操作:
使用標(biāo)準(zhǔn)的UML部署圖符號(hào)(矩形表示節(jié)點(diǎn),圓柱體表示軟件組件,圓表示設(shè)備,黑點(diǎn)表示處理器)來(lái)繪制圖形。
在節(jié)點(diǎn)內(nèi)可以列出其包含的軟件組件或運(yùn)行環(huán)境。
使用帶箭頭的實(shí)線(<部署>關(guān)系)表示組件被部署在節(jié)點(diǎn)上。箭頭指向節(jié)點(diǎn)。
實(shí)用技巧:部署圖清晰地展示了系統(tǒng)的物理架構(gòu)和軟件分布。有助于進(jìn)行系統(tǒng)部署規(guī)劃、網(wǎng)絡(luò)配置和硬件資源分配。
示例:繪制一個(gè)部署圖,包含“Web服務(wù)器節(jié)點(diǎn)”、“應(yīng)用服務(wù)器節(jié)點(diǎn)”、“數(shù)據(jù)庫(kù)服務(wù)器節(jié)點(diǎn)”。在“Web服務(wù)器節(jié)點(diǎn)”內(nèi)標(biāo)注“Web服務(wù)器”、“用戶界面組件”、“支付網(wǎng)關(guān)接口組件”。在“應(yīng)用服務(wù)器節(jié)點(diǎn)”內(nèi)標(biāo)注“應(yīng)用服務(wù)器”、“業(yè)務(wù)邏輯組件”。在“數(shù)據(jù)庫(kù)服務(wù)器節(jié)點(diǎn)”內(nèi)標(biāo)注“數(shù)據(jù)庫(kù)管理系統(tǒng)”。
2.注意事項(xiàng):
抽象級(jí)別:部署圖通常表示相對(duì)較高的抽象級(jí)別??梢员硎具壿嫻?jié)點(diǎn),也可以表示物理服務(wù)器。
關(guān)系類(lèi)型:明確使用“部署”關(guān)系來(lái)表示組件與節(jié)點(diǎn)的綁定。
與組件圖和組件的關(guān)系:部署圖中的節(jié)點(diǎn)包含了組件圖中的組件。一個(gè)組件可能被部署在多個(gè)節(jié)點(diǎn)上(如應(yīng)用服務(wù)器軟件),也可能一個(gè)節(jié)點(diǎn)上部署多個(gè)組件。
三、總結(jié)
UML周期表提供了一套規(guī)范化的UML圖及其應(yīng)用場(chǎng)景,是面向?qū)ο蠓治雠c設(shè)計(jì)中不可或缺的工具。本指南詳細(xì)闡述了UML周期表中主要圖(用例圖、類(lèi)圖、時(shí)序圖、狀態(tài)圖、活動(dòng)圖、組件圖和部署圖)的應(yīng)用細(xì)則,包括具體的繪制步驟、注意事項(xiàng)以及實(shí)用技巧。通過(guò)學(xué)習(xí)和實(shí)踐這些規(guī)定和應(yīng)用細(xì)則,開(kāi)發(fā)者能夠更系統(tǒng)、高效、準(zhǔn)確地使用UML進(jìn)行建模,從而提升軟件設(shè)計(jì)的質(zhì)量、可維護(hù)性和可理解性。掌握UML周期表的應(yīng)用,是成為一名優(yōu)秀軟件開(kāi)發(fā)者或系統(tǒng)分析員的關(guān)鍵技能之一。
一、UML周期表概述
UML(統(tǒng)一建模語(yǔ)言)周期表是面向?qū)ο蠓治雠c設(shè)計(jì)領(lǐng)域中的一種重要工具,用于規(guī)范和簡(jiǎn)化UML圖的設(shè)計(jì)與使用。它通過(guò)定義一系列常用的UML圖及其應(yīng)用場(chǎng)景,幫助開(kāi)發(fā)者在建模過(guò)程中提高效率和質(zhì)量。本指南將詳細(xì)介紹UML周期表的規(guī)定和應(yīng)用細(xì)則,以確保使用者能夠正確理解和應(yīng)用。
(一)UML周期表的基本規(guī)定
1.周期表的構(gòu)成:UML周期表主要包含以下幾類(lèi)圖:
-用例圖
-類(lèi)圖
-時(shí)序圖
-狀態(tài)圖
-活動(dòng)圖
-組件圖
-部署圖
2.圖的應(yīng)用場(chǎng)景:
-用例圖:用于描述系統(tǒng)功能和用戶交互。
-類(lèi)圖:用于表示系統(tǒng)中的類(lèi)及其關(guān)系。
-時(shí)序圖:用于展示對(duì)象之間消息傳遞的時(shí)間順序。
-狀態(tài)圖:用于描述對(duì)象狀態(tài)變化及其觸發(fā)條件。
-活動(dòng)圖:用于表示系統(tǒng)中的業(yè)務(wù)流程。
-組件圖:用于展示系統(tǒng)中的組件及其依賴(lài)關(guān)系。
-部署圖:用于描述系統(tǒng)物理部署結(jié)構(gòu)。
(二)UML周期表的使用規(guī)范
1.命名規(guī)范:
-圖的名稱(chēng)應(yīng)簡(jiǎn)潔明了,反映其功能。
-類(lèi)和對(duì)象的命名應(yīng)符合駝峰命名法或下劃線命名法。
2.圖例規(guī)范:
-使用標(biāo)準(zhǔn)的UML圖例符號(hào),確保一致性。
-避免使用非標(biāo)準(zhǔn)的符號(hào)和標(biāo)記。
二、UML周期表的應(yīng)用細(xì)則
(一)用例圖的應(yīng)用
1.繪制步驟:
-(1)確定系統(tǒng)邊界。
-(2)識(shí)別參與者。
-(3)定義用例。
-(4)繪制用例圖,連接參與者和用例。
2.注意事項(xiàng):
-用例應(yīng)具有明確的觸發(fā)條件和結(jié)果。
-參與者應(yīng)具有唯一的標(biāo)識(shí)。
(二)類(lèi)圖的應(yīng)用
1.繪制步驟:
-(1)識(shí)別系統(tǒng)中的類(lèi)。
-(2)定義類(lèi)的屬性和方法。
-(3)確定類(lèi)之間的關(guān)系(繼承、關(guān)聯(lián)、依賴(lài)等)。
-(4)繪制類(lèi)圖,展示類(lèi)及其關(guān)系。
2.注意事項(xiàng):
-類(lèi)的命名應(yīng)反映其功能。
-屬性和方法應(yīng)具有明確的類(lèi)型和訪問(wèn)權(quán)限。
(三)時(shí)序圖的應(yīng)用
1.繪制步驟:
-(1)確定對(duì)象。
-(2)定義消息傳遞的順序。
-(3)繪制時(shí)序圖,展示對(duì)象和消息傳遞。
2.注意事項(xiàng):
-消息傳遞應(yīng)具有明確的時(shí)間順序。
-對(duì)象的激活和終止應(yīng)清晰表示。
(四)狀態(tài)圖的應(yīng)用
1.繪制步驟:
-(1)確定對(duì)象的狀態(tài)。
-(2)定義狀態(tài)轉(zhuǎn)換的條件。
-(3)繪制狀態(tài)圖,展示狀態(tài)和轉(zhuǎn)換。
2.注意事項(xiàng):
-狀態(tài)轉(zhuǎn)換應(yīng)具有明確的觸發(fā)條件。
-狀態(tài)的命名應(yīng)簡(jiǎn)潔明了。
(五)活動(dòng)圖的應(yīng)用
1.繪制步驟:
-(1)確定業(yè)務(wù)流程的步驟。
-(2)定義活動(dòng)的順序和條件。
-(3)繪制活動(dòng)圖,展示活動(dòng)和流程。
2.注意事項(xiàng):
-活動(dòng)的命名應(yīng)反映其功能。
-活動(dòng)的順序和條件應(yīng)明確表示。
(六)組件圖的應(yīng)用
1.繪制步驟:
-(1)確定系統(tǒng)中的組件。
-(2)定義組件的依賴(lài)關(guān)系。
-(3)繪制組件圖,展示組件及其關(guān)系。
2.注意事項(xiàng):
-組件的命名應(yīng)反映其功能。
-組件的依賴(lài)關(guān)系應(yīng)明確表示。
(七)部署圖的應(yīng)用
1.繪制步驟:
-(1)確定系統(tǒng)的物理部署結(jié)構(gòu)。
-(2)定義節(jié)點(diǎn)和組件的部署關(guān)系。
-(3)繪制部署圖,展示節(jié)點(diǎn)和組件。
2.注意事項(xiàng):
-節(jié)點(diǎn)的命名應(yīng)反映其功能。
-節(jié)點(diǎn)和組件的部署關(guān)系應(yīng)明確表示。
三、總結(jié)
UML周期表是面向?qū)ο蠓治雠c設(shè)計(jì)中的一種重要工具,通過(guò)規(guī)范和簡(jiǎn)化UML圖的設(shè)計(jì)與使用,幫助開(kāi)發(fā)者在建模過(guò)程中提高效率和質(zhì)量。本指南詳細(xì)介紹了UML周期表的規(guī)定和應(yīng)用細(xì)則,包括用例圖、類(lèi)圖、時(shí)序圖、狀態(tài)圖、活動(dòng)圖、組件圖和部署圖的應(yīng)用步驟和注意事項(xiàng)。正確理解和應(yīng)用UML周期表,將有助于提高建模的準(zhǔn)確性和一致性。
二、UML周期表的應(yīng)用細(xì)則(續(xù))
(八)用例圖的應(yīng)用(續(xù))
1.繪制步驟(續(xù))
1.(1)確定系統(tǒng)邊界:
具體操作:明確系統(tǒng)所包含的功能范圍以及不包含的功能范圍。這通常通過(guò)與系統(tǒng)用戶(參與者)的溝通以及分析系統(tǒng)目標(biāo)來(lái)完成。
實(shí)用技巧:可以使用一個(gè)“沉默的外部實(shí)體”來(lái)代表系統(tǒng)之外的、不直接交互但影響系統(tǒng)的因素(如外部數(shù)據(jù)源)。明確邊界有助于界定參與者和用例的合理性。
示例:在一個(gè)在線圖書(shū)銷(xiāo)售系統(tǒng)的用例圖中,系統(tǒng)邊界可以定義為“處理圖書(shū)購(gòu)買(mǎi)、支付、訂單管理和用戶賬戶相關(guān)操作”。而系統(tǒng)外部的因素,如“郵政服務(wù)”可以作為沉默的外部實(shí)體處理圖書(shū)的物理配送。
2.(2)識(shí)別參與者:
具體操作:識(shí)別所有與系統(tǒng)交互的外部實(shí)體,這些實(shí)體可以是人、其他系統(tǒng)或設(shè)備。參與者是主動(dòng)發(fā)起用例的實(shí)體。
實(shí)用技巧:采用“角色”的思維來(lái)思考參與者。問(wèn)自己:“誰(shuí)會(huì)使用這個(gè)功能?”“誰(shuí)需要從系統(tǒng)中獲取信息?”“誰(shuí)會(huì)對(duì)系統(tǒng)的運(yùn)行產(chǎn)生影響?”
示例:在線圖書(shū)銷(xiāo)售系統(tǒng)的參與者可能包括“普通用戶”、“管理員”、“支付網(wǎng)關(guān)”(作為一個(gè)系統(tǒng)參與者)。
3.(3)定義用例:
具體操作:為每個(gè)參與者定義其能請(qǐng)求系統(tǒng)執(zhí)行的操作或任務(wù)。用例應(yīng)描述系統(tǒng)為參與者提供的價(jià)值,通常以動(dòng)詞短語(yǔ)開(kāi)頭(如“查詢(xún)圖書(shū)”、“下訂單”)。
實(shí)用技巧:每個(gè)用例應(yīng)具有一個(gè)清晰的、用戶可理解的名稱(chēng)。用例描述應(yīng)簡(jiǎn)潔,但足夠詳細(xì)地說(shuō)明用例的目的、參與者、前置條件、基本流程和后置條件。可以采用“參與者:用例名稱(chēng)”的格式來(lái)組織。
示例:針對(duì)“普通用戶”和“管理員”,可能的用例包括:“普通用戶:瀏覽圖書(shū)”、“普通用戶:搜索圖書(shū)”、“普通用戶:下訂單”、“管理員:管理圖書(shū)目錄”、“管理員:處理訂單”。
4.(4)繪制用例圖,連接參與者和用例:
具體操作:使用標(biāo)準(zhǔn)的UML用例圖符號(hào)(參與者矩形、用例橢圓、關(guān)聯(lián)線)來(lái)繪制圖形。將參與者放置在系統(tǒng)的邊界之外,用例放置在邊界之內(nèi),用關(guān)聯(lián)線連接參與者和它所參與的用例。
實(shí)用技巧:確保圖面布局清晰、簡(jiǎn)潔??梢允褂冒ň匦危﹣?lái)組織相關(guān)的用例,特別是當(dāng)用例較多時(shí),可以提高可讀性。例如,可以將所有與用戶賬戶相關(guān)的用例(如“注冊(cè)”、“登錄”、“修改個(gè)人信息”)放在一個(gè)名為“用戶管理”的包中。
示例:在繪圖中,將代表“普通用戶”和“管理員”的參與者放在圖的左側(cè),將“瀏覽圖書(shū)”、“搜索圖書(shū)”、“下訂單”、“管理圖書(shū)目錄”、“處理訂單”等用例橢圓放在右側(cè),并用線條分別連接用戶到其對(duì)應(yīng)的用例。
2.注意事項(xiàng)(續(xù))
用例的粒度:用例應(yīng)保持在一個(gè)合理的粒度級(jí)別。太細(xì)的用例會(huì)使圖變得雜亂,太粗的用例則可能隱藏重要的交互細(xì)節(jié)。通常,一個(gè)用例對(duì)應(yīng)一個(gè)用戶故事或一個(gè)屏幕上的操作流程是比較合適的。
前置條件與后置條件:雖然不總是在用例圖中詳細(xì)表示,但理解每個(gè)用例的前置條件(執(zhí)行用例前必須滿足的條件)和后置條件(用例執(zhí)行完成后的結(jié)果狀態(tài))對(duì)于深入理解用例至關(guān)重要。這些信息通常在用例描述文檔中詳細(xì)說(shuō)明。
擴(kuò)展用例與泛化用例:對(duì)于復(fù)雜的用例,可以使用擴(kuò)展(<擴(kuò)展>關(guān)系)來(lái)表示特定條件下的附加流程,或者使用泛化(<泛化>關(guān)系)來(lái)表示共享相同核心行為的多個(gè)用例(例如,“搜索圖書(shū)”和“按ISBN搜索圖書(shū)”可以泛化自一個(gè)“搜索”的基用例)。
(九)類(lèi)圖的應(yīng)用(續(xù))
1.繪制步驟(續(xù))
1.(1)識(shí)別系統(tǒng)中的類(lèi):
具體操作:通過(guò)分析用例圖、業(yè)務(wù)需求或領(lǐng)域知識(shí),識(shí)別出系統(tǒng)中需要建模的核心概念,這些概念通??梢赞D(zhuǎn)化為類(lèi)。思考:“系統(tǒng)需要存儲(chǔ)哪些信息?”“系統(tǒng)需要執(zhí)行哪些操作?”“哪些是系統(tǒng)中的關(guān)鍵實(shí)體?”
實(shí)用技巧:可以采用“名詞識(shí)別法”,從需求文檔或用例描述中提取名詞,并判斷這些名詞是否代表類(lèi)。同時(shí),注意識(shí)別名詞短語(yǔ)中的動(dòng)詞,這可能暗示關(guān)聯(lián)或依賴(lài)關(guān)系。例如,“用戶登錄”可能涉及“用戶”和“登錄”兩個(gè)類(lèi)或概念。
2.(2)定義類(lèi)的屬性和方法:
具體操作:為每個(gè)識(shí)別出的類(lèi),定義其具有的屬性(數(shù)據(jù))和方法(行為)。屬性描述了類(lèi)的靜態(tài)特征,方法描述了類(lèi)的動(dòng)態(tài)行為。
實(shí)用技巧:屬性應(yīng)包括其名稱(chēng)、數(shù)據(jù)類(lèi)型(或表示復(fù)雜類(lèi)型的類(lèi)型名)、以及訪問(wèn)權(quán)限(public,private,protected)。方法應(yīng)包括其名稱(chēng)、參數(shù)列表(名稱(chēng)和類(lèi)型)、返回類(lèi)型(或void表示無(wú)返回值)以及訪問(wèn)權(quán)限??紤]類(lèi)的職責(zé)原則(SingleResponsibilityPrinciple),確保一個(gè)類(lèi)只負(fù)責(zé)一項(xiàng)核心職責(zé)。
示例:在在線圖書(shū)銷(xiāo)售系統(tǒng)中,“用戶”類(lèi)可能具有屬性:`用戶ID`(String),`用戶名`(String),`密碼`(String,private),`郵箱`(String),`注冊(cè)日期`(Date);可能具有方法:`登錄()`(void),`修改密碼()`(String->void),`獲取用戶信息()`(->用戶信息)。“圖書(shū)”類(lèi)可能具有屬性:`圖書(shū)ID`(String),`書(shū)名`(String),`作者`(String),`價(jià)格`(Decimal),`庫(kù)存數(shù)量`(Integer);方法:`更新庫(kù)存()`(Integer->void)。
3.(3)確定類(lèi)之間的關(guān)系:
具體操作:分析類(lèi)與類(lèi)之間的相互作用和依賴(lài)。常見(jiàn)的UML關(guān)系包括關(guān)聯(lián)、依賴(lài)、泛化、實(shí)現(xiàn)和聚合/組合。
實(shí)用技巧:
關(guān)聯(lián):表示兩個(gè)類(lèi)之間的語(yǔ)義連接,通常隱含了“有一個(gè)”或“屬于”的關(guān)系。例如,“用戶”關(guān)聯(lián)到“訂單”(一個(gè)用戶可以有多個(gè)訂單)。使用關(guān)聯(lián)線,并可以附加角色名來(lái)明確關(guān)系含義(如“用戶”到“訂單”的關(guān)聯(lián)可以標(biāo)注角色名“訂單所有者”)。
依賴(lài):表示一個(gè)類(lèi)的變化可能影響另一個(gè)類(lèi),但影響是單向的、臨時(shí)的。通常用虛線表示。例如,“訂單”類(lèi)可能依賴(lài)“支付網(wǎng)關(guān)”接口類(lèi)來(lái)處理支付,但并不直接持有支付網(wǎng)關(guān)的實(shí)例。
泛化:表示繼承關(guān)系,子類(lèi)繼承父類(lèi)的屬性和方法。使用空心三角形箭頭指向父類(lèi)。例如,“普通用戶”和“管理員”可以泛化自一個(gè)基類(lèi)“用戶”。
實(shí)現(xiàn):表示一個(gè)類(lèi)實(shí)現(xiàn)了另一個(gè)接口。使用實(shí)線加空心三角形箭頭指向接口。例如,“支付網(wǎng)關(guān)”可能定義一個(gè)接口,“支付寶支付”和“微信支付”類(lèi)實(shí)現(xiàn)該接口。
聚合/組合:表示整體與部分的關(guān)系。聚合表示部分可以獨(dú)立于整體存在(如“訂單”包含“圖書(shū)”,但圖書(shū)也可以獨(dú)立存在),組合表示部分的生命周期完全屬于整體(如“汽車(chē)”包含“引擎”,引擎隨汽車(chē)生滅)。聚合用空心菱形表示,組合用實(shí)心菱形表示。
示例:“用戶”與“訂單”之間存在一對(duì)多(1:N)的關(guān)聯(lián)關(guān)系?!坝唵巍迸c“圖書(shū)”之間存在多對(duì)多(M:N)的關(guān)聯(lián)關(guān)系,可能需要一個(gè)中間類(lèi)“訂單項(xiàng)”來(lái)表示。“用戶”泛化自“實(shí)體”?!坝唵巍笨赡芤蕾?lài)一個(gè)抽象的“支付方式”接口。
4.(4)繪制類(lèi)圖,展示類(lèi)及其關(guān)系:
具體操作:使用標(biāo)準(zhǔn)的UML類(lèi)圖符號(hào)(類(lèi)矩形,分為三個(gè)部分:名稱(chēng)、屬性、方法)來(lái)繪制每個(gè)類(lèi),并使用相應(yīng)的線條和符號(hào)表示類(lèi)之間的關(guān)系。確保圖面布局合理,避免線條交叉。
實(shí)用技巧:可以使用包(矩形)來(lái)組織相關(guān)的類(lèi)。例如,將所有表示實(shí)體的類(lèi)放在“模型”包中,表示功能或服務(wù)的類(lèi)放在“服務(wù)”包中。使用包的嵌套來(lái)表示更細(xì)粒度的組織。
示例:繪制一個(gè)類(lèi)圖,包含“用戶”、“訂單”、“圖書(shū)”、“訂單項(xiàng)”、“支付方式”等類(lèi),并正確表示它們之間的關(guān)聯(lián)、依賴(lài)和泛化關(guān)系。
2.注意事項(xiàng)(續(xù))
類(lèi)的職責(zé):持續(xù)評(píng)估每個(gè)類(lèi)的職責(zé)是否符合單一職責(zé)原則。如果一個(gè)類(lèi)承擔(dān)了太多職責(zé),可能需要將其拆分為更小的類(lèi)。
關(guān)聯(lián)的表示:清晰地標(biāo)注關(guān)聯(lián)的角色名,這有助于理解數(shù)據(jù)流和責(zé)任分配。明確關(guān)聯(lián)是雙向的還是單向的(通常通過(guò)屬性表示)。
屬性和方法的可見(jiàn)性:合理使用public,private,protected等訪問(wèn)修飾符。public表示類(lèi)外部都可以訪問(wèn),private表示只能在類(lèi)內(nèi)部訪問(wèn),protected表示只能在類(lèi)本身及其子類(lèi)中訪問(wèn)。良好的封裝性是面向?qū)ο笤O(shè)計(jì)的重要原則。
常量與變量:對(duì)于不應(yīng)改變的屬性,應(yīng)將其定義為常量(在UML中通常用斜體表示)。
(十)時(shí)序圖的應(yīng)用
1.繪制步驟:
1.(1)確定對(duì)象:
具體操作:識(shí)別在特定場(chǎng)景(用例或操作)中需要交互的主要對(duì)象。這些對(duì)象將作為時(shí)序圖中的“生命線”(Lifeline)。
實(shí)用技巧:重點(diǎn)關(guān)注那些主動(dòng)發(fā)送消息或接收重要消息的對(duì)象??紤]參與該場(chǎng)景的主要參與者對(duì)應(yīng)的類(lèi)實(shí)例。
示例:在“用戶下訂單”場(chǎng)景中,主要對(duì)象可能包括“用戶”(發(fā)起者)、“訂單”對(duì)象、“購(gòu)物車(chē)”對(duì)象(如果適用)、“支付網(wǎng)關(guān)”對(duì)象。
2.(2)定義消息傳遞的順序:
具體操作:根據(jù)用例描述或業(yè)務(wù)流程,詳細(xì)列出對(duì)象之間交互的消息序列,并確定消息發(fā)送的時(shí)間順序。
實(shí)用技巧:可以從第一個(gè)動(dòng)作開(kāi)始,按時(shí)間順序逐步描述。使用不同的消息類(lèi)型:同步消息(一個(gè)對(duì)象等待另一個(gè)對(duì)象響應(yīng))、異步消息(發(fā)送方不等待響應(yīng))、返回消息(方法調(diào)用的結(jié)果返回)。注意區(qū)分主要流程和可選流程、異常流程。
示例:“用戶”對(duì)象首先向“購(gòu)物車(chē)”對(duì)象發(fā)送“獲取購(gòu)物車(chē)商品”消息?!百?gòu)物車(chē)”返回商品列表?!坝脩簟边x擇商品,并發(fā)送“將商品加入購(gòu)物車(chē)”消息給“購(gòu)物車(chē)”。“購(gòu)物車(chē)”更新?tīng)顟B(tài)并返回確認(rèn)?!坝脩簟毕颉坝唵巍睂?duì)象發(fā)送“創(chuàng)建新訂單”消息,附帶商品列表?!坝唵巍眲?chuàng)建訂單并返回訂單號(hào)。“用戶”向“支付網(wǎng)關(guān)”發(fā)送“發(fā)起支付”消息,附帶訂單號(hào)和金額。“支付網(wǎng)關(guān)”處理支付,并發(fā)送“支付成功”或“支付失敗”消息給“訂單”。
3.(3)繪制時(shí)序圖,展示對(duì)象和消息傳遞:
具體操作:
繪制垂直的“生命線”代表每個(gè)對(duì)象。
在生命線上按時(shí)間順序繪制“消息框”(矩形),框內(nèi)寫(xiě)明消息名稱(chēng)。同步消息直接連接發(fā)送方和接收方的生命線。異步消息用帶箭頭的虛線表示發(fā)送。返回消息用帶箭頭的返回線表示。
在對(duì)象生命線的特定位置可以繪制“激活條”(細(xì)矩形),表示該對(duì)象正在執(zhí)行操作或處理消息。
在圖的頂部可以標(biāo)注場(chǎng)景名稱(chēng)或時(shí)間點(diǎn)。
實(shí)用技巧:保持圖面
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電機(jī)與電氣控制技術(shù) 課件 項(xiàng)目5 交流電機(jī)控制電路的安裝、設(shè)計(jì)與調(diào)試
- 《GBT 21374-2008知識(shí)產(chǎn)權(quán)文獻(xiàn)與信息 基本詞匯》專(zhuān)題研究報(bào)告
- 《GBT 9984-2008工業(yè)三聚磷酸鈉試驗(yàn)方法》專(zhuān)題研究報(bào)告
- 2026年甘肅慶陽(yáng)市高職單招語(yǔ)文試題含答案
- 2026年廣東省廣州市輔警考試真題及答案
- 迪士尼施工安全培訓(xùn)課件
- 返工返崗安全培訓(xùn)內(nèi)容課件
- 食品衛(wèi)生知識(shí)試題及答案
- 車(chē)險(xiǎn)知識(shí)課件演講
- 內(nèi)科主治醫(yī)師專(zhuān)項(xiàng)練習(xí)試題及答案
- 2025檢驗(yàn)科個(gè)人年終工作總結(jié)
- 救護(hù)車(chē)急救護(hù)理查房
- 工程竣工移交單(移交甲方、物業(yè))
- 交熟食技術(shù)協(xié)議書(shū)
- 靜脈采血不良事件分析與改進(jìn)
- JJF 2216-2025電磁流量計(jì)在線校準(zhǔn)規(guī)范
- 2024-2025學(xué)年廣東省深圳市福田區(qū)六年級(jí)(上)期末數(shù)學(xué)試卷
- 發(fā)改價(jià)格〔2007〕670號(hào)建設(shè)工程監(jiān)理與相關(guān)服務(wù)收費(fèi)標(biāo)準(zhǔn)
- 道岔滾輪作用原理講解信號(hào)設(shè)備檢修作業(yè)課件
- 小學(xué)師徒結(jié)對(duì)師傅工作總結(jié)
- 廉潔征兵培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論