第8章面向?qū)ο骭第1頁
第8章面向?qū)ο骭第2頁
第8章面向?qū)ο骭第3頁
第8章面向?qū)ο骭第4頁
第8章面向?qū)ο骭第5頁
已閱讀5頁,還剩104頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

第三部分面向?qū)ο蟮能浖_發(fā)方法第8章面向?qū)ο蠓治?.1什么是面向?qū)ο蠓治雒嫦驅(qū)ο蠓治觯∣bject-OrientedAnalysis,OOA)是軟件生命周期的一個階段,具有一般分析方法所共同具有的內(nèi)容、目標(biāo)及策略。然而,OOA強調(diào)運用面向?qū)ο蠓椒▉韺栴}域和系統(tǒng)責(zé)任進行分析與理解,定義描述問題域和系統(tǒng)責(zé)任所需要的對象,定義對象的屬性、操作以及對象之間的關(guān)系,目標(biāo)是建立一個符合問題域、滿足用戶功能需求的OOA模型。8.1什么是面向?qū)ο蠓治鼋鹑跇I(yè)務(wù)個人儲蓄國債發(fā)行貸款業(yè)務(wù)….人事管理……信息備份……系統(tǒng)責(zé)任問題域問題域(problemdomain):被開發(fā)系統(tǒng)的應(yīng)用領(lǐng)域,即在現(xiàn)實世界中由這個系統(tǒng)進行處理的業(yè)務(wù)范圍。系統(tǒng)責(zé)任(systemresponsibilities):所開發(fā)的系統(tǒng)應(yīng)該具備的職能。8.1什么是面向?qū)ο蠓治?.1什么是面向?qū)ο蠓治?.2建立基本模型——類圖類圖描述了系統(tǒng)中各類對象以及它們之間的各種關(guān)系。一張類圖應(yīng)該注重表達系統(tǒng)靜態(tài)結(jié)構(gòu)的一個方面,這意味著,若系統(tǒng)較為復(fù)雜,可能要繪制多張類圖。8.2.1對象與類

概念與表示法

對象是具有明確語義邊界并封裝了狀態(tài)和行為的實體,由一組屬性和作用在這組屬性上的一組操作構(gòu)成,是構(gòu)成系統(tǒng)的一個基本單位。

類是對一組具有相同屬性和操作的一組對象的抽象描述?!忉專阂粋€類的所有對象具有相同的屬性,是指所有對象的屬性的個數(shù)、名稱、數(shù)據(jù)類型都相同,各個對象的屬性值則可以互不相同,并且隨著程序的執(zhí)行而變化。至于操作,對于一個類的所有對象都是一樣的,即所有的對象共同使用它們的類定義中給出的操作。

8.2.1對象與類用一個由水平線劃分成三個分欄的實線矩形表示類。在最上面的那個分欄放類名,中間的分欄放屬性列表,最下面的分欄放操作列表,每個屬性和操作都各占一行對象名:類名類名屬性欄操作欄8.2.1對象與類識別對象與類9.2.1.1在使用用況圖完成捕獲與描述需求后,已經(jīng)對問題域和系統(tǒng)責(zé)任進行了分析,把用戶的的需求落實到了各個用況之中。

由于用況模型僅描述了系統(tǒng)內(nèi)外的交互情況,從其中識別出來的對象與類肯定是不夠全面的。在識別對象與類時,問題域和系統(tǒng)責(zé)任仍是工作的基礎(chǔ)。因為二者從不同的角度告訴分析員應(yīng)該設(shè)立哪些對象。

1、研究問題域考慮問題域,側(cè)重于客觀存在的事物與系統(tǒng)中對象的映射??梢詥l(fā)分析員發(fā)現(xiàn)對象的因素包括:人員、組織機構(gòu)、物品、設(shè)備、事件(如索賠、上訪、交易)、表格、日志、報告和結(jié)構(gòu)等。其中的結(jié)構(gòu)可能是多種多樣的,例如,在概念類別上,汽車之上有車輛,之下可細分為客車和轎車,左右有摩托車和拖拉機,之內(nèi)有發(fā)動機。它還可作成車隊的一個成分。8.2.1對象與類2.考慮系統(tǒng)邊界1)

把一些人員和設(shè)備看作問題域范疇以內(nèi)的事物,系統(tǒng)中的對象是對它們的抽象描述。側(cè)重于以系統(tǒng)中的對象模擬現(xiàn)實中的人和設(shè)備。2)

對系統(tǒng)邊界之外與系統(tǒng)進行交互的參與者,系統(tǒng)中需要設(shè)立相應(yīng)的對象處理系統(tǒng)與這些實際的人和設(shè)備的交互,側(cè)重于以系統(tǒng)中的對象處理現(xiàn)實中的人和設(shè)備與系統(tǒng)的交互。3)在系統(tǒng)中設(shè)立一個對象,處理與外系統(tǒng)的接口。

人員設(shè)備外系統(tǒng)從不同的角度考慮人員和設(shè)備8.2.1對象與類3.考慮系統(tǒng)責(zé)任對照系統(tǒng)責(zé)任所要求的每一項功能,查看是否可以由現(xiàn)有的對象完成這些功能。如果發(fā)現(xiàn)某些功能在現(xiàn)有的任何對象中都不能提供,則可啟發(fā)我們發(fā)現(xiàn)問題域中某些遺漏的對象。

如果已經(jīng)建立了用況模型,考慮執(zhí)行下列的附加步驟:

使用用況產(chǎn)生場景。 ■

使用場景尋找已錯過的類。8.2.1對象與類審查與篩選(1)舍棄無用的類通過屬性判斷:是否通過屬性記錄了某些有用的信息*?通過操作判斷:是否通過操作提供了某些有用的功能*?二者都不是——無用

通常,類應(yīng)該具有多個屬性和操作。也存在無屬性而僅有操作的類,或無操作而僅有屬性的類的情況。8.2.1對象與類(2)與實現(xiàn)條件有關(guān)的類,推遲到OOD考慮

系統(tǒng)責(zé)任所要求的某些功能—例如系統(tǒng)安裝、配置、信息備份、瀏覽——可能無法從問題域中找到相應(yīng)的對象來提供這些功能,應(yīng)該在設(shè)計階段考慮專門為它們增加一些類,既把它們推遲到設(shè)計階段考慮。系統(tǒng)責(zé)任要求的某些功能可能與實現(xiàn)環(huán)境有關(guān),也推遲到設(shè)計階段考慮。例如:與圖形用戶界面系統(tǒng)、數(shù)據(jù)管理系統(tǒng)、硬件和操作系統(tǒng)有關(guān)的類。8.2.1對象與類(1)簡化對只有一個屬性的類只有一個操作的類班級…………班主任姓名11班級班主任姓名…………輸出設(shè)備…………格式轉(zhuǎn)換器文件格式轉(zhuǎn)換輸出設(shè)備……文件格式轉(zhuǎn)換……抽象出類并進行調(diào)整

8.2.1對象與類(2)類的屬性或操作不適合該類的全部對象

例:“汽車”類的“乘客限量”屬性,不適合于吊車、鏟車。問題:分類不夠詳細——進一步劃分特殊類

(3)屬性及操作相同的類*經(jīng)過抽象,差別很大的事物可能只保留相同的特征——考慮能否合并為一個類,如計算機與吸塵器

(4)屬性及操作相似的類*——考慮能否提升出一個一般類*,或形成整體部分結(jié)構(gòu)。例:轎車、貨車,抽象出汽車;機床與鼓風(fēng)機用電機做成分.

(5)對職責(zé)過多的類進行分解8.2.1對象與類8.2.1對象與類主動對象是具有主動行為的對象,在設(shè)計階段是擁有線程或進程并能夠啟動控制活動的對象。主動類是其實例為主動對象的類。識別主動對象的策略:(1)考慮問題域哪些對象需呈現(xiàn)主動行為*?--按定義(2)考慮系統(tǒng)責(zé)任根據(jù)系統(tǒng)責(zé)任觀察系統(tǒng)功能的構(gòu)成層次,重點考慮完成最外層功能的對象是否應(yīng)定義為主動對象。

(3)考慮系統(tǒng)邊界

哪些對象與參與者交互?如果一個交互是由參與者發(fā)起的,第一個處理該交互的對象是主動對象(4)進行操作執(zhí)行路線的逆向追蹤。

在分析階段不能完全確定主動對象認(rèn)識對象的主動行為并識別主動對象8.2.1對象與類{active}

類名類名主動類對象名:類名主動對象類名對象名:類名主動類的線框是粗黑的,或在主動類名之前要加一個主動性標(biāo)記{active};在尚未確定是不是主動對象之前,暫時用普通對象的類符號表示。類的命名適合該類及其特殊類的全部對象實例*機動車汽車摩托車車輛汽車摩托車馬車9.2.1對象與類8.2.1對象與類建立類圖的對象層

用類符號表示每個對象類填寫類描述模板若發(fā)現(xiàn)新的屬性與操作、關(guān)系,可以隨時加到類符號中。反映個體而不是群體*

書-書籍;船-船舶*使用名詞,或帶有定語的名詞

,避免無意義的符號如線裝書考慮使用適當(dāng)種類的語言文字對類命名。在中國:可用中、英文雙重命名*8.2.1對象與類8.2.2定義屬性與操作屬性是用來描述對象靜態(tài)特征的一個數(shù)據(jù)項

從技術(shù)觀點上,屬性是變量,包含它的每一個對象都具有自己的值(屬性值)。

按照面向?qū)ο蠓椒ǖ姆庋b原則,一個對象的屬性和操作是緊密結(jié)合的,對象的屬性只能由這個對象的操作存取。

[可見性]屬性名[‘:’類型][‘=’初始值]

可見性分為+(公有的)、#(受保護的)、-(私有的)或~(包,只有在同一包中聲明的類能夠使用這一屬性)。

在一個對象/類中,必須給每一個屬性一個唯一的名字。屬性的類型可以是常見的基本數(shù)據(jù)類型,也可以是自己定義的類型。

9.2.2.1定義屬性通過在類范圍屬性名和類型表達式畫下劃線的方式,表示類范圍的屬性,否則屬性是實例范圍的。類名普通類屬性1······屬性n操作1······操作mOO方法中有“實例屬性”和“類屬性”的概念之分。上面談到的只是實例屬性。類屬性是描述類的所有對象共同特征的一個數(shù)據(jù)項,對于任何對象實例,它的屬性值都是相同的。C++中冠以static的成員變量是類屬性,這樣的屬性對一個類的全部對象實例只是一份共同的數(shù)據(jù)空間,所以對任何對象而言,該屬性的值總是相同的。實例屬性和類屬性各有不同的用途*。

8.2.2定義屬性與操作識別屬性*

按常識這個對象應(yīng)該有哪些屬性?在當(dāng)前的問題域中,對象應(yīng)該有哪些屬性?根據(jù)系統(tǒng)責(zé)任,這個對象應(yīng)具有哪些屬性*?如信用卡的使用建立這個對象是為了保存和管理哪些信息?對象為了完成其功能,需要增設(shè)哪些屬性?對象是否需要通過專設(shè)的屬性區(qū)別其狀態(tài)*?如設(shè)備用什么屬性表示聚合和關(guān)聯(lián)?--不建議可利用需求文檔中的形容詞或所有格短語*。

若一個屬性的結(jié)構(gòu)較為復(fù)雜(即不僅僅是一些簡單的數(shù)字或文本),可考慮把其作為對象。8.2.2定義屬性與操作篩選

*是否體現(xiàn)了以系統(tǒng)責(zé)任為目標(biāo)的抽象;例:書的重量*?是否描述對象本身的特征;例:課程—電話號碼*?一個屬性所對應(yīng)的一個事物性質(zhì)的粒度要適當(dāng)。例如人的通信地址,包括國家、省、城市、街道、門牌號碼等內(nèi)容,但這些內(nèi)容在通信地址這個概念上是不可分的。在定義“人員”對象的屬性時,應(yīng)該使用一個屬性“通信地址”,而不應(yīng)把有關(guān)通信地址的各項內(nèi)容拆散開用多個屬性來描述。

若一個對象與另一個對象有關(guān)系,其屬性必須捕獲該對象的性質(zhì),而不是關(guān)系或關(guān)系中的其他對象的性質(zhì);

如屬性必須是整個實體的特征,而不是其成分的特征*是否可通過繼承得到?可以從其它屬性直接導(dǎo)出的屬性*;與實現(xiàn)有關(guān)的因素,推遲到OOD考慮(規(guī)范化、對象標(biāo)識、性能問題)8.2.2定義屬性與操作屬性的命名和定位

命名:原則與類的命名相同 定位:針對所描述的對象,適合全部對象實例。屬性的詳細說明把每個屬性都填寫到相應(yīng)的類符號中去,并在相應(yīng)的類描述模板中進行詳細說明。

8.2.2定義屬性與操作操作是類的對象被要求執(zhí)行的服務(wù)。[可見性]操作名[‘(‘參數(shù)列表’)’][‘:’返回類型]可見性的取值為+(公有的)、#(受保護的)、-(私有的)或~(包)

。內(nèi)部操作和外部操作,特征標(biāo)記

類操作是用來操縱類屬性的操作。例如C++中的前面冠以static的成員函數(shù),就是類范圍操作

表示法

類范圍的操作用帶下劃線的名字和類型表達式串表示。實例范圍操作是默認(rèn)的,對其不用標(biāo)記。

概念與表示法9.2.2.2操作8.2.2定義屬性與操作

如果想要在OOA階段記錄方法的詳細文字描述或算法,則把它們放在類描述模板中,如有必要也可放在注釋中。該項工作應(yīng)該在OOD階段完成。識別操作

諸如創(chuàng)建(創(chuàng)建并初始化一個新對象)、連接(將一個對象與另一個對象連接)、訪問(得到或設(shè)置屬性值)、斷開連接(將一個對象與另一個對象的連接斷開)和刪除一個對象之類的操作都屬于在算法上是簡單的操作,在OOA不予以考慮。在OOA中,只對識別那些必須由對象提供的、在算法上復(fù)雜的業(yè)務(wù)操作(如要進行某些計算或監(jiān)控操作)感興趣。

8.2.2定義屬性與操作(1)考慮系統(tǒng)責(zé)任有哪些功能要求在本對象提供*?(2)考慮問題域?qū)ο笤趩栴}域?qū)?yīng)的事物有哪些行為*?(3)分析對象狀態(tài)在每種狀態(tài)下對象可能發(fā)生什么行為?對象狀態(tài)的轉(zhuǎn)換,是由哪些操作引起的?--狀態(tài)圖講述(4)追蹤操作的執(zhí)行路線模擬操作的執(zhí)行,并在整個系統(tǒng)中跟蹤*。(5)用動詞識別操作(6)查看每一個屬性,因為要用對象的操作來對其進行操縱

識別操作的啟發(fā)策略8.2.2定義屬性與操作審查對象的每個操作是否真正有用是否直接提供系統(tǒng)責(zé)任所要求的某項功能?或者響應(yīng)其它操作的請求,間接地完成某種功能的某些局部操作?調(diào)整——取消無用的操作是不是高內(nèi)聚的一個操作應(yīng)該只完成一項單一的、相對完整的功能*調(diào)整——拆分或合并審查與調(diào)整

8.2.2定義屬性與操作命名:動詞或動賓結(jié)構(gòu)定位:與實際事物一致例:售貨員——售貨*,商品——售出*在泛化中的位置——適合類的全部對象實例操作的命名和定位8.2.2定義屬性與操作描述操作把每個對象的操作都填寫到相應(yīng)的類符號中。

在類描述模板中,寫出:說明操作的職責(zé)操作原型(消息格式)

[可見性]操作名[‘(‘參數(shù)列表’)’][‘:’返回類型]

消息發(fā)送(指出在這個操作執(zhí)行時,需要請求哪些別的對象操作,即接收消息的對象類名以及執(zhí)行這個消息的操作名)約束條件:如果該操作的執(zhí)行有前置條件、后置條件,以及執(zhí)行時間的要求等其它需要說明的事項,則在這里加以說明。實現(xiàn)操作的方法(文字、活動圖或流程圖)。

8.2.2定義屬性與操作類(及其對象)之間的四種關(guān)系分類關(guān)系、繼承——泛化(一般-特殊)generalization(generalization-specialization)構(gòu)成關(guān)系——聚合(整體-部分)aggregation(whole-part)靜態(tài)聯(lián)系——關(guān)聯(lián)association使用關(guān)系——依賴Dependency這些關(guān)系形成了類圖的關(guān)系層*8.2.3建立關(guān)系

1、概念

泛化是較特殊的類和較一般的類之間的直接關(guān)系(繼承關(guān)系),其中較一般的類具有較特殊的類的共同性質(zhì),較特殊的類繼承較一般的類的性質(zhì),且還具有自己的性質(zhì),較特殊的類的對象是較一般的類的對象的子集。9.2.3.1泛化

特殊類一般類的性質(zhì)一般類特殊類的性質(zhì)只要有這些性質(zhì)必須有這些性質(zhì)對象實例集合性質(zhì)集合理解一般類與特殊類之間的關(guān)系8.2.3建立關(guān)系

把在一個類中沒有實現(xiàn)的操作(即沒有提供方法),稱為抽象操作。在C++中,把抽象操作稱作純虛操作。含有抽象操作的類是不能直接實例化的,在UML中把這種類叫做抽象類。抽象類的作用是為了讓其子類繼承它的屬性和操作等。8.2.3建立關(guān)系

2、表示法一般類特殊類特殊類泛化抽象類帶有標(biāo)記“{abstract}”,或者把操作的特征標(biāo)記寫成斜體來表示它是抽象的。抽象操作帶有標(biāo)記“{abstract}”,或者把操作的特征標(biāo)記寫成斜體來表示它是抽象的。{abstract}8.2.3建立關(guān)系

3、識別繼承(泛化)(1)學(xué)習(xí)當(dāng)前領(lǐng)域的分類學(xué)知識(2)按常識考慮事物的分類(3)利用泛化的定義(右圖)(4)考察類的屬性與操作(左圖)(5)看兩個類的對象之間是否有“是一種”關(guān)系。?公司人員姓名身份證號股份工資············?公司人員姓名身份證號······股東股份············職員工資··················姓名身份證號股份············姓名身份證號工資············股東職員公司人員姓名身份證號············股東股份············職員工資············?8.2.3建立關(guān)系

(1)問題域是否需要這樣的分類?(例:書—善本書*)(2)系統(tǒng)責(zé)任是否需要這樣的分類?(例:職員—本市職員)(3)是否符合分類學(xué)的常識?(用“isakindof”去套)4、審查與調(diào)整(4)是否構(gòu)成了繼承關(guān)系?運輸工具發(fā)動機載重量速度······飛機飛行高度······自動導(dǎo)航······汽車············運輸工具發(fā)動機載重量速度······飛機飛行高度······自動導(dǎo)航······運輸······運輸······或汽車發(fā)動機載重量速度······運輸······×飛機飛行高度······自動導(dǎo)航······8.2.3建立關(guān)系

一般-特殊結(jié)構(gòu)的簡化一、從一般類劃分出太多的特殊類,使系統(tǒng)中類的設(shè)置太多,增加了系統(tǒng)的復(fù)雜性;二、建立過深的繼承層次,增加了系統(tǒng)的理解難度和處理開銷。

運輸工具發(fā)動機載重量速度······飛機飛行高度······自動導(dǎo)航······運輸······運輸工具發(fā)動機載重量速度······飛機飛行高度······自動導(dǎo)航······汽車運輸······(1)取消沒有特殊性的特殊類8.2.3建立關(guān)系

(2)增加屬性簡化一般-特殊結(jié)構(gòu)人員············男人············女人············中國人············美國人············日本人············人員性別國籍··················8.2.3建立關(guān)系

(3)取消用途單一的一般類,減少繼承層次雷達型號生產(chǎn)廠安裝地點······開啟關(guān)閉監(jiān)控······一般類存在的理由:·有兩個或兩個以上的特殊類·需要用它創(chuàng)建對象實例·有助于軟件復(fù)用電子設(shè)備激光打印機傳真機通訊設(shè)備設(shè)備電子設(shè)備計算機設(shè)備打印機民用通訊設(shè)備激光打印機傳真機設(shè)備型號生產(chǎn)廠······開啟關(guān)閉雷達安裝地點······監(jiān)控······8.2.3建立關(guān)系

5、調(diào)整對象層和特征層

定義泛化的活動,將使分析員對系統(tǒng)中的類及其特征有更深入的認(rèn)識。隨著泛化的建立,經(jīng)常需要對類圖的對象層和特征層作某些修改,包括增加、刪除、合并或分開某些類,以及增、刪某些屬性和操作或把它們移到其它類。8.2.3建立關(guān)系

對象之間的靜態(tài)聯(lián)系是指,最終可通過對象屬性來表示的一個對象對另一個對象的聯(lián)系。對象之間的動態(tài)聯(lián)系是指,對象之間在行為(如操作調(diào)用)上的依賴關(guān)系。

用關(guān)聯(lián)*(association)表示類之間的靜態(tài)聯(lián)系。用鏈*

(link)表示類對象之間的靜態(tài)聯(lián)系。 關(guān)聯(lián)8.2.3建立關(guān)系

1、概念與表示法1)關(guān)聯(lián)如果類的對象之間通過屬性有連接關(guān)系,那么這些類之間的語義關(guān)系就是關(guān)聯(lián)。

教師學(xué)生0..*1指導(dǎo)論文城市0..*0..*有航線把二元關(guān)聯(lián)表示成連接兩個類符號的實線路徑(兩個端點可以連接到相同的類,但是端點是不同的)。關(guān)聯(lián)名可以在路徑附近表示出來。

兩個類之間可以有多個關(guān)聯(lián).8.2.3建立關(guān)系

2)鏈

鏈?zhǔn)顷P(guān)聯(lián)的一個實例,是對象間的語義連接。在最常見的情況下,鏈?zhǔn)且粚ο笠?。這樣的連接使得對象之間在某段時間內(nèi)保持聯(lián)系。在兩個對象之間建立了鏈,每一個對象都可以請求另一個對象的操作。把二元鏈表示為兩個實例之間的路徑。如果有關(guān)聯(lián)名,就應(yīng)該在它的下面畫線表示鏈名。所有的鏈都被默認(rèn)為是雙向的,單向的用箭頭來標(biāo)示。對象之間可以有多個鏈*。張三:教師李四:學(xué)生指導(dǎo)論文教師學(xué)生0..*1指導(dǎo)論文8.2.3建立關(guān)系

例子

1,3,80..1 0..* * 1..3,7..10,15,19..*

3)多重性可把多重性規(guī)約表示成由用逗號分開的整數(shù)間隔序列組成的數(shù)字串;也可用區(qū)間代表整數(shù)的范圍(可能無限):下限..上限,用于說明從下限到上限的整數(shù)閉區(qū)間。星號(*)可以用于上限,表明不限制上限。*等價于0..*。教師學(xué)生0..*1指導(dǎo)論文8.2.3建立關(guān)系

關(guān)聯(lián)上的另一端上的多重性是指,對于本端的任意一個對象,需要另一端對象的個數(shù)的范圍。成績單11學(xué)生有一個系11..*教授工作系0..11教授系主任課程0..*0..*學(xué)生選修0..*0..*課程預(yù)修8.2.3建立關(guān)系

4)關(guān)聯(lián)角色在關(guān)聯(lián)的一個端點上可有一個角色。每一個角色具有一個名字,用來描述其類被其他的類看作是什么:把它稱為角色名。當(dāng)需要強調(diào)一個類在一個關(guān)聯(lián)的確切含義時,使用關(guān)聯(lián)角色名。用戶口令擁有者如果使用角色名,就可以省略關(guān)聯(lián)名。

8.2.3建立關(guān)系

有時可指定類的角色,而不用關(guān)聯(lián)角色。但要注意:改變該類不要對其他類產(chǎn)生影響。學(xué)生口令專業(yè)擁有者11..*0..1*學(xué)生[口令擁有者]口令專業(yè)11..*?8.2.3建立關(guān)系

管理者1下屬*

雇員

張三

侯六

李四

王五管理者管理者管理者下屬下屬下屬8.2.3建立關(guān)系

5)關(guān)聯(lián)類(associationclass)

關(guān)聯(lián)類具有關(guān)聯(lián)和類的特征的建模元素。換句話說,關(guān)聯(lián)類既可以被看作是具有類的性質(zhì)的關(guān)聯(lián),也可以被看作為具有關(guān)聯(lián)性質(zhì)的類。例如,考慮一個人的工資。通常將它作為屬性設(shè)在Person類中??紤]一個人在多個公司工作,公司也應(yīng)該知道它所發(fā)放的工資.

實際上,工資應(yīng)該是類Person和Company之間的雇傭關(guān)系的一個屬性。如果在具有關(guān)聯(lián)關(guān)系的類中,存在著一個屬性放在哪個類中都不合適的情況,就考慮使用關(guān)聯(lián)類。

8.2.3建立關(guān)系

6)N元關(guān)聯(lián)N元關(guān)聯(lián)是三個或三個以上類之間的一個關(guān)聯(lián)。UML規(guī)定:一個角色上的多重性是指,當(dāng)該N元關(guān)聯(lián)中的其它N-1個值被確定時,該關(guān)聯(lián)潛在的實例元組的數(shù)目。?用一個大的菱形表示一個N元關(guān)聯(lián),這個菱形與類間有相連接路徑。關(guān)聯(lián)的名字(如果有的話)顯示在菱形附近。同二元關(guān)聯(lián)一樣,角色修飾可以顯示在每一個路徑上??梢杂锰摼€把關(guān)聯(lián)類符號與菱形連接起來,表示具有屬性、操作或關(guān)聯(lián)的N元關(guān)聯(lián)。

項目語言人員8.2.3建立關(guān)系

2建立關(guān)聯(lián)

(1)認(rèn)識對象之間的靜態(tài)聯(lián)系

考慮問題域和系統(tǒng)責(zé)任——哪些類的對象之間的關(guān)系需要在系統(tǒng)中表達。

(2)認(rèn)識關(guān)聯(lián)的屬性與操作對于考慮中的每一種關(guān)聯(lián),進一步分析它是否應(yīng)該帶有某些屬性和操作。就是說,是否含有一些僅憑一個簡單的關(guān)聯(lián)不能充分表達的信息(P117)。

(3)分析并表示關(guān)聯(lián)的多重性從連接線的每一端,看本端的一個對象可能與另一端的幾個對象發(fā)生連接,把結(jié)果標(biāo)注到連接線的另一端。

(4)對多對多的關(guān)聯(lián)的處理?8.2.3建立關(guān)系

3對象層、特征層的增補及關(guān)聯(lián)說明在建立關(guān)聯(lián)的過程中可能增加一些新的對象類,要把這些新增的類補充到類圖的對象層中,并建立它們的類描述模板。一種說法:對于每一個關(guān)聯(lián),可在它某一端所連接的對象類中增加相應(yīng)的屬性;在這個類的描述模板中,給出這個屬性的詳細說明?!唤ㄗh!

8.2.3建立關(guān)系

1、概念與表示法聚合(aggregation)是關(guān)聯(lián)的一種特殊形式,表示整體類和部分類之間的“整體-部分”關(guān)系。聚集(aggregate)是聚合關(guān)系中作為“整體”的類,而把作為“部分”的類稱為成分或部分。

類與類之間的聚合關(guān)系指的是,一個類的對象實例,以另一個類的對象實例作為其組成部分,是種“apartof”或“hasa”;

也可理解為,一個類定義引用另一個類定義。8.2.3.3聚合

ClassB{}ClassA{…Bb;…}組合是聚合的一種形式,其部分類的對象和整體類的對象之間有很強的“屬于”關(guān)系,整體類的對象管理部分類的對象,決定部分類的對象何時屬于它,何時不屬于它。部分可以先于整體消亡。組合對象是組合類的實例。

8.2.3建立關(guān)系

C++: 整體類中的屬性用部分類作為基類型,為組合;JAVA: 整體類中的屬性用部分類作為基類型,為聚合。對于C++中的屬性為指針(基類型為一個類)也是如此。組合聚合部分對象部分對象整體對象嵌套對象整體對象部分對象部分對象整體對象對象指針或?qū)ο髽?biāo)識描述緊密、固定的關(guān)系,例如汽車與發(fā)動機描述松散、靈活的關(guān)系,例如公司與法律顧問8.2.3建立關(guān)系

整體對象類部分對象類1..*1..*連接符:表示法汽車發(fā)動機車輪14,60..10..1例子:多重性:一對一一對多多對多多重性表示:固定的數(shù)目或范圍——例如:1或1..3不定的數(shù)目或范圍——例如:*或0..*組合的聚集端的多重性不能超過1。8.2.3建立關(guān)系

學(xué)院大學(xué)11..*大學(xué)學(xué)院構(gòu)成聚合上一般不標(biāo)名稱。異同?1..*18.2.3建立關(guān)系

2識別聚合

(1)物理上的整體事物和它的組成部分 例:機器、設(shè)備和它的零部件(2)組織機構(gòu)和它的下級組織及部門 例:公司與子公司、部門(3)團體(組織)與成員 例:公司與職員(4)一種事物在空間上包容其它事物 例:生產(chǎn)車間與機器(5)抽象事物的整體與部分 例:學(xué)科與分支學(xué)科、法律與法律條款(6)具體事物和它的某個抽象方面 例:人員與身份、履歷(7)在材料上的組成關(guān)系例如,面包由面粉、糖和酵母組成,汽車是由鋼、塑料和玻璃組成。

8.2.3建立關(guān)系

3、審查與篩選(1)是否屬于問題域?例:公司職員與家庭*(2)是不是系統(tǒng)責(zé)任的需要?例:公司與工會*(3)部分對象是否有一個以上的屬性?例:汽車與輪胎(規(guī)格)*(4)是否有明顯的整體-部分關(guān)系?例:學(xué)生與課程,誰是整體?部分?4、調(diào)整對象層和屬性層定義整體-部分結(jié)構(gòu)的活動可能發(fā)現(xiàn)一些新的對象類,或者從整體對象的類定義中分割出一些部分對象的類定義,應(yīng)把它們加入到對象層中,并給出它們的詳細說明。

8.2.3建立關(guān)系

8.2.4.4依賴

依賴規(guī)約了兩個或多個模型元素(或兩個模型元素集合)之間的一種語義關(guān)系,對目標(biāo)元素的改變可能需要改變該依賴中的源元素。

把依賴表示為兩個模型元素之間的虛線箭頭。在箭頭尾部的模型元素(客戶)依賴箭頭頭部的模型元素(提供者)。箭頭可以用放在雙尖括號內(nèi)的字符串標(biāo)識。8.2.3建立關(guān)系

8.3建立行為模型描述清楚了對象的行為以及對象之間的交互,有助于進一步地發(fā)現(xiàn)與定義類的操作,更有助于確定類之間的關(guān)系。UML中的一些圖可以用于建立面向?qū)ο蠓治龅男袨槟P?。本?jié)講述其中的典型的順序圖、活動圖和狀態(tài)機圖。一、概念與表示法1、概述

順序圖(SequenceDiagram)是一種詳細表示對象之間以及對象與參與者實例之間交互的圖,它由一組協(xié)作的對象(或參與者實例)以及它們之間可發(fā)送的消息組成,它強調(diào)消息之間的順序。

[對象名]:類名圖中含有對象(參與者)、消息、生命線和執(zhí)行規(guī)約組成。8.3.1順序圖順序圖是二維的:垂直方向表示時間,水平方向表示不同的對象或參與者。通常時間維由上到下(根據(jù)需要,也可以由下到上)。通常只有時間順序是重要的,但在實時應(yīng)用中時間軸是能度量的。對象的水平順序并不重要,順序可以是任意的。

t08.3.1順序圖2、對象生命線把對象表示成稱之為“生命線”的垂直虛線。生命線代表一個對象在特定時間內(nèi)的存在。

在圖的頂部(第一個箭頭之上)放置在交互開始時就存在的對象,而在整個交互完成時仍然存在的對象的生命線,要延伸超出最后一個箭頭。

如果一個對象在圖中所規(guī)定的時間段被創(chuàng)建,那么就把創(chuàng)建對象的箭頭的頭部畫在對象符號上。如果對象在圖中被銷毀,那么用一個大的“X”標(biāo)記它的析構(gòu),該標(biāo)記或者放在引起析構(gòu)的箭頭處,或者放在從被銷毀的對象最終返回的箭頭處(在自析構(gòu)的情況下)。生命線可以分裂成兩條或更多條并發(fā)的生命線,以表示條件性。這樣的每一個生命線對應(yīng)于交互中的一個條件分支。生命線可以在某個后續(xù)點處合并。

執(zhí)行規(guī)約表示一個對象直接或者通過從屬例程執(zhí)行一個行為的時期。它既表示了行為執(zhí)行的持續(xù)時間,也表示了調(diào)用者與被調(diào)用者之間的控制關(guān)系。

用一個窄長的矩形表示執(zhí)行規(guī)約,矩形頂端和它的開始時刻對齊,末端和它的結(jié)束時刻對齊。執(zhí)行規(guī)約符號的頂端畫在進入的箭頭的尖端(開始該動作的那個箭頭),底端畫在返回的箭頭的尾部。當(dāng)一個對象處于執(zhí)行規(guī)約期時,該對象能夠響應(yīng)或發(fā)送消息,執(zhí)行對象或活動。當(dāng)一個對象不處于執(zhí)行規(guī)約期時,該對象不做什么事情,但它是存在的,等待新的消息執(zhí)行規(guī)約它。若調(diào)用一個對象的另一個操作,第二個執(zhí)行規(guī)約符號畫在第一個符號稍微靠右的位置。遞歸?3、執(zhí)行規(guī)約

消息是對象之間的通訊的規(guī)格說明,這樣的通訊用于傳輸將發(fā)生的活動所需要的信息——控制信息(如調(diào)用)和所使用的數(shù)據(jù)的規(guī)格說明。

一個消息會調(diào)用另一個對象的操作,調(diào)用本對象的操作,向另一個對象發(fā)送一個信號,創(chuàng)建或者撤消一個對象(可以自己銷毀自己),還可能向調(diào)用者返回一個結(jié)果。把消息表示為從一個對象生命線到另一個對象生命線的一個水平實線箭頭,即從源對象指向目標(biāo)對象,以觸發(fā)目標(biāo)對象中的特定操作。對于對象到自身的消息,箭頭就從同一個對象符號開始和結(jié)束。用消息(操作或信號)的名字及其參數(shù)值或者參數(shù)表達式標(biāo)示箭頭。

4、消息8.3.1順序圖用如下種類的箭頭表示不同種類的通訊:

同步消息一般把它用于普通的過程調(diào)用。在外層控制恢復(fù)之前,要完成整個嵌套序列。通常把它用于普通的過程調(diào)用。同步消息返回

用它顯式地表示從過程調(diào)用的返回。在控制的過程流中,可以省略返回箭頭(暗示執(zhí)行規(guī)約結(jié)束),這是要假設(shè)每個調(diào)用在任何消息后都有一個配對的返回。若需要標(biāo)識返回值,則要顯式地把它標(biāo)示在返回的箭頭上。

8.3.1順序圖異步消息

用它表示異步通訊,也即發(fā)送者發(fā)出消息后,立即繼續(xù)執(zhí)行中的下一步,不進行等待。

異步消息返回若請求方發(fā)了一個異步消息,且接收方響應(yīng)它后要返回信息,則使用另一個異步消息。

注意:消息與對消息的響應(yīng)。若在一個主動對象發(fā)送信號并等待完成一個嵌套的行為序列才繼續(xù)時,也可以把同步消息用于并發(fā)的主動對象。

8.3.1順序圖

在多數(shù)情況下,收發(fā)消息的時間是可以忽略的。通常消息箭頭都畫成水平的。這表示發(fā)送消息所需要的持續(xù)時間是“原子的”(也即,它與交互的粒度相比是短暫的,并且在傳送消息的中間不能發(fā)生任何事情)。這在很多計算機中都被假設(shè)是正確的。如果需要表示收發(fā)消息間的時間差,有三種方法:(1)可以在圖中使用約束,用于指示時間間隔。可以用消息名和經(jīng)過規(guī)定的函數(shù)書寫計時表達式,如下圖的“b.receiveTime–a.sendTime<1分鐘”。(2)若要在圖中顯式地表示時間差的數(shù)值,還可以通過構(gòu)造標(biāo)記來指明,如下圖右下角所示。(3)如果需要表示發(fā)送消息是需要時間的,還可把消息箭線向下傾斜,使箭線頭部在尾部下方,表示消息需要一段時間到達。8.3.1順序圖消息分支把分支畫成從一個點出發(fā)的多個箭頭,每個箭頭由監(jiān)護條件標(biāo)示。依據(jù)監(jiān)護條件是否互斥,這個結(jié)構(gòu)可以表達條件或者并發(fā)。消息循環(huán)標(biāo)以持續(xù)的條件:*[條件]方框圍起來的區(qū)域為重復(fù)的。通過使用預(yù)定的接口或消息設(shè)施(如分布式系統(tǒng)中的中間件)來實現(xiàn)和管理各軟件部件間的請求通信。8.3.1順序圖例題:打電話問題:時間超過30秒的情況沒說明會話對象沒有說明計費等情況s:電話c:會話:交換機a:拿起話筒b:發(fā)撥號聲邏輯連通連接s與rr:電話c:*撥號{時間少于30秒}創(chuàng)建陣鈴拿起話筒接通接通{b.receiveTime-a.sendTime<1分鐘}{c.receiveTime-c.sendTime<1秒}<5秒{30秒}8.3.1順序圖二、建立順序圖步驟:■按照當(dāng)前交互的意圖,如系統(tǒng)的一次執(zhí)行,或者一組對象(包括參與者實例,以下不再明確地提及參與者實例)之間的協(xié)作,詳細地審閱有關(guān)材料(如有關(guān)的用況),設(shè)置交互的語境,其中包括可能需要的那些對象?!鐾ㄟ^識別對象在交互中扮演的角色,在順序圖的上部列出所選定的一組對象(應(yīng)該給出其類名),并為每個對象設(shè)置生命線。通常把發(fā)起交互的對象放在左邊?!鰧τ谀切┰诮换テ陂g要被創(chuàng)建和撤銷的對象,在適當(dāng)?shù)臅r刻,用消息箭線顯式地予以指明?!鰶Q定消息將怎樣或以什么樣的序列在對象之間傳遞。通過首先發(fā)出消息的對象,看它需要哪些對象為它提供操作,它向那些對象提供操作。追蹤相關(guān)的對象,進一步做這種模擬,直到分析完與當(dāng)前語境有關(guān)的全部對象。如果一個對象的操作在某個執(zhí)行點上應(yīng)該向另一個對象發(fā)消息,則從這一點向后者畫一條帶箭頭的直線,并在其上注明消息名。用適當(dāng)?shù)募^線區(qū)別各種消息。

8.3.1順序圖在各對象下方的生命線上,按使用該對象操作的先后次序排列各個代表操作執(zhí)行的棒形條(執(zhí)行規(guī)約)。若出于某種目的要簡化順序圖,可不畫棒型條,或者針對一個對象只用一個棒型條代表其上的所有操作的執(zhí)行。兩個對象的操作執(zhí)行如果屬于同一個控制線程,則接收者操作的執(zhí)行應(yīng)在發(fā)送者發(fā)出消息之后開始,并在發(fā)送者結(jié)束之前結(jié)束。不同控制線程之間的消息有可能在接收者的某個操作的執(zhí)行過程中到達。如果需要,也可以對對象所執(zhí)行的操作的功能以及時間或空間約束進行描述。如果需要,可使用結(jié)構(gòu)化控制。用途幫助分析員對照檢查每個用況中描述的用戶需求,是否已經(jīng)落實到一些對象中去實現(xiàn)。提醒分析員去補充遺漏的對象類或操作。通過對一個特定的對象群體的動態(tài)方面建模,深刻地理解對象之間的交互。

幫助分析員發(fā)現(xiàn)哪些對象是主動對象活動圖可用于對業(yè)務(wù)過程和操作的算法建模一、概念與表示法

活動圖顯示從活動到活動的流。下面詳述有關(guān)的概念。1、動作和活動

動作(action)是行為規(guī)約的基礎(chǔ)單元,用以描述系統(tǒng)中的活動,它是原子的和即時的。動作是原子的,是指在與狀態(tài)相關(guān)的抽象層次上,動作是不可間斷的;動作時即時的,是指動作執(zhí)行的時間是可忽略不計的。如調(diào)用另一個操作,發(fā)送一個信號,創(chuàng)建或撤銷一個對象,或者某些純計算(例如對一個表達式求值),都是一個動作。

活動(activity)是由一系列的動作構(gòu)成的(也稱為動作表達式),用于描述系統(tǒng)的一項行為,它由動作和其他活動組成。在活動圖中,動作和活動均具有圖形表示法,且是一樣的發(fā)送郵件審批發(fā)票8.3.2活動圖2、控制流

當(dāng)動作或活動結(jié)束時,馬上進入下一個動作或活動。一系列的動作和活動的執(zhí)行構(gòu)成了一個控制流。在圖形上,用一個箭頭表示從一個動作或活動到下一個動作或活動的轉(zhuǎn)移開幕式比賽閉幕式控制流的分支與合并分支合并8.3.2活動圖控制流也可以是并發(fā)的。用同步條表示并發(fā)控制流的分岔和匯合。3、對象流定購銷售訂單分岔匯合8.3.2活動圖4、泳道在對業(yè)務(wù)過程建模時,可以把活動或動作分成組,每組由特定的履行者來執(zhí)行。履行者可為人員、組織或其他業(yè)務(wù)實體。把每個組分別稱為一個泳道。8.3.2活動圖5、活動圖活動圖是展示從動作或活動間的控制流和對象流的圖,其中的結(jié)點描述動作或活動,邊描述控制流或?qū)ο罅?。一般用它對計算過程中的步驟建模,也可用它對步驟間的數(shù)值的流動建模。上述的計算過程可為業(yè)務(wù)過程,也可為操作的算法。注意,順序圖強調(diào)對象間的控制流,而活動圖強調(diào)的是活動間的控制流。對于活動圖中一個活動結(jié)點,可用另一張活動圖(子活動圖)進行詳述。8.3.2活動圖二、建立活動圖對業(yè)務(wù)過程建模,要遵循如下的策略:設(shè)置業(yè)務(wù)過程的語境。即要考慮在特定的語境中要對哪些業(yè)務(wù)的履行者和業(yè)務(wù)實體建模??紤]為每個重要的業(yè)務(wù)的履行者建立一個泳道。建立初始狀態(tài)和終止?fàn)顟B(tài),并識別該業(yè)務(wù)過程的前置條件和后置條件。從初始狀態(tài)開始,說明隨著時間發(fā)生的動作或活動,并在活動圖中表示它們。如果涉及到重要的對象,則把它們也加入到活動圖中。如果有必要,可展示對象的屬性值和狀態(tài)。連接這些動作和活動結(jié)點的流。如果需要,使用分支和合并來描述條件路徑和迭代,使用分岔和匯合來描述并發(fā)的動作或活動流。針對活動建立子活動圖。8.3.2活動圖對一個操作建模時,應(yīng)遵循如下策略:收集該操作所涉及的事物,包括操作的參數(shù)、可能的返回類型、它所屬于的類以及某些鄰近的類的特征。識別操作的前置條件和后置條件以及操作所屬的類在操作執(zhí)行期間必須保持的不變式。從該操作的初始狀態(tài)開始,按照時間順序設(shè)立活動或動作,并在活動圖中將它們表示出來。如果需要,使用分支和合并來描述條件路徑和迭代。僅當(dāng)這個操作屬于一個主動類時,才在必要時用分岔和匯合來描述并發(fā)的控制流。在OOA階段,僅用活動圖對關(guān)鍵的復(fù)雜操作進行建模,用以展示關(guān)于算法的一些信息。除非想直接從模型生成代碼,即使在OOD階段并也不要求用活動圖對每個操作的算法都建立模型。8.3.2活動圖

對事物所處的狀態(tài)及其變遷建模需要考慮:事物在其生命周期中經(jīng)歷了不同的狀態(tài);在特定的時間,一個事物精確地位于一個狀態(tài),發(fā)揮特定的作用;在現(xiàn)實世界存在著引起事物的狀態(tài)發(fā)生變化的事件;事物在其狀態(tài)間按次序轉(zhuǎn)化;事物從一個狀態(tài)到另一個狀態(tài)的轉(zhuǎn)化通常是即時的。當(dāng)事件發(fā)生時,事物可能需要采取一些動作。

8.3.3狀態(tài)機圖一、概念與表示法1、事件從一般意義上講,事件是指在時間和空間上可以定位并具有實際意義、值得注意的所發(fā)生的事情。在OO中,事件是對一個可觀察的事情的規(guī)格說明,這種事情的發(fā)生可以引發(fā)狀態(tài)的轉(zhuǎn)換。

事件可以分為多種:

1)信號事件一個對象對一個信號實例(在不引起混淆的情況下,以下簡稱信號)的接收,導(dǎo)致一個信號事件。在一個類的符號中加一個附件的信號欄,列出其能接收的信號。信號可以作為狀態(tài)機中的狀態(tài)轉(zhuǎn)換上的動作被發(fā)送,或者作為交互中的一個消息被發(fā)送。8.3.3狀態(tài)機圖2)調(diào)用事件對操作的調(diào)用的接收(這樣的操作由接收事件的對象實現(xiàn))調(diào)用事件一般來說是同步的3)時間事件

在指定事件(經(jīng)常是當(dāng)前狀態(tài)的入口)后,經(jīng)過了一定的時間或到了指定日期/時間,導(dǎo)致一個時間事件。時間經(jīng)歷事件用后跟有計算時間量的表達式的關(guān)鍵詞“after”表示,比如“after(5秒)”或者”after(從狀態(tài)A退出后經(jīng)歷了10秒)”。如果沒指明時間起始點,那么從進入當(dāng)前狀態(tài)開始計時。

使用關(guān)鍵字at來指出在某個絕對時間點上發(fā)生的時間事件。例如,時間事件at(1Jan2005,12:00UT)指出該事件發(fā)生在格林尼治時間2005年1月1日的中午12點。8.3.3狀態(tài)機圖4)改變事件(條件變?yōu)檎媸录┯貌紶柋磉_式描述的指派條件變?yōu)檎妫蛯?dǎo)致了一個改變事件。無論表達式的值何時由假變成真,事件都發(fā)生。與改變事件關(guān)聯(lián)的布爾表達式的值變成真時事件發(fā)生一次,即使之后布爾表達式的值變?yōu)榧?,產(chǎn)生的事件仍將保持,直到它被處理為止。用后有跟布爾表達式的關(guān)鍵詞“when”表示變?yōu)檎娴臈l件,例如

when(altitude<1000)

可以把其看作是連續(xù)測試條件,直到它為真。8.3.3狀態(tài)機圖事件的格式:事件名 ‘(‘用逗號分隔的參數(shù)列表‘)’參數(shù)的格式如下:參數(shù)名 ‘:’類型表達式參數(shù)值由監(jiān)護條件和動作表達式使用.

事件出現(xiàn)的位置:狀態(tài)內(nèi),轉(zhuǎn)換上通常事件后面還跟有一個監(jiān)護條件(布爾表達式),當(dāng)事件出現(xiàn)要觸發(fā)轉(zhuǎn)換時,對它求值:——如果表達式取值為真,則觸發(fā)轉(zhuǎn)換;——如果為假,則不觸發(fā)轉(zhuǎn)換,而且如果沒有其他的轉(zhuǎn)換被此事件所觸發(fā),則該事件丟失。8.3.3狀態(tài)機圖2、狀態(tài)

狀態(tài)是一個對象的生命期的一個階段,在該階段中該對象要滿足一些特定的條件、執(zhí)行特定的活動或等待某個(些)事件。

把狀態(tài)表示成四角均為圓角的矩形,并把狀態(tài)的名稱放在其中。

a)

名稱分欄在該分欄中放置狀態(tài)名。沒有名稱的狀態(tài)是匿名的,但同一張圖中的匿名狀態(tài)是各不相同的。b)內(nèi)部轉(zhuǎn)換分欄用該分欄給出對象在這個狀態(tài)中所執(zhí)行的內(nèi)部動作或活動的列表。各表項的表示法的基本格式為:事件名[‘(’用逗號分隔的參數(shù)表‘)’][監(jiān)護條件]‘/’動作表達式

用戶可以自己對對事件進行命名,只是entry、exit和do這三個保留字外,因為UML已經(jīng)為它們規(guī)定了特定含義8.3.3狀態(tài)機圖

?內(nèi)部轉(zhuǎn)換內(nèi)部轉(zhuǎn)換分欄中的事件的發(fā)生不會導(dǎo)致狀態(tài)的改變,也就是說,即使發(fā)生了事件且執(zhí)行了相應(yīng)的動作,對象仍然處于原來的狀態(tài),故把這樣的事件觸發(fā)的轉(zhuǎn)換稱為內(nèi)部轉(zhuǎn)換。?偽狀態(tài)

初始狀態(tài)是狀態(tài)機圖的缺省開始狀態(tài),終止?fàn)顟B(tài)是狀態(tài)機圖執(zhí)行已經(jīng)畢后的結(jié)束狀態(tài)。8.3.3狀態(tài)機圖?延遲事件延遲事件是指在當(dāng)前狀態(tài)下暫不處理,但將推遲到該對象的另一個狀態(tài)下排隊處理的事件。也就是說,在某些建模情況下,可能想要識別某些事件,但延遲對它們的響應(yīng),直到以后才執(zhí)行。用特殊的動作defer表明一個事件被延遲:

事件/defer

?動作表達式是由一些動作組成的動作序列,見下節(jié)。事件1,事件2,事件3/defer事件2,事件3/defer事件1/………事件3/………事件2,事件4/defer8.3.3狀態(tài)機圖3、動作動作是在狀態(tài)內(nèi)或在狀態(tài)轉(zhuǎn)化時所執(zhí)行的操作,是原子的和即時的。動作可為:設(shè)置或修改本對象的屬性操作;向一個對象發(fā)送信號;調(diào)用另一個對象的一個可見性為公共操作;創(chuàng)建或撤消對象;返回一個值或值集;

……

動作是原子的,是指在與狀態(tài)相關(guān)的抽象層次上,動作是不可間斷的;動作時即時的,是指動作執(zhí)行的時間是可忽略不計的。

在轉(zhuǎn)換中、在狀態(tài)的入口、在一個對象處于一個狀態(tài)的整個期間或在狀態(tài)的出口,都是執(zhí)行動作的時機。8.3.3狀態(tài)機圖UML的三個保留字:1)entry/進入動作表達式

entry這個標(biāo)號標(biāo)識由相應(yīng)的動作表達式規(guī)定的動作,在進入狀態(tài)時首先執(zhí)行該動作。它不能有參數(shù)或監(jiān)護條件。

2)exit/退出動作表達式

exit這個標(biāo)號標(biāo)識由相應(yīng)的動作表達式規(guī)定的動作,在退出狀態(tài)時最后執(zhí)行該動作。它不能有參數(shù)或監(jiān)護條件。

3)do/活動

活動是在對象處于一個狀態(tài)中的整個階段執(zhí)行的一個動作或動作的集合。如:op1(a);op2(b);op3(c)

活動不是原子的,在執(zhí)行中可以被事件打斷。動作是從不中斷的,但動作序列是會中斷的。也即,在每兩個動作之間(由分號分開),由于事件的出現(xiàn),導(dǎo)致一個離開此狀態(tài)的轉(zhuǎn)換。8.3.3狀態(tài)機圖

do這個標(biāo)號標(biāo)識正在進行的活動(“do活動”)?;顒邮且粋€動作表達式,它在執(zhí)行中可以被事件中斷。do活動在狀態(tài)的入口動作執(zhí)行后開始執(zhí)行,并且它與其他的動作或活動是并發(fā)的?!灰唤5膶ο笫窃诋?dāng)前的狀態(tài)中,就執(zhí)行這個活動,直到對象離開該狀態(tài)為止?!鬱o活動執(zhí)行完畢后對象仍處于當(dāng)前狀態(tài),這時會導(dǎo)致一個完成事件,如果存在一條外出的完成轉(zhuǎn)移,若滿足監(jiān)護條件就退出當(dāng)前狀態(tài)?!绻诨顒記]未完成之前,由于外出轉(zhuǎn)換的激發(fā)(滿足監(jiān)護條件)而導(dǎo)致了狀態(tài)的退出,就中斷活動。8.3.3狀態(tài)機圖EnterPasswordentry/password.reset()exit/password.test()digit/handlecharacterclear/password.reset()help/displayhelpprint/deferdo/suppressecho內(nèi)部轉(zhuǎn)換延遲事件內(nèi)部活動入口和出口動作8.3.3狀態(tài)機圖4、狀態(tài)轉(zhuǎn)換

狀態(tài)轉(zhuǎn)換是兩個狀態(tài)之間的一種關(guān)系,表示當(dāng)一個特定事件出現(xiàn)時,如果滿足一定的條件,對象就從第一個狀態(tài)(源狀態(tài))進入第二個狀態(tài)(目標(biāo)狀態(tài)),并執(zhí)行一定的動作。轉(zhuǎn)換本身也是原子的。源狀態(tài)目標(biāo)狀態(tài)事件名[‘(’用逗號分隔的參數(shù)表‘)’][監(jiān)護條件]‘/’動作表達式事件可能有參數(shù),這樣的參數(shù)可由轉(zhuǎn)換中的監(jiān)護條件和動作使用,也可由與源狀態(tài)和目標(biāo)狀態(tài)相關(guān)的退出和進入動作分別使用。觸發(fā)到自身的轉(zhuǎn)換,要先退出當(dāng)前狀態(tài),再進入該狀態(tài),這樣要執(zhí)行退出動作和進入動作。觸發(fā)內(nèi)部轉(zhuǎn)換,不需要退出當(dāng)前狀態(tài)。5、狀態(tài)機圖

一個狀態(tài)機圖描述一個對象在其生命期內(nèi)響應(yīng)事件所經(jīng)歷的狀態(tài)序列,以及對這些事件所做出的反應(yīng)。

通常用狀態(tài)機圖描述類的行為,也可以用它描述其它模型實體(如用況、參與者、子系統(tǒng))的行為。

8.3.3狀態(tài)機圖

initializingActiveidleCommandafter(10秒)/selfTestattentionclearingattentionalarm(s)例題1下圖描述了一個負責(zé)監(jiān)視某些傳感器的控制器的狀態(tài)機。clearing8.3.3狀態(tài)機圖6、組合狀態(tài)上面講述的狀態(tài)機圖中的狀態(tài)都是簡單狀態(tài)。例如,下圖中的狀態(tài)Active是一個組合狀態(tài)。其中DialTone和Timeout等狀態(tài)均為Active的子狀態(tài)。(1)語義

組合狀態(tài)是由兩個或多個子狀態(tài)構(gòu)成的狀態(tài),其中的子狀態(tài)是順序的或并發(fā)的,而且子狀態(tài)還可以是組合狀態(tài)。新創(chuàng)建的對象,從最外層的初始偽狀態(tài)開始,執(zhí)行其最外層的缺省轉(zhuǎn)換。若對象轉(zhuǎn)換到了最外層的終結(jié)狀態(tài),則對象的生命期終止。一個狀態(tài)內(nèi)的各區(qū)域可以有初始偽狀態(tài)和終止?fàn)顟B(tài)。到封閉狀態(tài)的轉(zhuǎn)換表示到其初始偽狀態(tài)的轉(zhuǎn)換。到最終狀態(tài)的轉(zhuǎn)換表示封閉區(qū)域中的活動的完成。在所有并發(fā)區(qū)域中的活動的完成,表示經(jīng)由封閉狀態(tài)的活動的完成,并觸發(fā)封閉狀態(tài)上的完成事件。(2)表示法把組合狀態(tài)展開是為了表示它的內(nèi)部狀態(tài)機結(jié)構(gòu)。除了(可選的)名稱和內(nèi)部轉(zhuǎn)換分欄外,狀態(tài)可以包含容納嵌套圖的附加分欄。通過在圖形區(qū)域里顯示嵌套狀態(tài)機圖,把狀態(tài)展開,表示其不相交(順序)的子狀態(tài)。順序子狀態(tài)示意圖

并發(fā)子狀態(tài)示意圖從帶有并發(fā)組合狀態(tài)內(nèi)的任一狀態(tài)離開的轉(zhuǎn)移導(dǎo)致離開所有的其他并發(fā)區(qū)域。這種轉(zhuǎn)移通常表示有錯誤發(fā)生或例外發(fā)生,從而迫使所有并發(fā)計算都被中斷。用虛線劃分圖形區(qū)域,每個區(qū)域都是一個并發(fā)的子狀態(tài)。每個區(qū)域有一個可選的名稱,但必須包含一張具有不相交狀態(tài)的狀態(tài)機圖。用實線把整個狀態(tài)的名稱分欄和內(nèi)部轉(zhuǎn)換分欄與并發(fā)的子狀態(tài)相分離。建立狀態(tài)機圖對對象的狀態(tài)變遷建模,應(yīng)遵循如下策略: n

設(shè)置狀態(tài)機的語境即要考慮在特定的語境中哪些對象與該對象交互,包括這個對象的類的所有父類和通過依賴或關(guān)聯(lián)到達的所有類。這些鄰居是動作的侯選目標(biāo)或在監(jiān)護條件中包含的侯選項。 n

建立初始狀態(tài)和終止?fàn)顟B(tài)。 n

選定對象中的一組有意義的對對象狀態(tài)有影響的屬性,結(jié)合有關(guān)的事件和動作,對象可能在其中存在各段時間的條件,以決定該對象所在的穩(wěn)定狀態(tài)。 n

在對象的整個生命期中,決定穩(wěn)定狀態(tài)的有意義的偏序。從初態(tài)開始到終態(tài),列出這個對象可能處于的頂層狀態(tài) n

決定這個對象可能響應(yīng)的事件??稍趯ο蟮慕涌谔幇l(fā)現(xiàn)這些事件,并給出一個唯一的名字。這些事件可能觸發(fā)從一個合法狀態(tài)到另一個合法狀態(tài)的轉(zhuǎn)換。

n用被適當(dāng)?shù)氖录|發(fā)的轉(zhuǎn)換將這些狀態(tài)連接起來,接著向這些轉(zhuǎn)換中添加事件、監(jiān)護條件或動作。對于內(nèi)部轉(zhuǎn)換也是如此。 n

識別各狀態(tài)的進入或退出的動作 n如果需要,從這個對象的高層狀態(tài)開始,然后考慮各自的可能子狀態(tài),用子狀態(tài)進行擴充。

n

檢查l

檢查在狀態(tài)機中提到的所有事件是否和該對象接口所期望的事件相匹配。類似地,檢查該對象的接口所期望的所有事件,是否都被狀態(tài)機所處理。l

檢查在狀態(tài)機中提到的所有動作是否被閉合對象的關(guān)系和操作所支持。l

通過狀態(tài)機,跟蹤檢查事件的順序和它們的響應(yīng),尤其要努力地尋找那些未達到的狀態(tài)和導(dǎo)致狀態(tài)機不能走通的狀態(tài)。l在重新安排狀態(tài)機后,按所期望的順序再一次檢查,以確保你沒有改變該對象的語義。

8.3.3狀態(tài)機圖概念與表示法

包是對模型元素分組的機制。使用包的最常見目的是把建模元素組織成為組,作為一個集合進行命名和處理。包可以擁有類、接口、構(gòu)件、節(jié)點、用況和圖,甚至可以是其它包。擁有是一種組成關(guān)系,這意味著被擁有的元素被聲明在包中。如果包被撤消了,元素也要被撤消?!且粋€命名空間,一個元素只能被一個包所擁有。

設(shè)計良好的包,把在語義上接近并傾向于一起變化的元素組織在一起。因此結(jié)構(gòu)良好的包是松耦合、高內(nèi)聚的,而且對其內(nèi)容的訪問具有嚴(yán)密的控制。

8.4建立組織模型——包圖包的層次性因為包中還可以有包,這樣包之間可以有一個層次,且在組織結(jié)構(gòu)上是一棵嚴(yán)格的樹。在實際使用中,最好要避免過深地嵌套包,一般兩、三層即可。對過多的嵌套,要用“引入依賴”來組織包。

類名類名······類名······包名包名包名8.4建立組織模型——包圖對包中

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論