面向?qū)ο蠓椒ㄊ且环N非常實(shí)用的軟件開(kāi)發(fā)方法旦万,它一出現(xiàn)就受到軟件技術(shù)人員的青睞,現(xiàn)已成為計(jì)算機(jī)科學(xué)研究的一個(gè)重要領(lǐng)域,并逐漸成為軟件開(kāi)發(fā)的一種主要方法嘱兼。面向?qū)ο蠓椒ㄒ钥陀^世界中的對(duì)象為中心,其分析和設(shè)計(jì)思想符合人們的思維方式贤徒,分析和設(shè)計(jì)的結(jié)構(gòu)與客觀世界的實(shí)際比較接近芹壕,容易被人們接受。在面向?qū)ο蠓椒ㄖ薪幽危治龊驮O(shè)計(jì)的界面并不明顯踢涌,它們采用相同的符號(hào)表示,能夠方便地從分析階段平滑地過(guò)渡到設(shè)計(jì)階段鲫趁。此外斯嚎,在現(xiàn)實(shí)生活中,用戶(hù)的需求經(jīng)常會(huì)發(fā)生變化,但客觀世界的對(duì)象及對(duì)象間的關(guān)系比較穩(wěn)定堡僻,因此用面向?qū)ο蠓椒ǚ治龊驮O(shè)計(jì)的結(jié)構(gòu)也相對(duì)比較穩(wěn)定糠惫。
1 面向?qū)ο蟮幕靖拍?/h2>
1.1 對(duì)象和類(lèi)
對(duì)象是系統(tǒng)中用來(lái)描述客觀事物的一個(gè)實(shí)體,它由對(duì)象標(biāo)識(shí)(名稱(chēng)) 钉疫、 屬性(狀態(tài) 硼讽、 數(shù)據(jù) 、 成員變量)和服務(wù)(操作 牲阁、 行為 固阁、 方法)三個(gè)要素組成,它們被封裝為一個(gè)整體城菊,以接口的形式對(duì)外提供服務(wù)备燃。
在現(xiàn)實(shí)世界中,每個(gè)實(shí)體都是對(duì)象凌唬,如學(xué)生 并齐、 書(shū)籍 、 收音機(jī)等客税;每個(gè)對(duì)象都有它的操作况褪,例如書(shū)籍的頁(yè)數(shù),收音機(jī)的頻道 更耻、 按鈕等屬性测垛,以及收音機(jī)的切換頻道等操作。而類(lèi)則是對(duì)具有相同屬性和服務(wù)的一個(gè)或一組對(duì)象的抽象秧均。
類(lèi)與對(duì)象是抽象描述和具體實(shí)例的關(guān)系食侮,一個(gè)具體的對(duì)象被稱(chēng)為類(lèi)的一個(gè)實(shí)例。
在系統(tǒng)設(shè)計(jì)過(guò)程中目胡,類(lèi)可以分為三種類(lèi)型疙描,分別是實(shí)體類(lèi) 、 邊界類(lèi)和控制類(lèi)讶隐。
(1)實(shí)體類(lèi)
實(shí)體類(lèi)映射需求中的每個(gè)實(shí)體起胰,實(shí)體類(lèi)保存需要存儲(chǔ)在永久存儲(chǔ)體中的信息,例如巫延,在線(xiàn)教育平臺(tái)系統(tǒng)可以提取出學(xué)員類(lèi)和課程類(lèi)效五,它們都屬于實(shí)體類(lèi)。實(shí)體類(lèi)通常都是永久性的炉峰,它們所具有的屬性和關(guān)系是長(zhǎng)期需要的畏妖,有時(shí)甚至在系統(tǒng)的整個(gè)生存期都需要。
實(shí)體類(lèi)是對(duì)用戶(hù)來(lái)說(shuō)最有意義的類(lèi)疼阔,通常采用業(yè)務(wù)領(lǐng)域術(shù)語(yǔ)命名戒劫,一般來(lái)說(shuō)是一個(gè)名詞半夷,在用例模型向領(lǐng)域模型的轉(zhuǎn)化中,一個(gè)參與者一般對(duì)應(yīng)于實(shí)體類(lèi)迅细。
通澄组希可以從數(shù)據(jù)庫(kù)表(需要持久存儲(chǔ))對(duì)應(yīng)的名詞著手來(lái)找尋實(shí)體類(lèi)。通常情況下茵典,實(shí)體類(lèi)一定有屬性湘换,但不一定有操作。
(2)控制類(lèi)
控制類(lèi)是用于控制用例工作的類(lèi)统阿,一般是由動(dòng)賓結(jié)構(gòu)的短語(yǔ)( “ 動(dòng)詞 + 名詞 ” 或 “ 名詞 + 動(dòng)詞 ” )轉(zhuǎn)化來(lái)的名詞彩倚,例如,用例 “ 身份驗(yàn)證 ” 可以對(duì)應(yīng)于一個(gè)控制類(lèi) “ 身份驗(yàn)證器 ” 扶平,它提供了與身份驗(yàn)證相關(guān)的所有操作帆离。
控制類(lèi)用于對(duì)一個(gè)或幾個(gè)用例所特有的控制行為進(jìn)行建模,控制對(duì)象(控制類(lèi)的實(shí)例)通辰岢危控制其他對(duì)象盯质,因此,它們的行為具有協(xié)調(diào)性概而。
控制類(lèi)將用例的特有行為進(jìn)行封裝,控制對(duì)象的行為與特定用例的實(shí)現(xiàn)密切相關(guān)囱修,當(dāng)系統(tǒng)執(zhí)行用例的時(shí)候赎瑰,就產(chǎn)生了一個(gè)控制對(duì)象,控制對(duì)象經(jīng)常在其對(duì)應(yīng)的用例執(zhí)行完畢后消亡破镰。通常情況下餐曼,控制類(lèi)沒(méi)有屬性,但一定有方法鲜漩。
(3)邊界類(lèi)
邊界類(lèi)用于封裝在用例內(nèi) 源譬、 外流動(dòng)的信息或數(shù)據(jù)流。邊界類(lèi)位于系統(tǒng)與外界的交接處孕似,包括所有窗體 踩娘、 報(bào)表 、 打印機(jī)和掃描儀等硬件的接口喉祭,以及與其他系統(tǒng)的接口养渴。要尋找和定義邊界類(lèi),可以檢查用例模型泛烙,每個(gè)參與者和用例交互至少要有一個(gè)邊界類(lèi)理卑,邊界類(lèi)使參與者能與系統(tǒng)交互。
邊界類(lèi)是一種用于對(duì)系統(tǒng)外部環(huán)境與其內(nèi)部運(yùn)作之間的交互進(jìn)行建模的類(lèi)蔽氨。常見(jiàn)的邊界類(lèi)有窗口 藐唠、 通信協(xié)議 帆疟、 打印機(jī)接口 、 傳感器和終端等宇立。實(shí)際上踪宠,在系統(tǒng)設(shè)計(jì)時(shí),產(chǎn)生的報(bào)表都可以作為邊界類(lèi)來(lái)處理泄伪。邊界類(lèi)用于系統(tǒng)接口與系統(tǒng)外部進(jìn)行交互殴蓬,邊界對(duì)象將系統(tǒng)與其外部環(huán)境的變更(例如,與其他系統(tǒng)的接口的變更 蟋滴、 用戶(hù)需求的變更等)分隔開(kāi)染厅,使這些變更不會(huì)對(duì)系統(tǒng)的其他部分造成影響。通常情況下津函,邊界類(lèi)可以既有屬性也有方法肖粮。
1.2 繼承與泛化
繼承是面向?qū)ο蠓椒ㄖ兄匾母拍睿脕?lái)說(shuō)明特殊類(lèi)(子類(lèi))與一般類(lèi)(父類(lèi))的關(guān)系尔苦,而通常用泛化來(lái)說(shuō)明一般類(lèi)與特殊類(lèi)的關(guān)系涩馆,也就是說(shuō)它們是一對(duì)多關(guān)系。如圖 1 所示允坚, “ 交通工具 ” 是 “ 自行車(chē) ” 和 “ 小轎車(chē) ” 的泛化魂那; “ 自行車(chē) ” 和 “ 小轎車(chē) ” 從 “ 交通工具 ” 中繼承。
1.3 多態(tài)與重載
多態(tài)(即多種形式)性是指一般類(lèi)中定義的屬性或服務(wù)被特殊類(lèi)繼承后稠项,可以具有不同的數(shù)據(jù)類(lèi)型或表現(xiàn)出不同的行為涯雅,通常是使用重載和改寫(xiě)兩項(xiàng)技術(shù)來(lái)實(shí)現(xiàn)的。一般有4種不同形式的多態(tài)展运,如下表所示活逆。
(1)重載(專(zhuān)用多態(tài))
重載也稱(chēng)為過(guò)載、重置拗胜。指的是同一個(gè)函數(shù)名稱(chēng)有多種實(shí)現(xiàn)方式蔗候,一般在編譯時(shí)基于類(lèi)型簽名來(lái)區(qū)分。
class xxx{
public void a(int x);
public void a(int x,int y);
}
(2)改寫(xiě)(包含多態(tài))
改寫(xiě)是重載的特殊情況埂软,發(fā)生在父子類(lèi)關(guān)系中锈遥。方法簽名相同,但子類(lèi)改寫(xiě)了父類(lèi)的方法實(shí)現(xiàn)勘畔。
class Parent{
public void a(int x){
System.out.print("parent implement.")
}
}
class Child extends Parent{
public void a(int x){
System.out.print("child implement.")
}
}
(3)多態(tài)變量(強(qiáng)制多態(tài))
也叫賦值多態(tài)或者強(qiáng)制多態(tài)迷殿。
聲明是一種類(lèi)型,但變量實(shí)際上卻包含另一種類(lèi)型咖杂。
Parent p = new Child();
(4)泛型(參數(shù)多態(tài))
也叫模板或者參數(shù)多態(tài)庆寺。這是一種可用于創(chuàng)建通用工具的方法,可在特定場(chǎng)合將其特化诉字。
public class XXX<T> {
private T val;
}
參數(shù)多態(tài)和包含多態(tài)稱(chēng)為通用多態(tài)懦尝,重載多態(tài)和強(qiáng)制多態(tài)稱(chēng)為特定多態(tài)知纷。
雖然重載和改寫(xiě)都是在多種潛在的函數(shù)體中,選擇和調(diào)用某一個(gè)函數(shù)或方法并對(duì)其進(jìn)行執(zhí)行陵霉,但它們的本質(zhì)區(qū)別在于:重載是編譯時(shí)執(zhí)行的(靜態(tài)綁定)琅轧,而改寫(xiě)則是運(yùn)行時(shí)選擇的(動(dòng)態(tài)綁定)。
1.4 模板類(lèi)
也稱(chēng)為類(lèi)屬類(lèi)踊挠,它用來(lái)實(shí)現(xiàn)參數(shù)多態(tài)機(jī)制乍桂。一個(gè)類(lèi)屬類(lèi)是關(guān)于一組類(lèi)的一個(gè)特性抽象,它強(qiáng)調(diào)的是這些類(lèi)的成員特征中與具體類(lèi)型無(wú)關(guān)的那些部分效床,而用變?cè)獊?lái)表示與具體類(lèi)型有關(guān)的那些部分睹酌。
1.5 消息和消息通信
消息就是向?qū)ο蟀l(fā)出的服務(wù)請(qǐng)求,它通常包括提供服務(wù)的對(duì)象標(biāo)識(shí) 剩檀、 消息名 憋沿、 輸入信息和回答信息。消息通信則是面向?qū)ο蠓椒▽W(xué)中的一個(gè)重要原則沪猴,它與對(duì)象的封裝原則密不可分辐啄,為對(duì)象間提供了唯一合法的動(dòng)態(tài)聯(lián)系的途徑。
2 面向?qū)ο蠓治?/h2>
面向?qū)ο蠓治龅哪繕?biāo)是開(kāi)發(fā)一系列模型运嗜,這些模型描述計(jì)算機(jī)軟件壶辜,當(dāng)它工作時(shí)以滿(mǎn)足一組客戶(hù)定義的需求。對(duì)象技術(shù)的流行担租,演化出了數(shù)十種不同的 OOA 方法砸民,每個(gè)方法都引入了一個(gè)產(chǎn)品或系統(tǒng)分析的過(guò)程 、 一組過(guò)程演化的模型及使軟件工程師能夠以一致的方式創(chuàng)建每個(gè)模型的符號(hào)體系翩活。其中比較流行的方法包括OMT 、 OOA 便贵、 OOSE 菠镇、 Booch方法等,而OMT 承璃、 OOSE 利耍、 Booch最后則統(tǒng)一成為 UML。
2.1 OOA/OOD 方法
這是由 Peter Coad 和 Edward Yourdon 提出的盔粹, OOA 模型中包括主題 隘梨、 對(duì)象類(lèi) 、 結(jié)構(gòu) 舷嗡、 屬性和服務(wù)5個(gè)層次轴猎,需經(jīng)過(guò)標(biāo)識(shí)對(duì)象類(lèi) 、 標(biāo)識(shí)結(jié)構(gòu)與關(guān)聯(lián)(包括繼承 进萄、 聚合 捻脖、 組合 锐峭、 實(shí)例化等) 、 劃分主題 可婶、 定義屬性 沿癞、 定義服務(wù)5個(gè)步驟來(lái)完成整個(gè)分析工作 九昧。OOD 中將繼續(xù)貫穿 OOA 中的5個(gè)層次和5個(gè)活動(dòng)匆帚,它由人機(jī)交互部件 、 問(wèn)題域部件 谓晌、 任務(wù)管理部件 具温、 數(shù)據(jù)管理部件4個(gè)部分組成蚕涤,其主要的活動(dòng)就是這4個(gè)部件的設(shè)計(jì)工作。
- 設(shè)計(jì)問(wèn)題域部分: OOA 的結(jié)果恰好是 OOD 的問(wèn)題域部件桂躏,分析的結(jié)果在 OOD 中可以被改動(dòng)或增補(bǔ)钻趋,但基于問(wèn)題域的總體組織框架是長(zhǎng)時(shí)間穩(wěn)定的;
- 設(shè)計(jì)人機(jī)交互部件:人機(jī)交互部件在上述結(jié)果中加入人機(jī)交互的設(shè)計(jì)和交互的細(xì)節(jié)剂习,包括窗口和輸出報(bào)告的設(shè)計(jì)蛮位。可以用原型來(lái)幫助實(shí)際交互機(jī)制進(jìn)行開(kāi)發(fā)和選擇鳞绕;
- 設(shè)計(jì)任務(wù)管理部分:這部分主要是識(shí)別事件驅(qū)動(dòng)任務(wù)失仁,識(shí)別時(shí)鐘驅(qū)動(dòng)任務(wù),識(shí)別優(yōu)先任務(wù)和關(guān)鍵任務(wù)们何,識(shí)別協(xié)調(diào)者萄焦,審查每個(gè)任務(wù)并定義每個(gè)任務(wù)。
- 設(shè)計(jì)數(shù)據(jù)管理部分:數(shù)據(jù)管理部分提供了在數(shù)據(jù)管理系統(tǒng)中存儲(chǔ)和檢索對(duì)象的基本結(jié)構(gòu)冤竹,其目的是隔離數(shù)據(jù)管理方法對(duì)其他部分的影響拂封。
2.2 Booch 方法
Booch 認(rèn)為軟件開(kāi)發(fā)是一個(gè)螺旋上升的過(guò)程,每個(gè)周期中包括標(biāo)識(shí)類(lèi)和對(duì)象 鹦蠕、 確定類(lèi)和對(duì)象的含義 冒签、 標(biāo)識(shí)關(guān)系 、 說(shuō)明每個(gè)類(lèi)的接口和實(shí)現(xiàn)4個(gè)步驟钟病。它的模型中主要包括如下表所示的幾種圖形萧恕。
靜態(tài)模型 | 動(dòng)態(tài)模型 | |
---|---|---|
邏輯模型 | 類(lèi)圖、對(duì)象圖 | 狀態(tài)轉(zhuǎn)換圖肠阱、時(shí)序圖 |
物理模型 | 模塊圖票唆、進(jìn)程圖 |
Booch 方法的開(kāi)發(fā)過(guò)程是一個(gè)迭代的 、 漸進(jìn)式的系統(tǒng)開(kāi)發(fā)過(guò)程屹徘,它可以分為宏過(guò)程和微過(guò)程兩類(lèi)走趋。
宏過(guò)程用于控制微過(guò)程,是復(fù)蓋幾個(gè)月或幾周所進(jìn)行的活動(dòng)噪伊,它包括負(fù)責(zé)建立核心需求的概念化吆视,為所期望的行為建立模型的分析典挑,建立架構(gòu)的設(shè)計(jì),形成實(shí)現(xiàn)的進(jìn)化啦吧,以及管理軟件交付使用的維護(hù)等5個(gè)主要活動(dòng)您觉。
而微過(guò)程則基本上代表了開(kāi)發(fā)人員的日常活動(dòng)授滓,它由4個(gè)重要 琳水、 沒(méi)有順序關(guān)系的步驟組成:在給定的抽象層次上識(shí)別出類(lèi)和對(duì)象,識(shí)別出這些類(lèi)和對(duì)象的語(yǔ)義般堆,識(shí)別出類(lèi)間和對(duì)象間的關(guān)系在孝,實(shí)現(xiàn)類(lèi)和對(duì)象。
2.3 OMT 方法
OMT 是對(duì)象建模技術(shù)的縮寫(xiě)淮摔,它是由 Jam Rambaugh 及其同事合作開(kāi)發(fā)的私沮,它主要用于分析 、 系統(tǒng)設(shè)計(jì)和對(duì)象設(shè)計(jì)和橙。包括對(duì)象模型(靜態(tài)的 仔燕、 結(jié)構(gòu)化的系統(tǒng)的 “ 數(shù)據(jù) ” 性質(zhì),通常采用類(lèi)圖) 魔招、 動(dòng)態(tài)模型(瞬時(shí)的 晰搀、 行為化的系統(tǒng) “ 控制 ” 性質(zhì),通常使用狀態(tài)圖)和功能模型(表示變化的系統(tǒng)的 “ 功能 ” 性質(zhì)办斑,通常使用數(shù)據(jù)流圖)外恕。 OMT 方法的三大模型如下表所示。
模型 | 說(shuō)明 | 特征 | 圖形 |
---|---|---|---|
對(duì)象模型 | 描述系統(tǒng)中對(duì)象的靜態(tài)結(jié)構(gòu)乡翅、對(duì)象間的關(guān)系鳞疲、屬性及操作。 | 靜態(tài)蠕蚜、結(jié)構(gòu)式尚洽、系統(tǒng)“”數(shù)據(jù)“” | 對(duì)象圖 |
動(dòng)態(tài)模型 | 描述系統(tǒng)中與時(shí)間和操作順序有關(guān)的系統(tǒng)特征。比如觸發(fā)事件波势、事件序列以及確定事件先后關(guān)系的狀態(tài)等等翎朱。 | 瞬時(shí)橄维、行為式尺铣、系統(tǒng)“”控制“ | 狀態(tài)圖 |
功能模型 | 描述與值變換有關(guān)的系統(tǒng)特征。 | 功能争舞、映射凛忿、約束以及函數(shù)依賴(lài) | 數(shù)據(jù)流圖 |
2.4 OOSE 方法
OOSE (Object-oriented software engineering)是面向?qū)ο筌浖こ痰目s寫(xiě),它是由 Iva rJacobson 提出的竞川。它在 OMT 的基礎(chǔ)上店溢,對(duì)功能模型進(jìn)行了補(bǔ)充叁熔,提出了 “ 用例 ” 的概念,最終取代數(shù)據(jù)流圖進(jìn)行需求分析和建立功能模型床牧。
3 統(tǒng)一建模語(yǔ)言
統(tǒng)一建模語(yǔ)言( Unified Modeling Language 荣回, UML )是用于系統(tǒng)的可視化建模語(yǔ)言,它將 OMT 戈咳、 OOSE 和 Booch 方法中的建模語(yǔ)言和方法有機(jī)地融合在一起心软,是國(guó)際統(tǒng)一的軟件建模標(biāo)準(zhǔn)。雖然它源于 OO 軟件系統(tǒng)建模領(lǐng)域著蛙,但由于其內(nèi)建了大量擴(kuò)展機(jī)制删铃,也可以應(yīng)用于更多的領(lǐng)域中,例如工作流程 踏堡、 業(yè)務(wù)領(lǐng)域等猎唁。
3.1 UML 是什么
- UML 是一種語(yǔ)言: UML 在軟件領(lǐng)域中的地位與價(jià)值就像 “1 、 2 顷蟆、 3 ” 等符號(hào)在數(shù)學(xué)領(lǐng)域中的地位一樣诫隅。它為軟件開(kāi)發(fā)人員之間提供了一種用于交流的詞匯表和一種用于軟件藍(lán)圖的標(biāo)準(zhǔn)語(yǔ)言。
- UML 是一種可視化語(yǔ)言: UML 只是一組圖形符號(hào)慕的,它的每個(gè)符號(hào)都有明確語(yǔ)義阎肝,是一種直觀 、 可視化的語(yǔ)言肮街。
- UML 是一種可用于詳細(xì)描述的語(yǔ)言: UML 所建的模型是精確的 风题、 無(wú)歧義和完整的,因此適合于對(duì)所有重要的分析 嫉父、 設(shè)計(jì)和實(shí)現(xiàn)決策進(jìn)行詳細(xì)描述沛硅。
- UML 是一種構(gòu)造語(yǔ)言: UML 雖然不是一種可視化的編程語(yǔ)言,但其與各種編程語(yǔ)言直接相連绕辖,而且有較好的映射關(guān)系摇肌,這種映射允許進(jìn)行正向工程 、 逆向工程仪际。
- UML 是一種文檔化語(yǔ)言:它適合于建立系統(tǒng)架構(gòu)及其所有的細(xì)節(jié)文檔围小。
3.2 UML 的結(jié)構(gòu)
UML 由構(gòu)造塊、公共機(jī)制和架構(gòu)三個(gè)部分組成树碱。
(1)構(gòu)造塊
構(gòu)造塊也就是基本的 UML 建模元素(事物)肯适、關(guān)系和圖。
- 建模元素:包括結(jié)構(gòu)事物(類(lèi) 成榜、 接口 框舔、 協(xié)作 、 用例 、 活動(dòng)類(lèi) 刘绣、 組件 樱溉、 節(jié)點(diǎn)等) 、 行為事物(交互 纬凤、 狀態(tài)機(jī)) 福贞、 分組事物(包) 、 注釋事物停士。
- 關(guān)系:包括關(guān)聯(lián)關(guān)系 肚医、 依賴(lài)關(guān)系 、 泛化關(guān)系 向瓷、 實(shí)現(xiàn)關(guān)系肠套。
- 圖: UML2.0 包括 14 種不同的圖,分為表示系統(tǒng)靜態(tài)結(jié)構(gòu)的靜態(tài)模型(包括類(lèi)圖 猖任、 對(duì)象圖 你稚、 包圖 、 構(gòu)件圖 朱躺、 部署圖 刁赖、 制品圖),以及表示系統(tǒng)動(dòng)態(tài)結(jié)構(gòu)的動(dòng)態(tài)模型(包括對(duì)象圖 长搀、 用例圖 宇弛、 順序圖 、 通信圖 源请、 定時(shí)圖 枪芒、 狀態(tài)圖 、 活動(dòng)圖 谁尸、 交互概覽圖)舅踪。
(2)公共機(jī)制
公共機(jī)制是指達(dá)到特定目標(biāo)的公共 UML 方法,主要包括規(guī)格說(shuō)明 良蛮、 修飾 抽碌、 公共分類(lèi)和擴(kuò)展機(jī)制4種。
- 規(guī)格說(shuō)明:規(guī)格說(shuō)明是元素語(yǔ)義的文本描述决瞳,它是模型的重要組成部分货徙。修飾: UML 為每一個(gè)模型元素設(shè)置了一個(gè)簡(jiǎn)單的記號(hào),還可以通過(guò)修飾來(lái)表達(dá)更多的信息皮胡。
- 公共分類(lèi):包括類(lèi)元與實(shí)體(類(lèi)元表示概念痴颊,而實(shí)體表示具體的實(shí)體) 、 接口和實(shí)現(xiàn)(接口用來(lái)定義契約胸囱,而實(shí)現(xiàn)就是具體的內(nèi)容)兩組公共分類(lèi)祷舀。
- 擴(kuò)展機(jī)制:包括約束(添加新規(guī)則來(lái)擴(kuò)展元素的語(yǔ)義) 瀑梗、 構(gòu)造型(用于定義新的 UML 建模元素) 烹笔、 標(biāo)記值(添加新的特殊信息來(lái)擴(kuò)展模型元素的規(guī)格說(shuō)明)裳扯。
(3)架構(gòu)
UML 對(duì)系統(tǒng)架構(gòu)的定義是:系統(tǒng)的組織結(jié)構(gòu),包括系統(tǒng)分解的組成部分 谤职、 它們的關(guān)聯(lián)性 饰豺、 交互 、 機(jī)制和指導(dǎo)原則允蜈,這些提供系統(tǒng)設(shè)計(jì)的信息冤吨。而具體來(lái)說(shuō),就是指5個(gè)系統(tǒng)視圖饶套。
- 邏輯視圖:以問(wèn)題域的語(yǔ)匯組成的類(lèi)和對(duì)象集合漩蟆。
- 進(jìn)程視圖:可執(zhí)行線(xiàn)程和進(jìn)程作為活動(dòng)類(lèi)的建模,它是邏輯視圖的一次執(zhí)行實(shí)例妓蛮。
- 實(shí)現(xiàn)視圖:對(duì)組成基于系統(tǒng)的物理代碼的文件和組件進(jìn)行建模怠李。
- 部署視圖:把組件物理地部署到一組物理的、可計(jì)算的節(jié)點(diǎn)上蛤克。
- 用例視圖:最基本的需求分析模型捺癞。
3.3 用例圖基礎(chǔ)
用例是什么呢? Ivar Jacobson 是這樣描述的: “ 用例實(shí)例是在系統(tǒng)中執(zhí)行的一系列動(dòng)作构挤,這些動(dòng)作將生成特定參與者可見(jiàn)的價(jià)值結(jié)果髓介。一個(gè)用例定義一組用例實(shí)例 。 ”
首先筋现,從定義中得知用例是由一組用例實(shí)例組成的唐础,用例實(shí)例也就是常說(shuō)的 “ 使用場(chǎng)景 ” ,就是用戶(hù)使用系統(tǒng)的一個(gè)實(shí)際的 矾飞、 特定的場(chǎng)景彻犁。其次,可以知道凰慈,用例應(yīng)該給參與者帶來(lái)可見(jiàn)的價(jià)值汞幢,這點(diǎn)很關(guān)鍵。最后微谓,用例是在系統(tǒng)中的森篷。而用例模型描述的是外部參與者所理解的系統(tǒng)功能。用例模型用于需求分析階段豺型,它的建立是系統(tǒng)開(kāi)發(fā)者和用戶(hù)反復(fù)討論的結(jié)果仲智,表明了開(kāi)發(fā)者和用戶(hù)對(duì)需求規(guī)格達(dá)成的共識(shí)。圖 2 就是一個(gè)用例圖的例子姻氨。
extend 拓展關(guān)系:用于拓展用例對(duì)基礎(chǔ)用例的增強(qiáng)钓辆。拓展用例是在特定條件出現(xiàn)時(shí),才會(huì)被執(zhí)行的用例。使用帶有“拓展”的箭頭來(lái)表示拓展用例前联,方向由拓展用例指向基礎(chǔ)用例功戚。
(1)參與者
參與者代表與系統(tǒng)接口的任何事物或人,它是指代表某一種特定功能的角色似嗤,因此啸臀,參與者都是虛擬的概念。在 UML 中烁落,用一個(gè)小人表示參與者乘粒。
圖 2 中的 “ 圖書(shū)管理員 ” 就是參與者。對(duì)于該系統(tǒng)來(lái)說(shuō)伤塌,可能可以充當(dāng)圖書(shū)管理員角色的有多個(gè)人灯萍,由于他們對(duì)系統(tǒng)均起著相同的作用,扮演相同的角色每聪,因此只用一個(gè)參與者來(lái)表示竟稳。切忌不要為每一個(gè)可能與系統(tǒng)交互的真人畫(huà)出一個(gè)參與者。
(2)用例
用例是對(duì)系統(tǒng)行為的動(dòng)態(tài)描述熊痴,它可以促進(jìn)設(shè)計(jì)人員 他爸、 開(kāi)發(fā)人員與用戶(hù)的溝通,理解正確的需求果善,還可以劃分系統(tǒng)與外部實(shí)體的界限诊笤,是系統(tǒng)設(shè)計(jì)的起點(diǎn)。在識(shí)別出參與者之后巾陕,可以使用下列問(wèn)題幫助識(shí)別用例讨跟。
- 每個(gè)參與者的任務(wù)是什么?
- 有參與者將要?jiǎng)?chuàng)建鄙煤、存儲(chǔ)晾匠、修改、刪除或讀取系統(tǒng)中的信息嗎梯刚?
- 什么用例會(huì)創(chuàng)建凉馆、存儲(chǔ)、修改亡资、刪除或讀取這個(gè)信息澜共?
- 參與者需要通知系統(tǒng)外部的突然變化嗎?
- 需要通知參與者系統(tǒng)中正在發(fā)生的事情嗎锥腻?
- 什么用例將支持和維護(hù)系統(tǒng)嗦董?
- 所有的功能需求都對(duì)應(yīng)到用例中了嗎?
- 系統(tǒng)需要何種輸入/輸出瘦黑?輸入從何處來(lái)京革?輸出到何處奇唤?
- 當(dāng)前運(yùn)行系統(tǒng)的主要問(wèn)題是什么?
(3)包含和擴(kuò)展
兩個(gè)用例之間的關(guān)系可以主要概括為兩種情況匹摇。一種是用于重用的包含關(guān)系咬扇,用構(gòu)造型 <<include>> 或者 <<use>> 表示;另一種是用于分離出不同的行為来惧,用構(gòu)造型 <<extend>> 表示。
包含關(guān)系:當(dāng)可以從兩個(gè)或兩個(gè)以上的原始用例中提取公共行為演顾,或者發(fā)現(xiàn)能夠使用一個(gè)組件來(lái)實(shí)現(xiàn)某一個(gè)用例的部分功能是很重要的事時(shí)供搀,應(yīng)該使用包含關(guān)系來(lái)表示。所提取出來(lái)的公共行為稱(chēng)為抽象用例钠至。包含關(guān)系的例子如圖 3 所示葛虐。
擴(kuò)展關(guān)系:如果一個(gè)用例明顯地混合了兩種或兩種以上的不同場(chǎng)景,即根據(jù)情況可能發(fā)生多種事情棉钧∮炱辏可以將這個(gè)用例分為一個(gè)主用例和一個(gè)或多個(gè)輔用例,描述可能更加清晰宪卿。擴(kuò)展關(guān)系的例子如圖 4 所示的诵。
此處介紹的包含和擴(kuò)展關(guān)系屬于用例之間所特有的關(guān)系,因?yàn)橛美彩?UML 的一種結(jié)構(gòu)事物佑钾,因此西疤,事物之間的 4 種基本關(guān)系對(duì)用例也是適用的。
3.4 類(lèi)圖和對(duì)象圖基礎(chǔ)
在面向?qū)ο蠼<夹g(shù)中休溶,將客觀世界的實(shí)體映射為對(duì)象代赁,并歸納成一個(gè)個(gè)類(lèi)。類(lèi) 兽掰、 對(duì)象和它們之間的關(guān)聯(lián)是面向?qū)ο蠹夹g(shù)中最基本的元素芭碍。對(duì)于一個(gè)想要描述的系統(tǒng),其類(lèi)模型和對(duì)象模型揭示了系統(tǒng)的結(jié)構(gòu)孽尽。在 UML 中窖壕,類(lèi)和對(duì)象模型分別由類(lèi)圖和對(duì)象圖表示。類(lèi)圖技術(shù)是 OO 方法的核心杉女。圖 5 是一個(gè)類(lèi)圖的示例艇拍。
圖中的空心菱形箭頭表示聚合關(guān)系(aggregation),聚合關(guān)系是關(guān)聯(lián)關(guān)系的一種宠纯,是強(qiáng)的關(guān)聯(lián)關(guān)系卸夕。聚合關(guān)系是整體和個(gè)體的關(guān)系。關(guān)聯(lián)關(guān)系的兩個(gè)類(lèi)處于同一層次上婆瓜,而聚合關(guān)系兩個(gè)類(lèi)處于不同的層次快集,一個(gè)是整體贡羔,一個(gè)是部分。箭頭指向整體个初。
圖中的空心三角箭頭表示為類(lèi)與類(lèi)之間的繼承關(guān)系乖寒,接口與接口之間的繼承,類(lèi)對(duì)接口的實(shí)現(xiàn)關(guān)系院溺,也叫泛化關(guān)系楣嘁。箭頭指向父類(lèi)。如果父類(lèi)是類(lèi)珍逸,用實(shí)線(xiàn)逐虚;如果父類(lèi)是接口,用虛線(xiàn)谆膳。
3.3.1 類(lèi)和對(duì)象
對(duì)象與人們對(duì)客觀世界的理解相關(guān)叭爱。人們通常用對(duì)象描述客觀世界中某個(gè)具體的實(shí)體。所謂類(lèi)是對(duì)一類(lèi)具有相同特征的對(duì)象的描述漱病。而對(duì)象是類(lèi)的實(shí)例买雾。在 UML 中,類(lèi)的可視化表示為一個(gè)劃分成三個(gè)格子的長(zhǎng)方形(下面兩個(gè)格子可省略)杨帽。圖 5 中漓穿, “ 書(shū)籍 ” 、 “ 借閱記錄 ” 等都是一個(gè)類(lèi)注盈。
類(lèi)的獲取和命名:最頂部的格子包含類(lèi)的名字器净。類(lèi)的命名應(yīng)盡量用應(yīng)用領(lǐng)域中的術(shù)語(yǔ),應(yīng)明確 当凡、 無(wú)歧義山害,以利于開(kāi)發(fā)人員與用戶(hù)之間的相互理解和交流。
類(lèi)的屬性:中間的格子包含類(lèi)的屬性沿量,用以描述該類(lèi)對(duì)象的共同特點(diǎn)浪慌。該項(xiàng)可省略。圖 5 中 “ 書(shū)籍 ” 類(lèi)有 “ 書(shū)名 ” 朴则、 “ 書(shū)號(hào) ” 等屬性权纤。 UML 規(guī)定類(lèi)的屬性的語(yǔ)法為: “ 可見(jiàn)性屬性名:類(lèi)型 = 默認(rèn)值 { 約束特性} ” ∥诙剩可見(jiàn)性包括Public 汹想、 Private和 Protected ,分別用+ 撤蚊、 - 古掏、 #號(hào)表示。
類(lèi)型表示該屬性的種類(lèi):它可以是基本數(shù)據(jù)類(lèi)型侦啸,例如整數(shù) 槽唾、 實(shí)數(shù) 丧枪、 布爾型等,也可以是用戶(hù)自定義的類(lèi)型庞萍。一般它由所涉及的程序設(shè)計(jì)語(yǔ)言確定拧烦。
約束特性則是用戶(hù)對(duì)該屬性性質(zhì)的一個(gè)約束說(shuō)明。例如 “ { 只讀 }” 說(shuō)明該屬性是只讀屬性钝计。
類(lèi)的操作( Operation ):該項(xiàng)可省略恋博。操作用于修改 、 檢索類(lèi)的屬性或執(zhí)行某些動(dòng)作私恬。操作通常也被稱(chēng)為功能债沮,但是它們被約束在類(lèi)的內(nèi)部,只能作用到該類(lèi)的對(duì)象上践付。操作名 秦士、 返回類(lèi)型和參數(shù)表組成操作界面 缺厉。
UML 規(guī)定操作的語(yǔ)法為: “ 可見(jiàn)性:操作名(參數(shù)表):返回類(lèi)型 { 約束特性 }” 永高。類(lèi)圖描述了類(lèi)和類(lèi)之間的靜態(tài)關(guān)系。定義了類(lèi)之后提针,就可以定義類(lèi)之間的各種關(guān)系了命爬。
3.3.2 類(lèi)之間的關(guān)系
在建立抽象模型時(shí),會(huì)發(fā)現(xiàn)很少有類(lèi)會(huì)單獨(dú)存在辐脖,大多數(shù)都將會(huì)以某種方式互相協(xié)作饲宛,因此還需要描述這些類(lèi)之間的關(guān)系。關(guān)系是事物間的連接嗜价,在面向?qū)ο蠼V型Э伲?個(gè)很重要的關(guān)系。
(1)依賴(lài)關(guān)系(Dependency)
有兩個(gè)元素 X 久锥、 Y 家淤,如果修改元素 X 的定義可能會(huì)引起對(duì)另一個(gè)元素 Y 的定義的修改,則稱(chēng)元素 Y 依賴(lài)于元素 X 瑟由。在 UML 中絮重,使用帶箭頭的虛線(xiàn)表示依賴(lài)關(guān)系。帶箭頭的虛線(xiàn)歹苦,指向依賴(lài)者青伤。
在類(lèi)中,依賴(lài)由多種原因引起殴瘦,如:一個(gè)類(lèi)向另一個(gè)類(lèi)發(fā)消息狠角;一個(gè)類(lèi)是另一個(gè)類(lèi)的數(shù)據(jù)成員;一個(gè)類(lèi)是另一個(gè)類(lèi)的某個(gè)操作參數(shù)蚪腋。如果一個(gè)類(lèi)的界面改變擎厢,它發(fā)出的任何消息可能不再合法究流。
(2)泛化關(guān)系
泛化關(guān)系描述了一般事物與該事物中的特殊種類(lèi)之間的關(guān)系,也就是父類(lèi)與子類(lèi)之間的關(guān)系动遭。繼承關(guān)系是泛化關(guān)系的反關(guān)系芬探,也就是說(shuō)子類(lèi)是從父類(lèi)中繼承的,而父類(lèi)則是子類(lèi)的泛化厘惦。在 UML 中偷仿,使用帶空心箭頭的實(shí)線(xiàn)表示,箭頭指向父類(lèi)宵蕉。
在 UML 中酝静,對(duì)泛化關(guān)系有 3 個(gè)要求:
- 子類(lèi)應(yīng)與父類(lèi)完全一致,父類(lèi)所具有的關(guān)聯(lián)羡玛、屬性和操作别智,子類(lèi)都應(yīng)具有。
- 子類(lèi)中除了與父類(lèi)一致的信息外稼稿,還包括額外的信息薄榛。
- 可以使用父類(lèi)實(shí)例的地方,也可以使用子類(lèi)實(shí)例让歼。
(3)關(guān)聯(lián)關(guān)系
關(guān)聯(lián)表示兩個(gè)類(lèi)之間存在某種語(yǔ)義上的聯(lián)系敞恋。例如,一個(gè)人為一家公司工作谋右,一家公司有許多辦公室硬猫。就認(rèn)為人和公司 、 公司和辦公室之間存在某種語(yǔ)義上的聯(lián)系改执。
關(guān)聯(lián)關(guān)系提供了通信的路徑啸蜜,它是所有關(guān)系中最通用的 、 語(yǔ)義最弱的辈挂。在 UML 中衬横,用一條實(shí)線(xiàn)來(lái)表示關(guān)聯(lián)關(guān)系。
(4)聚合關(guān)系
聚合是一種特殊形式的關(guān)聯(lián)呢岗。聚合表示類(lèi)之間的關(guān)系是整體與部分的關(guān)系冕香。例如一輛轎車(chē)包含四個(gè)車(chē)輪 、 一個(gè)方向盤(pán) 后豫、 一個(gè)發(fā)動(dòng)機(jī)和一個(gè)底盤(pán)悉尾,就是聚合的一個(gè)例子。
在 UML 中挫酿,用一個(gè)帶空心菱形的實(shí)線(xiàn)表示构眯,空心菱形指向的是代表 “ 整體 ” 的類(lèi)。
如果聚合關(guān)系中的表示“部分”的類(lèi)的存在早龟,與表示“整體”的類(lèi)有著緊密的關(guān)系惫霸,例如“公司”與“部門(mén)”之間的關(guān)系猫缭,那么就應(yīng)該使用“組合”關(guān)系來(lái)表示。
在 UML 中壹店, 用帶有實(shí)心菱形的實(shí)線(xiàn)表示猜丹,菱形指向的是代表“整體”的類(lèi)。
聚合關(guān)系是指部分與整體的生命周期可以不相同硅卢,而組合關(guān)系則是 指部分與整體的生命周期是相同的射窒。
(5)實(shí)現(xiàn)關(guān)系
實(shí)現(xiàn)關(guān)系是用來(lái)規(guī)定接口和實(shí)現(xiàn)接口的類(lèi)或組件之間的關(guān)系的。接口是操作的集合将塑,這些操作用于規(guī)定類(lèi)或組件的服務(wù)脉顿。
在 UML 中,用一個(gè)帶空心箭頭的虛線(xiàn)表示点寥。
3.3.3 多重性問(wèn)題
重復(fù)度又稱(chēng)多重性艾疟,多重性表示為一個(gè)整數(shù)范圍 n … m ,整數(shù) n 定義所連接的最少對(duì)象的數(shù)目敢辩,而 m 則為最多對(duì)象數(shù)(當(dāng)不知道確切的最大數(shù)時(shí)蔽莱,最大數(shù)用 * 號(hào)表示)。最常見(jiàn)的多重性有: 0…1 责鳍;0… * 碾褂; 1…1 兽间;1… * 历葛; * 。
多重性是用來(lái)說(shuō)明關(guān)聯(lián)的兩個(gè)類(lèi)之間的數(shù)量關(guān)系的嘀略,例如:
- 書(shū)與借書(shū)記錄之間的關(guān)系恤溶,就應(yīng)該是1對(duì) 0 …1 的關(guān)系,也就是一本書(shū)可以有 0 個(gè)或1個(gè)借書(shū)記錄帜羊。
- 經(jīng)理與員工之間的關(guān)系咒程,則應(yīng)為1對(duì) 0 …*的關(guān)系,也就是一個(gè)經(jīng)理可以領(lǐng)導(dǎo) 0 個(gè)或多個(gè)員工讼育。
- 學(xué)生與選修課程之間的關(guān)系帐姻,就可以表示為 0 …對(duì) 1… 的關(guān)系,也就是一個(gè)學(xué)生可以選擇1門(mén)或多門(mén)課程奶段,而一門(mén)課程可以有 0 個(gè)或多個(gè)學(xué)生選修饥瓷。
3.3.4 類(lèi)圖
類(lèi)圖描述類(lèi)和類(lèi)之間的靜態(tài)關(guān)系。與數(shù)據(jù)模型不同痹籍,它不僅顯示了信息的結(jié)構(gòu)呢铆,同時(shí)還描述了系統(tǒng)的行為。類(lèi)圖是定義其他圖的基礎(chǔ)蹲缠。
3.3.5 對(duì)象圖
UML 中對(duì)象圖與類(lèi)圖具有相同的表示形式棺克。對(duì)象圖可以看作是類(lèi)圖的一個(gè)實(shí)例悠垛。對(duì)象是類(lèi)的實(shí)例;對(duì)象之間的鏈( Link )是類(lèi)之間的關(guān)聯(lián)的實(shí)例娜谊。對(duì)象與類(lèi)的圖形表示相似确买,均為劃分成兩個(gè)格子的長(zhǎng)方形(下面的格子可省略)。上面的格子是對(duì)象名纱皆,對(duì)象名下有下畫(huà)線(xiàn)拇惋;下面的格子記錄屬性值。鏈的圖形表示與關(guān)聯(lián)相似抹剩。對(duì)象圖常用于表示復(fù)雜類(lèi)圖的一個(gè)實(shí)例撑帖。
3.5 交互圖基礎(chǔ)
交互圖是表示各組對(duì)象如何依某種行為進(jìn)行協(xié)作的模型。通嘲木欤可以使用一個(gè)交互圖來(lái)表示和說(shuō)明一個(gè)用例的行為胡嘿。在 UML 中,包括3種不同形式的交互圖钳踊,強(qiáng)調(diào)對(duì)象交互行為順序的順序圖衷敌,強(qiáng)調(diào)對(duì)象協(xié)作的通信圖( UML 1.X版本中稱(chēng)為 “ 協(xié)作圖 ” ),強(qiáng)調(diào)消息的具體時(shí)間的定時(shí)圖拓瞪,它們之間沒(méi)有什么本質(zhì)不同缴罗,只是排版不盡相同而已。
3.5.1 順序圖
順序圖用來(lái)描述對(duì)象之間動(dòng)態(tài)的交互關(guān)系祭埂,著重體現(xiàn)對(duì)象間消息傳遞的時(shí)間順序面氓。順序圖允許直觀地表示出對(duì)象的生存期,在生存期內(nèi)蛆橡,對(duì)象可以對(duì)輸入消息做出響應(yīng)舌界,并且可以發(fā)送信息。
圖 10 是一個(gè)順序圖的示例泰演。如圖 10 所示呻拌,順序圖存在兩個(gè)軸,水平軸表示不同的對(duì)象,即圖中的 Client 、 Factory 赠涮、 Product 等笑撞;而垂直軸表示時(shí)間,表示對(duì)象及類(lèi)的生命周期。對(duì)象間的通信通過(guò)在對(duì)象的生命線(xiàn)間畫(huà)消息來(lái)表示。消息的箭頭指明消息的類(lèi)型。
順序圖中的消息可以是信號(hào) 抬闷、 操作調(diào)用或類(lèi)似于 C++ 中的 RPC ( Remote Procedure Calls )和 Java 中的 RMI ( Remote Method Invocation )。當(dāng)收到消息時(shí),接收對(duì)象立即開(kāi)始執(zhí)行活動(dòng)笤成,即對(duì)象被激活了评架。通過(guò)在對(duì)象生命線(xiàn)上顯示一個(gè)細(xì)長(zhǎng)矩形框來(lái)表示激活。
消息可以用消息名及參數(shù)來(lái)標(biāo)識(shí)炕泳,消息也可帶有順序號(hào)纵诞。消息還可帶有條件表達(dá)式,表示分支或決定是否發(fā)送消息培遵。如果用于表示分支浙芙,則每個(gè)分支是相互排斥的,即在某一時(shí)刻僅可發(fā)送分支中的一個(gè)消息籽腕。
3.5.2 通信圖
通信圖用于描述相互合作的對(duì)象間的交互關(guān)系和鏈接關(guān)系嗡呼。雖然順序圖和通信圖都用來(lái)描述對(duì)象間的交互關(guān)系,但側(cè)重點(diǎn)不一樣皇耗。順序圖著重體現(xiàn)交互的時(shí)間順序南窗,通信圖則著重體現(xiàn)交互對(duì)象間的靜態(tài)鏈接關(guān)系。
圖 11 就是與圖 10 相對(duì)應(yīng)的通信圖郎楼,可以從圖 11 中很明顯地發(fā)現(xiàn)它與順序圖之間的異同點(diǎn)万伤。
3.5.3 定時(shí)圖
如果要表示的交互具有很強(qiáng)的時(shí)間特性(例如,現(xiàn)實(shí)生活中的電子工程 呜袁、 實(shí)時(shí)控制等系統(tǒng)中)敌买,在 UML 1.X 中是無(wú)法有效地表示出來(lái)的。而在 UML 2.0 中引入了一種新的交互圖來(lái)解決這類(lèi)問(wèn)題阶界,這就是著重表示定時(shí)約束的定時(shí)圖虹钮。
根據(jù) UML 的定義,定時(shí)圖實(shí)際上是一種特殊形式的順序圖(即一種變化)荐操,它與順序圖的區(qū)別主要體現(xiàn)在以下幾個(gè)方面芜抒。
- 坐標(biāo)軸交換了位置珍策,改為從左到右來(lái)表示時(shí)間的推移托启。
- 用生命線(xiàn)的“凹下凸起”來(lái)表示狀態(tài)的變化,每個(gè)水平位置代表一種不同的狀態(tài)攘宙,狀態(tài)的順序可以有意義屯耸、也可以沒(méi)有意義。
- 生命線(xiàn)可以跟在一根線(xiàn)后面蹭劈,在這根線(xiàn)上顯示一些不同的狀態(tài)值疗绣。
- 可以顯示一個(gè)度量時(shí)間值的標(biāo)尺,用刻度來(lái)表示時(shí)間間隔铺韧。
圖 12 是一個(gè)定時(shí)圖的實(shí)際例子多矮,其中小黑點(diǎn)加曲線(xiàn)表示的是注釋。它用來(lái)表示一個(gè)電子門(mén)禁系統(tǒng)的控制邏輯,該門(mén)禁系統(tǒng)包括門(mén)(物理的門(mén)) 塔逃、 智能讀卡器(讀取用戶(hù)的智能卡信息) 讯壶、 處理器(用來(lái)處理是否開(kāi)門(mén)的判斷)。
在這個(gè)例子中湾盗,它所表示的意思是一開(kāi)始讀卡器是啟用的(等用戶(hù)來(lái)刷卡) 伏蚊、 處理器是空閑的(沒(méi)有驗(yàn)證的請(qǐng)求) 、 門(mén)是關(guān)的格粪;接著躏吊,當(dāng)用戶(hù)刷卡時(shí),讀卡器就進(jìn)入了 “ 等待校驗(yàn) ” 的狀態(tài)帐萎,并發(fā)一個(gè)消息給處理器比伏,處理器就進(jìn)入了校驗(yàn)狀態(tài)。如果校驗(yàn)通過(guò)疆导,就發(fā)送一個(gè) “ 禁用 ” 消息給讀卡器(因?yàn)殚T(mén)開(kāi)的時(shí)候凳怨,讀卡器就可以不工作),使讀卡器進(jìn)入禁用狀態(tài)是鬼;并且自己轉(zhuǎn)入啟用狀態(tài)肤舞,這時(shí)門(mén)的狀態(tài)變成了 “ 開(kāi) ” 。而門(mén) “ 開(kāi) ” 了 40 秒鐘(根據(jù)時(shí)間刻度得知)之后均蜜,處理器將會(huì)把它再次 “ 關(guān) ” 上李剖,并且發(fā)送一個(gè) “ 啟用 ” 消息給讀卡器(門(mén)關(guān)了,讀卡器開(kāi)始重新工作)囤耳,這時(shí)讀卡器再次進(jìn)入啟用狀態(tài)篙顺,而處理器已經(jīng)又回到了空閑狀態(tài)。
從上面的例子中充择,不難看出定時(shí)圖所包含的圖元并不多德玫,主要包括生命線(xiàn) 、 狀態(tài) 椎麦、 狀態(tài)變遷 宰僧、 消息 、 時(shí)間刻度观挎,可以根據(jù)自身的需要來(lái)使用它琴儿。
3.6 狀態(tài)圖基礎(chǔ)狀態(tài)圖
用來(lái)描述一個(gè)特定對(duì)象的所有可能狀態(tài)及其引起狀態(tài)轉(zhuǎn)移的事件。大多數(shù)面向?qū)ο蠹夹g(shù)都用狀態(tài)圖表示單個(gè)對(duì)象在其生命周期中的行為嘁捷。一個(gè)狀態(tài)圖包括一系列的狀態(tài)及狀態(tài)之間的轉(zhuǎn)移造成。圖 13 是一個(gè)數(shù)碼沖印店的訂單狀態(tài)圖實(shí)例。
狀態(tài)圖包括以下部分雄嚣。
- 狀態(tài):又稱(chēng)為中間狀態(tài)晒屎,用圓角矩形框表示;
- 初始狀態(tài):又稱(chēng)為初態(tài),用一個(gè)黑色的實(shí)心圓圈表示鼓鲁,在一張狀態(tài)圖中只能夠有一個(gè)初始狀態(tài)履肃;
- 結(jié)束狀態(tài):又稱(chēng)為終態(tài),在黑色的實(shí)心圓圈外面套上一個(gè)空心圓坐桩,在一張狀態(tài)圖中可能有多 個(gè)結(jié)束狀態(tài)尺棋;
- 狀態(tài)轉(zhuǎn)移:用箭頭說(shuō)明狀態(tài)的轉(zhuǎn)移情況,并用文字說(shuō)明引發(fā)這個(gè)狀態(tài)變化的相應(yīng)事件是什么绵跷。
一個(gè)狀態(tài)也可能被細(xì)分為多個(gè)子狀態(tài)膘螟,那么如果將這些子狀態(tài)都描繪出來(lái)的話(huà),那這個(gè)狀態(tài)就是復(fù)合狀態(tài)碾局。狀態(tài)圖適合用于表述在不同用例之間的對(duì)象行為荆残,但并不適合用于表述包括若干用例協(xié)作的對(duì)象行為。
通常不會(huì)需要對(duì)系統(tǒng)中的每一個(gè)類(lèi)繪制相應(yīng)的狀態(tài)圖净当,而通常會(huì)在業(yè)務(wù)流程 内斯、 控制對(duì)象 、 用戶(hù)界面的設(shè)計(jì)方面使用狀態(tài)圖像啼。
3.7 活動(dòng)圖基礎(chǔ)
活動(dòng)圖的應(yīng)用非常廣泛俘闯,它既可用來(lái)描述操作(類(lèi)的方法)的行為,也可以描述用例和對(duì)象內(nèi)部的工作過(guò)程忽冻≌胬剩活動(dòng)圖是由狀態(tài)圖變化而來(lái)的,它們各自用于不同的目的僧诚≌谏簦活動(dòng)圖依據(jù)對(duì)象狀態(tài)的變化來(lái)捕獲動(dòng)作(將要執(zhí)行的工作或活動(dòng))與動(dòng)作的結(jié)果『浚活動(dòng)圖中一個(gè)活動(dòng)結(jié)束后將立即進(jìn)入下一個(gè)活動(dòng)(在狀態(tài)圖中狀態(tài)的變遷可能需要事件的觸發(fā))旗扑。
(1)基本活動(dòng)圖
如圖 14 所示,活動(dòng)圖與狀態(tài)圖類(lèi)似慈省,包括了初始狀態(tài) 臀防、 終止?fàn)顟B(tài),以及中間的活動(dòng)狀態(tài)辫呻,每個(gè)活動(dòng)之間清钥,也就是一種狀態(tài)的變遷。在活動(dòng)圖中放闺,還引入了以下幾個(gè)概念。
- 判定:說(shuō)明基于某些表達(dá)式的選擇性路徑缕坎,在 UML 中使用菱形表示怖侦。
- 分支與組合:由于活動(dòng)圖建模時(shí),經(jīng)常會(huì)遇到并發(fā)流,因此在 UML 中引入了如上圖 14 所示的粗線(xiàn)來(lái)表示分支和組合匾寝。
(2)帶泳道的活動(dòng)圖
在前面說(shuō)明的基本活動(dòng)圖中搬葬,雖然能夠描述系統(tǒng)發(fā)生了什么,但沒(méi)有說(shuō)明該項(xiàng)活動(dòng)由誰(shuí)來(lái)完成艳悔。而針對(duì) OOP 而言急凰,這就意味著活動(dòng)圖沒(méi)有描述出各個(gè)活動(dòng)由哪個(gè)類(lèi)來(lái)完成。要想解決這個(gè)問(wèn)題猜年,可以通過(guò)泳道來(lái)解決這一問(wèn)題抡锈。它將活動(dòng)圖的邏輯描述與順序圖 、 協(xié)作圖的責(zé)任描述結(jié)合起來(lái)乔外。圖 15 是一個(gè)使用了泳道的例子床三。
(3)對(duì)象流
在活動(dòng)圖中可以出現(xiàn)對(duì)象。對(duì)象可以作為活動(dòng)的輸入或輸出杨幼,對(duì)象與活動(dòng)間的輸入 / 輸出關(guān)系由虛線(xiàn)箭頭來(lái)表示撇簿。如果僅表示對(duì)象受到某一活動(dòng)的影響,則可用不帶箭頭的虛線(xiàn)來(lái)連接對(duì)象與活動(dòng)差购。
(4)信號(hào)
在活動(dòng)圖中可以表示信號(hào)的發(fā)送與接收四瘫,分別用發(fā)送和接收標(biāo)識(shí)來(lái)表示。發(fā)送和接收標(biāo)識(shí)也可與對(duì)象相連欲逃,用于表示消息的發(fā)送者和接收者莲组。
3.8 構(gòu)件圖基礎(chǔ)
構(gòu)件圖是面向?qū)ο笙到y(tǒng)的物理方面進(jìn)行建模要用的兩種圖之一。它可以有效地顯示一組構(gòu)件暖夭,以及它們之間的關(guān)系锹杈。構(gòu)件圖中通常包括構(gòu)件 、 接口及各種關(guān)系迈着。圖 16 就是一個(gè)構(gòu)件圖的例子竭望。
通常構(gòu)件指的是源代碼文件 、 二進(jìn)制代碼文件和可執(zhí)行文件等裕菠。而構(gòu)件圖就是用來(lái)顯示編譯 咬清、 鏈接或執(zhí)行時(shí)構(gòu)件之間的依賴(lài)關(guān)系的。例如奴潘,在圖 16 中旧烧,就是說(shuō)明 QueryClient.exe 將通過(guò)調(diào)用 QueryServer.exe 來(lái)完成相應(yīng)的功能,而 QueryServer.exe 則需要 Find.exe 的支持画髓, Find.exe 在實(shí)現(xiàn)時(shí)調(diào)用了 Query.dll掘剪。
通常來(lái)說(shuō),可以使用構(gòu)件圖完成以下工作奈虾。
- 對(duì)源代碼進(jìn)行建模:這樣可以清晰地表示出各個(gè)不同源程序文件之間的關(guān)系夺谁。
- 對(duì)可執(zhí)行體的發(fā)布建模:如圖 16 所示廉赔,將清晰地表示出各個(gè)可執(zhí)行文件、DLL 文件之間的關(guān)系匾鸥。
- 對(duì)物理數(shù)據(jù)庫(kù)建模:用來(lái)表示各種類(lèi)型的數(shù)據(jù)庫(kù)蜡塌、表之間的關(guān)系。
- 對(duì)可調(diào)整的系統(tǒng)建模:例如對(duì)應(yīng)用了負(fù)載均衡勿负、故障恢復(fù)等系統(tǒng)的建模馏艾。
在繪制構(gòu)件圖時(shí),應(yīng)該注意側(cè)重于描述系統(tǒng)的靜態(tài)實(shí)現(xiàn)視圖的一個(gè)方面奴愉,圖形不要過(guò)于簡(jiǎn)化琅摩,應(yīng)該為構(gòu)件圖取一個(gè)直觀的名稱(chēng),在繪制時(shí)避免產(chǎn)生線(xiàn)的交叉躁劣。
3.9 部署圖基礎(chǔ)
部署圖迫吐,也稱(chēng)為實(shí)施圖,它和構(gòu)件圖一樣账忘,是面向?qū)ο笙到y(tǒng)的物理方面建模的兩種圖之一志膀。構(gòu)件圖是說(shuō)明構(gòu)件之間的邏輯關(guān)系,而部署圖則是在此基礎(chǔ)上更進(jìn)一步地描述系統(tǒng)硬件的物理拓?fù)浣Y(jié)構(gòu)及在此結(jié)構(gòu)上執(zhí)行的軟件鳖擒。部署圖可以顯示計(jì)算結(jié)點(diǎn)的拓?fù)浣Y(jié)構(gòu)和通信路徑 溉浙、 結(jié)點(diǎn)上運(yùn)行的軟件構(gòu)件,常用于幫助理解分布式系統(tǒng)蒋荚。
圖 17 就是與圖 16 對(duì)應(yīng)的部署圖戳稽,這樣的圖示可以使系統(tǒng)的安裝 、 部署更為簡(jiǎn)單期升。
在部署圖中惊奇,通常包括以下一些關(guān)鍵的組成部分。
(1)節(jié)點(diǎn)和連接播赁。節(jié)點(diǎn)代表一個(gè)物理設(shè)備及其上運(yùn)行的軟件系統(tǒng)颂郎,如一臺(tái) UNIX 主機(jī) 、 一個(gè) PC 終端 容为、 一臺(tái)打印機(jī) 乓序、 一個(gè)傳感器等。
如圖 17 所示坎背, “ 客戶(hù)端:個(gè)人 PC ” 和 “ 服務(wù)器 ” 就是兩個(gè)節(jié)點(diǎn)替劈。在 UML 中,使用一個(gè)立方體表示一個(gè)節(jié)點(diǎn)得滤,節(jié)點(diǎn)名放在左上角陨献。節(jié)點(diǎn)之間的連線(xiàn)表示系統(tǒng)之間進(jìn)行交互的通信路徑,在 UML 中被稱(chēng)為連接耿戚。通信類(lèi)型則放在連接旁邊的 “ 《》 ” 之間湿故,表示所用的通信協(xié)議或網(wǎng)絡(luò)類(lèi)型阿趁。
(2)構(gòu)件和接口膜蛔。在部署圖中坛猪,構(gòu)件代表可執(zhí)行的物理代碼模塊,如一個(gè)可執(zhí)行程序皂股。邏輯上它可以與類(lèi)圖中的包或類(lèi)對(duì)應(yīng)墅茉。例如,在圖 17 中呜呐, “ 服務(wù)器 ” 結(jié)點(diǎn)中包含 “ QueryServer.exe ” 就斤、 “ Find.exe ” 和 “ Query.dll ” 3個(gè)構(gòu)件。
在面向?qū)ο蠓椒ㄖ心⒓?lèi)和構(gòu)件等元素并不是所有的屬性和操作都對(duì)外可見(jiàn)洋机。它們對(duì)外提供了可見(jiàn)操作和屬性,稱(chēng)之為類(lèi)和構(gòu)件的接口洋魂。界面可以表示為一頭是小圓圈的直線(xiàn)绷旗。在圖 17 中, “ Query.dll ” 構(gòu)件提供了一個(gè) “ 查詢(xún) ” 接口副砍。