張海藩第10章面向?qū)ο蠓治?ppt_第1頁
張海藩第10章面向?qū)ο蠓治?ppt_第2頁
張海藩第10章面向?qū)ο蠓治?ppt_第3頁
張海藩第10章面向?qū)ο蠓治?ppt_第4頁
張海藩第10章面向?qū)ο蠓治?ppt_第5頁
已閱讀5頁,還剩71頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、10.1 面向?qū)ο蠓治龅幕具^程 10.2 需求陳述 10.3 建立對象模型 10.4 建立動(dòng)態(tài)模型 10.5 建立功能模型 10.6 定義服務(wù) 10.7 小結(jié) 習(xí)題,第10章 面向?qū)ο蠓治?分析的過程都是提取系統(tǒng)需求的過程。分析工作主要包括3項(xiàng)內(nèi)容,這就是理解、表達(dá)和驗(yàn)證。首先,系統(tǒng)分析員通過與用戶及領(lǐng)域?qū)<业某浞纸涣鳎η笸耆斫庥脩粜枨蠛驮搼?yīng)用領(lǐng)域中的關(guān)鍵性的背景知識(shí),并用某種無二義性的方式把這種理解表達(dá)成文檔資料。分析過程得出的最重要的文檔資料是軟件需求規(guī)格說明(在面向?qū)ο蠓治鲋?,主要由對象模型、?dòng)態(tài)模型和功能模型組成)。 顯然,需求分析過程是系統(tǒng)分析員與用戶及領(lǐng)域?qū)<曳磸?fù)交流和多次修

2、正的過程。也就是說,理解和驗(yàn)證的過程通常交替進(jìn)行,反復(fù)迭代,而且往往需要利用原型系統(tǒng)作為輔助工具。 面向?qū)ο蠓治?OOA)的關(guān)鍵是識(shí)別出問題域內(nèi)的類與對象,并分析它們相互間的關(guān)系,最終建立起問題域的簡潔、精確、可理解的正確模型。在用面向?qū)ο笥^點(diǎn)建立起的3種模型中,對象模型是最基本、最重要、最核心的。,面向?qū)ο蠓治觯褪浅槿『驼碛脩粜枨蟛⒔栴}域精確模型的過程。 通常,面向?qū)ο蠓治鲞^程從分析陳述用戶需求的文件開始??赡苡捎脩?包括出資開發(fā)該軟件的業(yè)主代表及最終用戶)單方面寫出需求陳述,也可能由系統(tǒng)分析員配合用戶,共同寫出需求陳述。當(dāng)軟件項(xiàng)目采用招標(biāo)方式確定開發(fā)單位時(shí),“標(biāo)書”往往可以作為初步

3、的需求陳述。 接下來,系統(tǒng)分析員應(yīng)該深入理解用戶需求,抽象出目標(biāo)系統(tǒng)的本質(zhì)屬性,并用模型準(zhǔn)確地表示出來。用自然語言書寫的需求陳述通常是有二義性的,內(nèi)容往往不完整、不一致。分析模型應(yīng)該成為對問題的精確而又簡潔的表示。后繼的設(shè)計(jì)階段將以分析模型為基礎(chǔ)。更重要的是,通過建立分析模型能夠糾正在開發(fā)早期對問題域的誤解。,10.1 面向?qū)ο蠓治龅幕具^程,10.1.1 概述,面向?qū)ο蠼5玫降哪P桶到y(tǒng)的3個(gè)要素,即靜態(tài)結(jié)構(gòu)(對象模型)、交互次序(動(dòng)態(tài)模型)和數(shù)據(jù)變換(功能模型)。解決的問題不同,這3個(gè)子模型的重要程度也不同:幾乎解決任何一個(gè)問題,都需要從客觀世界實(shí)體及實(shí)體間相互關(guān)系抽象出極有價(jià)值的對象

4、模型;當(dāng)問題涉及交互作用和時(shí)序時(shí)(例如,用戶界面及過程控制等),動(dòng)態(tài)模型是重要的;解決運(yùn)算量很大的問題(例如,高級(jí)語言編譯、科學(xué)與工程計(jì)算等),則涉及重要的功能模型。動(dòng)態(tài)模型和功能模型中都包含了對象模型中的操作(即服務(wù)或方法)。,10.1.2 3個(gè)子模型與5個(gè)層次,復(fù)雜問題(大型系統(tǒng))的對象模型通常由下述5個(gè)層次組成: 主題層、類與對象層、結(jié)構(gòu)層、屬性層和服務(wù)層,如圖10.1所示。 這5個(gè)層次很像疊在一起的5張透明塑料片,它們一層比一層顯現(xiàn)出對象模型的更多細(xì)節(jié)。在概念上,這5個(gè)層次是整個(gè)模型的5張水平切片。,圖10.1 復(fù)雜問題的對象模型的5個(gè)層次,首先,面向?qū)ο蠓治鐾ㄟ^控制讀者能見到的層次數(shù)

5、目來控制可見性。其次,面向?qū)ο蠓治鲈黾恿艘粋€(gè)主題層,它可以從一個(gè)相當(dāng)高的層次描述總體模型,并對讀者的注意力加以指導(dǎo)。 上述5個(gè)層次對應(yīng)著在面向?qū)ο蠓治鲞^程中建立對象模型的5項(xiàng)主要活動(dòng):找出類與對象,識(shí)別結(jié)構(gòu),識(shí)別主題,定義屬性,定義服務(wù)。必須強(qiáng)調(diào)指出的是,我們說的是“5項(xiàng)活動(dòng)”,而沒有說5個(gè)步驟,事實(shí)上,這5項(xiàng)工作完全沒有必要順序完成,也無須徹底完成一項(xiàng)工作以后再開始另外一項(xiàng)工作。 綜上所述,在概念上可以認(rèn)為,面向?qū)ο蠓治龃篌w上按照下列順序進(jìn)行:尋找類與對象,識(shí)別結(jié)構(gòu),識(shí)別主題,定義屬性,建立動(dòng)態(tài)模型,建立功能模型,定義服務(wù)。,需求陳述的內(nèi)容包括:問題范圍,功能需求,性能需求,應(yīng)用環(huán)境及假設(shè)條

6、件等。總之,需求陳述應(yīng)該闡明“做什么”而不是“怎樣做”。它應(yīng)該描述用戶的需求而不是提出解決問題的方法。應(yīng)該指出哪些是系統(tǒng)必要的性質(zhì),哪些是任選的性質(zhì)。 需求陳述可簡可繁。對人們熟悉的傳統(tǒng)問題的陳述,可能相當(dāng)詳細(xì),相反,對陌生領(lǐng)域項(xiàng)目的需求,開始時(shí)可能寫不出具體細(xì)節(jié)。 書寫需求陳述時(shí),要盡力做到語法正確,而且應(yīng)該慎重選用名詞、動(dòng)詞、形容詞和同義詞。,10.2 需求陳述 10.2.1 書寫要點(diǎn),圖10.2所示的自動(dòng)取款機(jī)(ATM)系統(tǒng),是本書講述面向?qū)ο蠓治龊兔嫦驅(qū)ο笤O(shè)計(jì)時(shí)使用的一個(gè)實(shí)例。 某銀行擬開發(fā)一個(gè)自動(dòng)取款機(jī)系統(tǒng),它是一個(gè)由自動(dòng)取款機(jī)、中央計(jì)算機(jī)、分行計(jì)算機(jī)及柜員終端組成的網(wǎng)絡(luò)系統(tǒng)。ATM

7、和中央計(jì)算機(jī)由總行投資購買??傂袚碛卸嗯_(tái)ATM,分別設(shè)在全市各主要街道上。分行負(fù)責(zé)提供分行計(jì)算機(jī)和柜員終端。柜員終端設(shè)在分行營業(yè)廳及分行下屬的各個(gè)儲(chǔ)蓄所內(nèi)。該系統(tǒng)的軟件開發(fā)成本由各個(gè)分行分?jǐn)偂?10.2.2 例子,圖10.2 ATM系統(tǒng),銀行柜員使用柜員終端處理儲(chǔ)戶提交的儲(chǔ)蓄事務(wù)。儲(chǔ)戶可以用現(xiàn)金或支票向自己擁有的某個(gè)賬戶內(nèi)存款或開新賬戶。儲(chǔ)戶也可以從自己的賬戶中取款。通常,一個(gè)儲(chǔ)戶可能擁有多個(gè)賬戶。柜員負(fù)責(zé)把儲(chǔ)戶提交的存款或取款事務(wù)輸進(jìn)柜員終端,接收儲(chǔ)戶交來的現(xiàn)金或支票,或付給儲(chǔ)戶現(xiàn)金。柜員終端與相應(yīng)的分行計(jì)算機(jī)通信,分行計(jì)算機(jī)具體處理針對某個(gè)賬戶的事務(wù)并且維護(hù)賬戶。 擁有銀行賬戶的儲(chǔ)戶有權(quán)申

8、請領(lǐng)取現(xiàn)金兌換卡。使用現(xiàn)金兌換卡可以通過ATM訪問自己的賬戶。目前僅限于用現(xiàn)金兌換卡在ATM上提取現(xiàn)金(即取款),或查詢有關(guān)自己賬戶的信息(例如,某個(gè)指定賬戶上的余額)。將來可能還要求使用ATM辦理轉(zhuǎn)賬、存款等事務(wù)。,所謂現(xiàn)金兌換卡就是一張?zhí)刂频拇趴?,上面有分行代碼和卡號(hào)。分行代碼惟一標(biāo)識(shí)總行下屬的一個(gè)分行,卡號(hào)確定了這張卡可以訪問哪些賬戶。通常,一張卡可以訪問儲(chǔ)戶的若干個(gè)賬戶,但是不一定能訪問這個(gè)儲(chǔ)戶的全部賬戶。每張現(xiàn)金兌換卡僅屬于一個(gè)儲(chǔ)戶所有,但是,同一張卡可能有多個(gè)副本,因此,必須考慮同時(shí)在若干臺(tái)ATM上使用同樣的現(xiàn)金兌換卡的可能性。也就是說,系統(tǒng)應(yīng)該能夠處理并發(fā)的訪問。 當(dāng)用戶把現(xiàn)金兌

9、換卡插入ATM之后,ATM就與用戶交互,以獲取有關(guān)這次事務(wù)的信息,并與中央計(jì)算機(jī)交換關(guān)于事務(wù)的信息。首先,ATM要求用戶輸入密碼,接下來ATM把從這張卡上讀到的信息以及用戶輸入的密碼傳給中央計(jì)算機(jī),請求中央計(jì)算機(jī)核對這些信息并處理這次事務(wù)。中央計(jì)算機(jī)根據(jù)卡上的分行代碼確定這次事務(wù)與分行的對應(yīng)關(guān)系,并且委托相應(yīng)的分行計(jì)算機(jī)驗(yàn)證用戶密碼。如果用戶輸入的密碼是正確的,ATM就要求用戶選擇事務(wù)類型(取款、查詢等)。當(dāng)用戶選擇取款時(shí),ATM請求用戶輸入取款額。最后,ATM從現(xiàn)金出口吐出現(xiàn)金,并且打印出賬單交給用戶。,面向?qū)ο蠓治鍪滓墓ぷ?,是建立問題域的對象模型。這個(gè)模型描述了現(xiàn)實(shí)世界中的“類與對象”以

10、及它們之間的關(guān)系,表示了目標(biāo)系統(tǒng)的靜態(tài)數(shù)據(jù)結(jié)構(gòu)。靜態(tài)數(shù)據(jù)結(jié)構(gòu)對應(yīng)用細(xì)節(jié)依賴較少,比較容易確定;當(dāng)用戶的需求變化時(shí),靜態(tài)數(shù)據(jù)結(jié)構(gòu)相對來說比較穩(wěn)定。因此,用面向?qū)ο蠓椒ㄩ_發(fā)絕大多數(shù)軟件時(shí),都首先建立對象模型,然后再建立另外兩個(gè)子模型。 需求陳述、應(yīng)用領(lǐng)域的專業(yè)知識(shí)以及關(guān)于客觀世界的常識(shí),是建立對象模型時(shí)的主要信息來源。 對象模型通常有5個(gè)層次。典型的工作步驟是: 首先確定對象類和關(guān)聯(lián)(因?yàn)樗鼈冇绊懴到y(tǒng)整體結(jié)構(gòu)和解決問題的方法),對于大型復(fù)雜問題還要進(jìn)一步劃分出若干個(gè)主題;然后給類和關(guān)聯(lián)增添屬性,以進(jìn)一步描述它們;接下來利用適當(dāng)?shù)睦^承關(guān)系進(jìn)一步合并和組織類。而對類中操作的最后確定,則需等到建立了動(dòng)態(tài)

11、模型和功能模型之后,因?yàn)檫@兩個(gè)子模型更準(zhǔn)確地描述了對類中提供的服務(wù)的需求。,10.3 建立對象模型,類與對象是在問題域中客觀存在的,系統(tǒng)分析員的主要任務(wù)就是通過分析找出這些類與對象。首先找出所有候選的類與對象,然后從候選的類與對象中篩選掉不正確的或不必要的。 1. 找出候選的類與對象 對象是對問題域中有意義的事物的抽象,它們既可能是物理實(shí)體,也可能是抽象概念。具體地說,大多數(shù)客觀事物可分為下述5類:,10.3.1 確定類與對象,(1) 可感知的物理實(shí)體,例如,飛機(jī)、汽車、書、房屋等等。 (2) 人或組織的角色,例如,醫(yī)生、教師、雇主、雇員、計(jì)算機(jī)系、財(cái)務(wù)處等等。 (3) 應(yīng)該記憶的事件,例如,

12、飛行、演出、訪問、交通事故等等。 (4) 兩個(gè)或多個(gè)對象的相互作用,通常具有交易或接觸的性質(zhì),例如,購買、納稅、結(jié)婚等等。 (5) 需要說明的概念,例如,政策、保險(xiǎn)政策、版權(quán)法等等。 在分析所面臨的問題時(shí),可以參照上列5類常見事物,找出在當(dāng)前問題域中的候選類與對象。,下面以ATM系統(tǒng)為例,說明非正式分析過程。認(rèn)真閱讀10.2.2節(jié)給出的需求陳述,從陳述中找出下列名詞,可以把它們作為類與對象的初步的候選者: 銀行,自動(dòng)取款機(jī)(ATM),系統(tǒng),中央計(jì)算機(jī),分行計(jì)算機(jī),柜員終端,網(wǎng)絡(luò),總行,分行,軟件,成本,市,街道,營業(yè)廳,儲(chǔ)蓄所,柜員,儲(chǔ)戶,現(xiàn)金,支票,賬戶,事務(wù),現(xiàn)金兌換卡,余額,磁卡,分行代

13、碼,卡號(hào),用戶,副本,信息,密碼,類型,取款額,賬單,訪問。 通常,在需求陳述中不會(huì)一個(gè)不漏地寫出問題域中所有有關(guān)的類與對象,因此,分析員應(yīng)該根據(jù)領(lǐng)域知識(shí)或常識(shí)進(jìn)一步把隱含的類與對象提取出來。例如,在ATM系統(tǒng)的需求陳述中雖然沒寫“通信鏈路”和“事務(wù)日志”,但是,根據(jù)領(lǐng)域知識(shí)和常識(shí)可以知道,在ATM系統(tǒng)中應(yīng)該包含這兩個(gè)實(shí)體。,2. 篩選出正確的類與對象 顯然,僅通過一個(gè)簡單、機(jī)械的過程不可能正確地完成分析工作。非正式分析僅僅幫助我們找到一些候選的類與對象,接下來應(yīng)該嚴(yán)格考察每個(gè)候選對象,從中去掉不正確的或不必要的,僅保留確實(shí)應(yīng)該記錄其信息或需要其提供服務(wù)的那些對象。 篩選時(shí)主要依據(jù)下列標(biāo)準(zhǔn),刪

14、除不正確或不必要的類與對象: (1) 冗余 如果兩個(gè)類表達(dá)了同樣的信息,則應(yīng)該保留在此問題域中最富于描述力的名稱。 以ATM系統(tǒng)為例,上面用非正式分析法得出了34個(gè)候選的類,其中儲(chǔ)戶與用戶,現(xiàn)金兌換卡與磁卡及副本分別描述了相同的兩類信息,因此,應(yīng)該去掉“用戶”、“磁卡”、“副本”等冗余的類,僅保留“儲(chǔ)戶”和“現(xiàn)金兌換卡”這兩個(gè)類。,(2) 無關(guān) 現(xiàn)實(shí)世界中存在許多對象,不能把它們都納入到系統(tǒng)中去,僅需要把與本問題密切相關(guān)的類與對象放進(jìn)目標(biāo)系統(tǒng)中。有些類在其他問題中可能很重要,但與當(dāng)前要解決的問題無關(guān),同樣也應(yīng)該把它們刪掉。 以ATM系統(tǒng)為例,這個(gè)系統(tǒng)并不處理分?jǐn)傑浖_發(fā)成本的問題,而且ATM和

15、柜員終端放置的地點(diǎn)與本軟件的關(guān)系也不大。因此,應(yīng)該去掉候選類“成本”、“市”、“街道”、“營業(yè)廳”和“儲(chǔ)蓄所”。 (3) 籠統(tǒng) 在需求陳述中常常使用一些籠統(tǒng)的、泛指的名詞,雖然在初步分析時(shí)把它們作為候選的類與對象列出來了,但是,要么系統(tǒng)無須記憶有關(guān)它們的信息,要么在需求陳述中有更明確更具體的名詞對應(yīng)它們所暗示的事務(wù),因此,通常把這些籠統(tǒng)的或模糊的類去掉。 以ATM系統(tǒng)為例,“銀行”實(shí)際指總行或分行,“訪問”在這里實(shí)際指事務(wù),“信息”的具體內(nèi)容在需求陳述中隨后就指明了。此外還有一些籠統(tǒng)含糊的名詞??傊?,在本例中應(yīng)該去掉“銀行”、“網(wǎng)絡(luò)”、“系統(tǒng)”、“軟件”、“信息”、“訪問”等候選類。,(4)

16、屬性 在需求陳述中有些名詞實(shí)際上描述的是其他對象的屬性,應(yīng)該把這些名詞從候選類與對象中去掉。當(dāng)然,如果某個(gè)性質(zhì)具有很強(qiáng)的獨(dú)立性,則應(yīng)把它作為類而不是作為屬性。 在ATM系統(tǒng)的例子中,“現(xiàn)金”、“支票”、“取款額”、“賬單”、“余額”、“分行代碼”、“卡號(hào)”、“密碼”、“類型”等,實(shí)際上都應(yīng)該作為屬性對待。 (5) 操作 在需求陳述中有時(shí)可能使用一些既可作為名詞,又可作為動(dòng)詞的詞,應(yīng)該慎重考慮它們在本問題中的含義,以便正確地決定把它們作為類還是作為類中定義的操作。 例如,談到電話時(shí)通常把“撥號(hào)”當(dāng)作動(dòng)詞,當(dāng)構(gòu)造電話模型時(shí)確實(shí)應(yīng)該把它作為一個(gè)操作,而不是一個(gè)類。但是,在開發(fā)電話的自動(dòng)記賬系統(tǒng)時(shí),“

17、撥號(hào)”需要有自己的屬性(例如日期、時(shí)間、受話地點(diǎn)等),因此應(yīng)該把它作為一個(gè)類??傊?,本身具有屬性需獨(dú)立存在的操作,應(yīng)該作為類與對象。,(6) 實(shí)現(xiàn) 在分析階段不應(yīng)該過早地考慮怎樣實(shí)現(xiàn)目標(biāo)系統(tǒng)。因此,應(yīng)該去掉僅和實(shí)現(xiàn)有關(guān)的候選的類與對象。在設(shè)計(jì)和實(shí)現(xiàn)階段,這些類與對象可能是重要的,但在分析階段過早地考慮它們反而會(huì)分散我們的注意力。 在ATM系統(tǒng)的例子中,“事務(wù)日志”無非是對一系列事務(wù)的記錄,它的確切表示方式是面向?qū)ο笤O(shè)計(jì)的議題;“通信鏈路”在邏輯上是一種聯(lián)系,在系統(tǒng)實(shí)現(xiàn)時(shí)它是關(guān)聯(lián)類的物理實(shí)現(xiàn)。總之,應(yīng)該暫時(shí)去掉 “事務(wù)日志”和“通信鏈路”這兩個(gè)類,在設(shè)計(jì)或?qū)崿F(xiàn)時(shí)再考慮它們。 綜上所述,在ATM系

18、統(tǒng)的例子中,經(jīng)過初步篩選,剩下下列類與對象:ATM、中央計(jì)算機(jī)、分行計(jì)算機(jī)、柜員終端、總行、分行、柜員、儲(chǔ)戶、賬戶、事務(wù)、現(xiàn)金兌換卡。,多數(shù)人習(xí)慣于在初步分析確定了問題域中的類與對象之后,接下來就分析確定類與對象之間存在的關(guān)聯(lián)關(guān)系。 兩個(gè)或多個(gè)對象之間的相互依賴、相互作用的關(guān)系就是關(guān)聯(lián)。分析確定關(guān)聯(lián),能促使分析員考慮問題域的邊緣情況,有助于發(fā)現(xiàn)那些尚未被發(fā)現(xiàn)的類與對象。 在分析確定關(guān)聯(lián)的過程中,不必花過多的精力去區(qū)分關(guān)聯(lián)和聚集。事實(shí)上,聚集不過是一種特殊的關(guān)聯(lián),是關(guān)聯(lián)的一個(gè)特例。,10.3.2 確定關(guān)聯(lián),1. 初步確定關(guān)聯(lián) 在需求陳述中使用的描述性動(dòng)詞或動(dòng)詞詞組,通常表示關(guān)聯(lián)關(guān)系。因此,在初步

19、確定關(guān)聯(lián)時(shí),大多數(shù)關(guān)聯(lián)可以通過直接提取需求陳述中的動(dòng)詞詞組而得出。通過分析需求陳述,還能發(fā)現(xiàn)一些在陳述中隱含的關(guān)聯(lián)。最后,分析員還應(yīng)該與用戶及領(lǐng)域?qū)<矣懻搯栴}域?qū)嶓w間的相互依賴、相互作用關(guān)系,根據(jù)領(lǐng)域知識(shí)再進(jìn)一步補(bǔ)充一些關(guān)聯(lián)。 以ATM系統(tǒng)為例,經(jīng)過分析初步確定出下列關(guān)聯(lián):,(1) 直接提取動(dòng)詞短語得出的關(guān)聯(lián) ATM、中央計(jì)算機(jī)、分行計(jì)算機(jī)及柜員終端組成網(wǎng)絡(luò)。 總行擁有多臺(tái)ATM。 ATM設(shè)在主要街道上。 分行提供分行計(jì)算機(jī)和柜員終端。 柜員終端設(shè)在分行營業(yè)廳及儲(chǔ)蓄所內(nèi)。 分行分?jǐn)傑浖_發(fā)成本。,儲(chǔ)戶擁有賬戶。 分行計(jì)算機(jī)處理針對賬戶的事務(wù)。 分行計(jì)算機(jī)維護(hù)賬戶。 柜員終端與分行計(jì)算機(jī)通信。

20、柜員輸入針對賬戶的事務(wù)。 ATM與中央計(jì)算機(jī)交換關(guān)于事務(wù)的信息。 中央計(jì)算機(jī)確定事務(wù)與分行的對應(yīng)關(guān)系。 ATM讀現(xiàn)金兌換卡。 ATM與用戶交互。 ATM吐出現(xiàn)金。 ATM打印賬單。 系統(tǒng)處理并發(fā)的訪問。,(2) 需求陳述中隱含的關(guān)聯(lián) 總行由各個(gè)分行組成。 分行保管賬戶。 總行擁有中央計(jì)算機(jī)。 系統(tǒng)維護(hù)事務(wù)日志。 系統(tǒng)提供必要的安全性。 儲(chǔ)戶擁有現(xiàn)金兌換卡。 (3) 根據(jù)問題域知識(shí)得出的關(guān)聯(lián) 現(xiàn)金兌換卡訪問賬戶。 分行雇用柜員。,2. 篩選 經(jīng)初步分析得出的關(guān)聯(lián)只能作為候選的關(guān)聯(lián),還需經(jīng)過進(jìn)一步篩選,以去掉不正確的或不必要的關(guān)聯(lián)。篩選時(shí)主要根據(jù)下述標(biāo)準(zhǔn)刪除候選的關(guān)聯(lián): (1) 已刪去的類之間的關(guān)

21、聯(lián) 如果在分析確定類與對象的過程中已經(jīng)刪掉了某個(gè)候選類,則與這個(gè)類有關(guān)的關(guān)聯(lián)也應(yīng)該刪去,或用其他類重新表達(dá)這個(gè)關(guān)聯(lián)。 以ATM系統(tǒng)為例,由于已經(jīng)刪去了“系統(tǒng)”、“網(wǎng)絡(luò)”、“市”、“街道”、“成本”、“軟件”、“事務(wù)日志”、“現(xiàn)金”、“營業(yè)廳”、“儲(chǔ)蓄所”、“賬單”等候選類,因此,與這些類有關(guān)的下列8個(gè)關(guān)聯(lián)也應(yīng)該刪去:, ATM、中央計(jì)算機(jī)、分行計(jì)算機(jī)及柜員終端組成網(wǎng)絡(luò)。 ATM設(shè)在主要街道上。 分行分?jǐn)傑浖_發(fā)成本。 系統(tǒng)提供必要的安全性。 系統(tǒng)維護(hù)事務(wù)日志。 ATM吐出現(xiàn)金。 ATM打印賬單。 柜員終端設(shè)在分行營業(yè)廳及儲(chǔ)蓄所內(nèi)。,(2) 與問題無關(guān)的或應(yīng)在實(shí)現(xiàn)階段考慮的關(guān)聯(lián) 應(yīng)該把處在本問題

22、域之外的關(guān)聯(lián)或與實(shí)現(xiàn)密切相關(guān)的關(guān)聯(lián)刪去。 例如,在ATM系統(tǒng)的例子中,“系統(tǒng)處理并發(fā)的訪問”并沒有標(biāo)明對象之間的新關(guān)聯(lián),它只不過提醒我們在實(shí)現(xiàn)階段需要使用實(shí)現(xiàn)并發(fā)訪問的算法,以處理并發(fā)事務(wù)。 (3) 瞬時(shí)事件 關(guān)聯(lián)應(yīng)該描述問題域的靜態(tài)結(jié)構(gòu),而不應(yīng)該是一個(gè)瞬時(shí)事件。 以ATM系統(tǒng)為例,“ATM讀現(xiàn)金兌換卡”描述了ATM與用戶交互周期中的一個(gè)動(dòng)作,它并不是ATM與現(xiàn)金兌換卡之間的固有關(guān)系,因此應(yīng)該刪去。類似地,還應(yīng)該刪去“ATM與用戶交互”這個(gè)候選的關(guān)聯(lián)。 如果用動(dòng)作表述的需求隱含了問題域的某種基本結(jié)構(gòu),則應(yīng)該用適當(dāng)?shù)膭?dòng)詞詞組重新表示這個(gè)關(guān)聯(lián)。例如,在ATM系統(tǒng)的需求陳述中,“中央計(jì)算機(jī)確定事務(wù)與

23、分行的對應(yīng)關(guān)系”隱含了結(jié)構(gòu)上“中央計(jì)算機(jī)與分行通信”的關(guān)系。,(4) 三元關(guān)聯(lián) 三個(gè)或三個(gè)以上對象之間的關(guān)聯(lián),大多可以分解為二元關(guān)聯(lián)或用詞組描述成限定的關(guān)聯(lián)。 在ATM系統(tǒng)的例子中,“柜員輸入針對賬戶的事務(wù)”可以分解成“柜員輸入事務(wù)”和“事務(wù)修改賬戶”這樣兩個(gè)二元關(guān)聯(lián)。而“分行計(jì)算機(jī)處理針對賬戶的事務(wù)”也可以做類似的分解?!癆TM與中央計(jì)算機(jī)交換關(guān)于事務(wù)的信息”這個(gè)候選的關(guān)聯(lián),實(shí)際上隱含了“ATM與中央計(jì)算機(jī)通信”和“在ATM上輸入事務(wù)”這兩個(gè)二元關(guān)聯(lián)。 (5) 派生關(guān)聯(lián) 應(yīng)該去掉那些可以用其他關(guān)聯(lián)定義的冗余關(guān)聯(lián)。 例如,在ATM系統(tǒng)的例子中,“總行擁有多臺(tái)ATM”實(shí)質(zhì)上是“總行擁有中央計(jì)算機(jī)

24、”和“ATM與中央計(jì)算機(jī)通信”這兩個(gè)關(guān)聯(lián)組合的結(jié)果。而“分行計(jì)算機(jī)維護(hù)賬戶”的實(shí)際含義是“分行保管賬戶”和“事務(wù)修改賬戶”。,3. 進(jìn)一步完善 應(yīng)該進(jìn)一步完善經(jīng)篩選后余下的關(guān)聯(lián),通常從下述幾個(gè)方面進(jìn)行改進(jìn): (1) 正名 好的名字是幫助讀者理解的關(guān)鍵因素之一。因此,應(yīng)該仔細(xì)選擇含義更明確的名字作為關(guān)聯(lián)名。 例如,“分行提供分行計(jì)算機(jī)和柜員終端”不如改為“分行擁有分行計(jì)算機(jī)”和“分行擁有柜員終端”。 (2) 分解 為了能夠適用于不同的關(guān)聯(lián),必要時(shí)應(yīng)該分解以前確定的類與對象。 例如,在ATM系統(tǒng)中,應(yīng)該把“事務(wù)”分解成“遠(yuǎn)程事務(wù)”和“柜員事務(wù)”。,(3) 補(bǔ)充 發(fā)現(xiàn)了遺漏的關(guān)聯(lián)就應(yīng)該及時(shí)補(bǔ)上。 例

25、如,在ATM系統(tǒng)中把“事務(wù)”分解成上述兩類之后,需要補(bǔ)充“柜員輸入柜員事務(wù)”、“柜員事務(wù)輸進(jìn)柜員終端”、“在ATM上輸入遠(yuǎn)程事務(wù)”和“遠(yuǎn)程事務(wù)由現(xiàn)金兌換卡授權(quán)”等關(guān)聯(lián)。 (4) 標(biāo)明重?cái)?shù) 應(yīng)該初步判定各個(gè)關(guān)聯(lián)的類型,并粗略地確定關(guān)聯(lián)的重?cái)?shù)。但是,無須為此花費(fèi)過多精力,因?yàn)樵诜治鲞^程中隨著認(rèn)識(shí)的逐漸深入,重?cái)?shù)也會(huì)經(jīng)常改動(dòng)。 圖10.3是經(jīng)上述分析過程之后得出的ATM系統(tǒng)原始的類圖。,圖10.3 ATM系統(tǒng)原始的類圖,在開發(fā)大型、復(fù)雜系統(tǒng)的過程中,為了降低復(fù)雜程度,人們習(xí)慣于把系統(tǒng)再進(jìn)一步劃分成幾個(gè)不同的主題,也就是在概念上把系統(tǒng)包含的內(nèi)容分解成若干個(gè)范疇。 在開發(fā)很小的系統(tǒng)時(shí),可能根本無須引入主

26、題層;對于含有較多對象的系統(tǒng),則往往先識(shí)別出類與對象和關(guān)聯(lián),然后劃分主題,并用它作為指導(dǎo)開發(fā)者和用戶觀察整個(gè)模型的一種機(jī)制;對于規(guī)模極大的系統(tǒng),則首先由高級(jí)分析員粗略地識(shí)別對象和關(guān)聯(lián),然后初步劃分主題,經(jīng)進(jìn)一步分析,對系統(tǒng)結(jié)構(gòu)有更深入的了解之后,再進(jìn)一步修改和精煉主題。,10.3.3 劃分主題,應(yīng)該按問題領(lǐng)域而不是用功能分解方法來確定主題。此外,應(yīng)該按照使不同主題內(nèi)的對象相互間依賴和交互最少的原則來確定主題。 以ATM系統(tǒng)為例,可以把它劃分成總行(包含總行和中央計(jì)算機(jī)這兩個(gè)類)、分行(包含分行、分行計(jì)算機(jī)、柜員終端、柜員事務(wù)、柜員和賬戶等類)和ATM(包含ATM、遠(yuǎn)程事務(wù)、現(xiàn)金兌換卡和儲(chǔ)戶等類

27、)等3個(gè)主題。事實(shí)上,我們描述的是一個(gè)簡化的ATM系統(tǒng),為了簡單起見,在下面討論這個(gè)例子時(shí)將忽略主題層。,屬性是對象的性質(zhì),藉助于屬性我們能對類與對象和結(jié)構(gòu)有更深入更具體的認(rèn)識(shí)。注意,在分析階段不要用屬性來表示對象間的關(guān)系,使用關(guān)聯(lián)能夠表示兩個(gè)對象間的任何關(guān)系,而且把關(guān)系表示得更清晰、更醒目。 一般說來,確定屬性的過程包括分析和選擇兩個(gè)步驟。 1. 分析 通常,在需求陳述中用名詞詞組表示屬性,例如,“汽車的顏色”或“光標(biāo)的位置”。往往用形容詞表示可枚舉的具體屬性,例如,“紅色的”、“打開的”。但是,不可能在需求陳述中找到所有屬性,分析員還必須藉助于領(lǐng)域知識(shí)和常識(shí)才能分析得出需要的屬性。幸運(yùn)的是

28、,屬性對問題域的基本結(jié)構(gòu)影響很小。隨著時(shí)間的推移,問題域中的類始終保持穩(wěn)定,屬性卻可能改變了,相應(yīng)地,類中方法的復(fù)雜程度也將改變。,10.3.4 確定屬性,屬性的確定既與問題域有關(guān),也和目標(biāo)系統(tǒng)的任務(wù)有關(guān)。應(yīng)該僅考慮與具體應(yīng)用直接相關(guān)的屬性,不要考慮那些超出所要解決的問題范圍的屬性。在分析過程中應(yīng)該首先找出最重要的屬性,以后再逐漸把其余屬性增添進(jìn)去。在分析階段不要考慮那些純粹用于實(shí)現(xiàn)的屬性。 2. 選擇 認(rèn)真考察經(jīng)初步分析而確定下來的那些屬性,從中刪掉不正確的或不必要的屬性。通常有以下幾種常見情況: (1) 誤把對象當(dāng)作屬性 如果某個(gè)實(shí)體的獨(dú)立存在比它的值更重要,則應(yīng)把它作為一個(gè)對象而不是對象

29、的屬性。在具體應(yīng)用領(lǐng)域中具有自身性質(zhì)的實(shí)體,必然是對象。同一個(gè)實(shí)體在不同應(yīng)用領(lǐng)域中,到底應(yīng)該作為對象還是屬性,需要具體分析才能確定。例如,在郵政目錄中,“城市”是一個(gè)屬性,而在人口普查中卻應(yīng)該把“城市”當(dāng)作對象。,(2) 誤把關(guān)聯(lián)類的屬性當(dāng)作一般對象的屬性 如果某個(gè)性質(zhì)依賴于某個(gè)關(guān)聯(lián)鏈的存在,則該性質(zhì)是關(guān)聯(lián)類的屬性,在分析階段不應(yīng)該把它作為一般對象的屬性。特別是在多對多關(guān)聯(lián)中,關(guān)聯(lián)類屬性很明顯,即使在以后的開發(fā)階段中,也不能把它歸并成相互關(guān)聯(lián)的兩個(gè)對象中任一個(gè)的屬性。 (3) 把限定誤當(dāng)成屬性 正如9.4.2節(jié)所述,正確使用限定詞往往可以減少關(guān)聯(lián)的重?cái)?shù)。如果把某個(gè)屬性值固定下來以后能減少關(guān)聯(lián)的

30、重?cái)?shù),則應(yīng)該考慮把這個(gè)屬性重新表述成一個(gè)限定詞。在ATM系統(tǒng)的例子中,“分行代碼”、“賬號(hào)”、“雇員號(hào)”、“站號(hào)”等都是限定詞。,(4) 誤把內(nèi)部狀態(tài)當(dāng)成了屬性 如果某個(gè)性質(zhì)是對象的非公開的內(nèi)部狀態(tài),則應(yīng)該從對象模型中刪掉這個(gè)屬性。 (5) 過于細(xì)化 在分析階段應(yīng)該忽略那些對大多數(shù)操作都沒有影響的屬性。 (6) 存在不一致的屬性 類應(yīng)該是簡單而且一致的。如果得出一些看起來與其他屬性毫不相關(guān)的屬性,則應(yīng)該考慮把該類分解成兩個(gè)不同的類。 經(jīng)過篩選之后,得到ATM系統(tǒng)中各個(gè)類的屬性,如圖10.4(見書235頁)所示。,圖10.4ATM系統(tǒng)對象模型中的屬性,確定了類中應(yīng)該定義的屬性之后,就可以利用繼承

31、機(jī)制共享公共性質(zhì),并對系統(tǒng)中眾多的類加以組織。正如以前曾經(jīng)強(qiáng)調(diào)指出過的,繼承關(guān)系的建立實(shí)質(zhì)上是知識(shí)抽取過程,它應(yīng)該反映出一定深度的領(lǐng)域知識(shí),因此必須有領(lǐng)域?qū)<颐芮信浜喜拍芡瓿?。通常,許多歸納關(guān)系都是根據(jù)客觀世界現(xiàn)有的分類模式建立起來的,只要可能,就應(yīng)該使用現(xiàn)有的概念。,10.3.5 識(shí)別繼承關(guān)系,一般說來,可以使用兩種方式建立繼承(即泛化)關(guān)系: 自底向上: 抽象出現(xiàn)有類的共同性質(zhì)泛化出父類,這個(gè)過程實(shí)質(zhì)上模擬了人類歸納思維過程。例如,在ATM系統(tǒng)中,“遠(yuǎn)程事務(wù)”和“柜員事務(wù)”是類似的,可以泛化出父類“事務(wù)”;類似地,可以從“ATM”和“柜員終端”泛化出父類“輸入站”。 (2) 自頂向下: 把

32、現(xiàn)有類細(xì)化成更具體的子類,這模擬了人類的演繹思維過程。從應(yīng)用域中常常能明顯看出應(yīng)該做的自頂向下的具體化工作。例如,帶有形容詞修飾的名詞詞組往往暗示了一些具體類。但是,在分析階段應(yīng)該避免過度細(xì)化。 利用多重繼承可以提高共享程度,但是同時(shí)也增加了概念上以及實(shí)現(xiàn)時(shí)的復(fù)雜程度。使用多重繼承機(jī)制時(shí),通常應(yīng)該指定一個(gè)主要父類,從它繼承大部分屬性和行為;次要父類只補(bǔ)充一些屬性和行為。,僅僅經(jīng)過一次建模過程很難得到完全正確的對象模型。事實(shí)上,軟件開發(fā)過程就是一個(gè)多次反復(fù)修改、逐步完善的過程。在建模的任何一個(gè)步驟中,如果發(fā)現(xiàn)了模型的缺陷,都必須返回到前期階段進(jìn)行修改。由于面向?qū)ο蟮母拍詈头?hào)在整個(gè)開發(fā)過程中都是

33、一致的,因此遠(yuǎn)比使用結(jié)構(gòu)分析、設(shè)計(jì)技術(shù)更容易實(shí)現(xiàn)反復(fù)修改、逐步完善的過程。 實(shí)際上,有些細(xì)化工作(例如,定義服務(wù))是在建立了動(dòng)態(tài)模型和功能模型之后才進(jìn)行的。 在實(shí)際工作中,建模的步驟并不一定嚴(yán)格按照前面講述的次序進(jìn)行。分析員可以合并幾個(gè)步驟的工作放在一起完成,也可以按照自己的習(xí)慣交換前述各項(xiàng)工作的次序,還可以先初步完成幾項(xiàng)工作,再返回來加以完善。但是,如果你是初次接觸面向?qū)ο蠓椒?,則最好先按本書所述次序,嘗試用面向?qū)ο蠓椒?,開發(fā)幾個(gè)較小的系統(tǒng),取得一些實(shí)踐經(jīng)驗(yàn)后,再總結(jié)出更適合自己的工作方式。,10.3.6 反復(fù)修改,1. 分解“現(xiàn)金兌換卡”類 實(shí)際上,“現(xiàn)金兌換卡”有兩個(gè)相對獨(dú)立的功能,它既

34、是鑒別儲(chǔ)戶使用ATM的權(quán)限的卡,又是ATM獲得分行代碼和卡號(hào)等數(shù)據(jù)的數(shù)據(jù)載體。因此,把“現(xiàn)金兌換卡”類分解為“卡權(quán)限”和“現(xiàn)金兌換卡”兩個(gè)類,將使每個(gè)類的功能更單一:前一個(gè)類標(biāo)志儲(chǔ)戶訪問賬戶的權(quán)限,后一個(gè)類是含有分行代碼和卡號(hào)的數(shù)據(jù)載體。多張現(xiàn)金兌換卡可能對應(yīng)著相同的訪問權(quán)限。,圖10.5帶有繼承關(guān)系的ATM對象模型,3. 把“分行”與“分行計(jì)算機(jī)”合并 區(qū)分“分行”與“分行計(jì)算機(jī)”,對于分析這個(gè)系統(tǒng)來說,并沒有多大意義,為簡單起見,應(yīng)該把它們合并。類似地,應(yīng)該合并“總行”和“中央計(jì)算機(jī)”。 圖10.6(見書238頁)給出了修改后的ATM對象模型,與修改前比較起來,它更簡單、更清晰。,圖10.

35、6修改后的ATM對象模型,對于僅存儲(chǔ)靜態(tài)數(shù)據(jù)的系統(tǒng)(例如數(shù)據(jù)庫)來說,動(dòng)態(tài)模型并沒有什么意義。然而在開發(fā)交互式系統(tǒng)時(shí),動(dòng)態(tài)模型卻起著很重要的作用。如果收集輸入信息是目標(biāo)系統(tǒng)的一項(xiàng)主要工作,則在開發(fā)這類應(yīng)用系統(tǒng)時(shí)建立正確的動(dòng)態(tài)模型是至關(guān)重要的。 建立動(dòng)態(tài)模型的第一步,是編寫典型交互行為的腳本。雖然腳本中不可能包括每個(gè)偶然事件,但是,至少必須保證不遺漏常見的交互行為。第二步,從腳本中提取出事件,確定觸發(fā)每個(gè)事件的動(dòng)作對象以及接受事件的目標(biāo)對象。第三步,排列事件發(fā)生的次序,確定每個(gè)對象可能有的狀態(tài)及狀態(tài)間的轉(zhuǎn)換關(guān)系,并用狀態(tài)圖描繪它們。最后,比較各個(gè)對象的狀態(tài)圖,檢查它們之間的一致性,確保事件之間的

36、匹配。,10.4 建立動(dòng)態(tài)模型,所謂“腳本”,原意是指“表演戲曲、話劇,拍攝電影、電視劇等所依據(jù)的本子,里面記載臺(tái)詞、故事情節(jié)等”。在建立動(dòng)態(tài)模型的過程中,腳本是指系統(tǒng)在某一執(zhí)行期間內(nèi)出現(xiàn)的一系列事件。腳本描述用戶(或其他外部設(shè)備)與目標(biāo)系統(tǒng)之間的一個(gè)或多個(gè)典型的交互過程,以便對目標(biāo)系統(tǒng)的行為有更具體的認(rèn)識(shí)。編寫腳本的目的,是保證不遺漏重要的交互步驟,它有助于確保整個(gè)交互過程的正確性的和清晰性。,10.4.1 編寫腳本,腳本描寫的范圍并不是固定的,既可以包括系統(tǒng)中發(fā)生的全部事件,也可以只包括由某些特定對象觸發(fā)的事件。腳本描寫的范圍主要由編寫腳本的具體目的決定。 即使在需求陳述中已經(jīng)描寫了完整的

37、交互過程,也還需要花很大精力構(gòu)思交互的形式。例如,ATM系統(tǒng)的需求陳述,雖然表明了應(yīng)從儲(chǔ)戶那里獲取有關(guān)事務(wù)的信息,但并沒有準(zhǔn)確說明獲取信息的具體過程,對動(dòng)作次序的要求也是模糊的。因此,編寫腳本的過程,實(shí)質(zhì)上就是分析用戶對系統(tǒng)交互行為的要求的過程。在編寫腳本的過程中,需要與用戶充分交換意見,編寫后還應(yīng)該經(jīng)過他們審查與修改。,腳本描述事件序列。每當(dāng)系統(tǒng)中的對象與用戶(或其他外部設(shè)備)交換信息時(shí),就發(fā)生一個(gè)事件。所交換的信息值就是該事件的參數(shù)(例如,“輸入密碼”事件的參數(shù)是所輸入的密碼)。也有許多事件是無參數(shù)的,這樣的事件僅傳遞一個(gè)信息該事件已經(jīng)發(fā)生了。 對于每個(gè)事件,都應(yīng)該指明觸發(fā)該事件的動(dòng)作對象

38、(例如,系統(tǒng)、用戶或其他外部事物)、接受事件的目標(biāo)對象以及該事件的參數(shù)。 表10.1和表10.2(見書240頁)分別給出了ATM系統(tǒng)的正常情況腳本和異常情況腳本。,大多數(shù)交互行為都可以分為應(yīng)用邏輯和用戶界面兩部分。通常,系統(tǒng)分析員首先集中精力考慮系統(tǒng)的信息流和控制流,而不是首先考慮用戶界面。事實(shí)上,采用不同界面(例如,命令行或圖形用戶界面),可以實(shí)現(xiàn)同樣的程序邏輯。應(yīng)用邏輯是內(nèi)在的、本質(zhì)的內(nèi)容,用戶界面是外在的表現(xiàn)形式。動(dòng)態(tài)模型著重表示應(yīng)用系統(tǒng)的控制邏輯。 但是,用戶界面的美觀程度、方便程度、易學(xué)程度以及效率等等,是用戶使用系統(tǒng)時(shí)最先感受到的,用戶對系統(tǒng)的“第一印象”往往從界面得來,用戶界面的

39、好壞往往對用戶是否喜歡、是否接受一個(gè)系統(tǒng)起很重要的作用。因此,在分析階段也不能完全忽略用戶界面。在這個(gè)階段用戶界面的細(xì)節(jié)并不太重要,重要的是在這種界面下的信息交換方式。我們的目的是確保能夠完成全部必要的信息交換,而不會(huì)丟失重要的信息。,10.4.2 設(shè)想用戶界面,不經(jīng)過實(shí)際使用很難評價(jià)一個(gè)用戶界面的優(yōu)劣,因此,軟件開發(fā)人員往往快速地建立起用戶界面的原型,供用戶試用與評價(jià)。圖10.7是初步設(shè)想出的ATM界面格式。,圖10.7 ATM的界面格式,完整、正確的腳本為建立動(dòng)態(tài)模型奠定了必要的基礎(chǔ)。但是,用自然語言書寫的腳本往往不夠簡明,而且有時(shí)在閱讀時(shí)會(huì)有二義性。為了有助于建立動(dòng)態(tài)模型,通常在畫狀態(tài)圖

40、之前先畫出事件跟蹤圖。為此首先需要進(jìn)一步明確事件及事件與對象的關(guān)系。,10.4.3 畫事件跟蹤圖,1. 確定事件 應(yīng)該仔細(xì)分析每個(gè)腳本,以便從中提取出所有外部事件。事件包括系統(tǒng)與用戶(或外部設(shè)備)交互的所有信號(hào)、輸入、輸出、中斷、動(dòng)作等等。從腳本中容易找出正常事件,但是,應(yīng)該小心仔細(xì),不要遺漏了異常事件和出錯(cuò)條件。 傳遞信息的對象的動(dòng)作也是事件。例如,儲(chǔ)戶插入現(xiàn)金兌換卡、儲(chǔ)戶輸入密碼、ATM吐出現(xiàn)金等都是事件。大多數(shù)對象到對象的交互行為都對應(yīng)著事件。 經(jīng)過分析,應(yīng)該區(qū)分出每類事件的發(fā)送對象和接受對象。一類事件相對它的發(fā)送對象來說是輸出事件,但是相對它的接受對象來說則是輸入事件。有時(shí)一個(gè)對象把事

41、件發(fā)送給自己,在這種情況下,該事件既是輸出事件又是輸入事件。,2. 畫出事件跟蹤圖 從腳本中提取出各類事件并確定了每類事件的發(fā)送對象和接受對象之后,就可以用事件跟蹤圖把事件序列以及事件與對象的關(guān)系,形象、清晰地表示出來。事件跟蹤圖實(shí)質(zhì)上是擴(kuò)充的腳本,可以認(rèn)為事件跟蹤圖是簡化的UML順序圖。 在事件跟蹤圖中,一條豎線代表一個(gè)對象,每個(gè)事件用一條水平的箭頭線表示,箭頭方向從事件的發(fā)送對象指向接受對象。時(shí)間從上向下遞增,也就是說,畫在最上面的水平箭頭線代表最先發(fā)生的事件,畫在最下面的水平箭頭線所代表的事件最晚發(fā)生。箭頭線之間的間距并沒有具體含義,圖中僅用箭頭線在垂直方向上的相對位置表示事件發(fā)生的先后

42、,并不表示兩個(gè)事件之間的精確時(shí)間差。 圖10.8(見書242頁)是ATM系統(tǒng)正常情況下的事件跟蹤圖。,圖10.8ATM系統(tǒng)正常情況腳本的事件跟蹤圖,狀態(tài)圖描繪事件與對象狀態(tài)的關(guān)系。當(dāng)對象接受了一個(gè)事件以后,它的下個(gè)狀態(tài)取決于當(dāng)前狀態(tài)及所接受的事件。由事件引起的狀態(tài)改變稱為“轉(zhuǎn)換”。如果一個(gè)事件并不引起當(dāng)前狀態(tài)發(fā)生轉(zhuǎn)換,則可忽略這個(gè)事件。 通常,用一張狀態(tài)圖描繪一類對象的行為,它確定了由事件序列引出的狀態(tài)序列。但是,也不是任何一個(gè)類都需要有一張狀態(tài)圖描繪它的行為。很多對象僅響應(yīng)與過去歷史無關(guān)的那些輸入事件,或者把歷史作為不影響控制流的參數(shù)。對于這類對象來說,狀態(tài)圖是不必要的。系統(tǒng)分析員應(yīng)該集中精

43、力僅考慮具有重要交互行為的那些類。,10.4.4 畫狀態(tài)圖,從一張事件跟蹤圖出發(fā)畫狀態(tài)圖時(shí),應(yīng)該集中精力僅考慮影響一類對象的事件,也就是說,僅考慮事件跟蹤圖中指向某條豎線的那些箭頭線。把這些事件作為狀態(tài)圖中的有向邊(即箭頭線),邊上標(biāo)以事件名。兩個(gè)事件之間的間隔就是一個(gè)狀態(tài)。一般說來,如果同一個(gè)對象對相同事件的響應(yīng)不同,則這個(gè)對象處在不同狀態(tài)。應(yīng)該盡量給每個(gè)狀態(tài)取個(gè)有意義的名字。通常,從事件跟蹤圖中當(dāng)前考慮的豎線射出的箭頭線,是這條豎線代表的對象達(dá)到某個(gè)狀態(tài)時(shí)所做的行為(往往是引起另一類對象狀態(tài)轉(zhuǎn)換的事件)。 根據(jù)一張事件跟蹤圖畫出狀態(tài)圖之后,再把其他腳本的事件跟蹤圖合并到已畫出的狀態(tài)圖中。為

44、此需在事件跟蹤圖中找出以前考慮過的腳本的分支點(diǎn)(例如“驗(yàn)證賬戶”就是一個(gè)分支點(diǎn),因?yàn)轵?yàn)證的結(jié)果可能是“賬戶有效”,也可能是“無效賬戶”),然后把其他腳本中的事件序列并入已有的狀態(tài)圖中,作為一條可選的路徑。,以ATM系統(tǒng)為例?!癆TM”、“柜員終端”、“總行”和“分行”都是主動(dòng)對象,它們相互發(fā)送事件;而“現(xiàn)金兌換卡”、“事務(wù)”和“賬戶”是被動(dòng)對象,并不發(fā)送事件?!皟?chǔ)戶”和“柜員”雖然也是動(dòng)作對象,但是,它們都是系統(tǒng)外部的因素,無須在系統(tǒng)內(nèi)實(shí)現(xiàn)它們。因此,只需要考慮“ATM”、“總行”、“柜員終端”和“分行”的狀態(tài)圖。 圖10.9(見書243頁),圖10.10和圖10.11分別是“ATM”、“總行

45、”和“分行”的狀態(tài)圖。由于“柜員終端”的狀態(tài)圖和“ATM”的狀態(tài)圖類似,為節(jié)省篇幅把它省略了。這些狀態(tài)圖都是簡化的,尤其對異常情況和出錯(cuò)情況的考慮是相當(dāng)粗略的(例如,圖10.9并沒有表示在網(wǎng)絡(luò)通信鏈路不通時(shí)的系統(tǒng)行為,實(shí)際上,在這種情況下ATM停止處理儲(chǔ)戶事務(wù)),圖10.9ATM類的狀態(tài)圖,圖10.10 總行類的狀態(tài)圖,圖10.11 分行類的狀態(tài)圖,各個(gè)類的狀態(tài)圖通過共享事件合并起來,構(gòu)成了系統(tǒng)的動(dòng)態(tài)模型。在完成了每個(gè)具有重要交互行為的類的狀態(tài)圖之后,應(yīng)該檢查系統(tǒng)級(jí)的完整性和一致性。一般說來,每個(gè)事件都應(yīng)該既有發(fā)送對象又有接受對象,當(dāng)然,有時(shí)發(fā)送者和接受者是同一個(gè)對象。對于沒有前驅(qū)或沒有后繼的

46、狀態(tài)應(yīng)該著重審查,如果這個(gè)狀態(tài)既不是交互序列的起點(diǎn)也不是終點(diǎn),則發(fā)現(xiàn)了一個(gè)錯(cuò)誤。 應(yīng)該審查每個(gè)事件,跟蹤它對系統(tǒng)中各個(gè)對象所產(chǎn)生的效果,以保證它們與每個(gè)腳本都匹配。 以ATM系統(tǒng)為例。在總行類的狀態(tài)圖中,事件“分行代碼錯(cuò)”是由總行發(fā)出的,但是在ATM類的狀態(tài)圖中并沒有一個(gè)狀態(tài)接受這個(gè)事件。因此,在ATM類的狀態(tài)圖中應(yīng)該再補(bǔ)充一個(gè)狀態(tài)“do/顯示分行代碼錯(cuò)信息”,它接受由前驅(qū)狀態(tài)“do/驗(yàn)證賬戶”發(fā)出的事件“分行代碼錯(cuò)”,它的后續(xù)狀態(tài)是“退卡”。,10.4.5 審查動(dòng)態(tài)模型,功能模型表明了系統(tǒng)中數(shù)據(jù)之間的依賴關(guān)系,以及有關(guān)的數(shù)據(jù)處理功能,它由一組數(shù)據(jù)流圖組成。其中的處理功能可以用IPO圖(或表)

47、、偽碼等多種方式進(jìn)一步描述。 通常在建立了對象模型和動(dòng)態(tài)模型之后再建立功能模型。 本書第2章已經(jīng)詳細(xì)講述了畫數(shù)據(jù)流圖的方法,本節(jié)結(jié)合ATM系統(tǒng)的例子,再復(fù)習(xí)一遍有關(guān)數(shù)據(jù)流圖的概念和畫法。,10.5 建立功能模型,基本系統(tǒng)模型由若干個(gè)數(shù)據(jù)源點(diǎn)/終點(diǎn),及一個(gè)處理框組成,這個(gè)處理框代表了系統(tǒng)加工、變換數(shù)據(jù)的整體功能?;鞠到y(tǒng)模型指明了目標(biāo)系統(tǒng)的邊界。由數(shù)據(jù)源點(diǎn)輸入的數(shù)據(jù)和輸出到數(shù)據(jù)終點(diǎn)的數(shù)據(jù),是系統(tǒng)與外部世界之間的交互事件的參數(shù)。 圖10.12是ATM系統(tǒng)的基本系統(tǒng)模型。,10.5.1 畫出基本系統(tǒng)模型圖,圖10.12 ATM系統(tǒng)的基本系統(tǒng)模型,把基本系統(tǒng)模型中單一的處理框分解成若干個(gè)處理框,以描述

48、系統(tǒng)加工、變換數(shù)據(jù)的基本功能,就得到功能級(jí)數(shù)據(jù)流圖。 ATM系統(tǒng)的功能級(jí)數(shù)據(jù)流圖如圖10.13(見書246頁)所示。,10.5.2 畫出功能級(jí)數(shù)據(jù)流圖,把數(shù)據(jù)流圖分解細(xì)化到一定程度之后,就應(yīng)該描述圖中各個(gè)處理框的功能。應(yīng)該注意的是,要著重描述每個(gè)處理框所代表的功能,而不是實(shí)現(xiàn)功能的具體算法。 描述既可以是說明性的,也可以是過程性的。說明性描述規(guī)定了輸入值和輸出值之間的關(guān)系,以及輸出值應(yīng)遵循的規(guī)律。過程性描述則通過算法說明“做什么”。一般說來,說明性描述優(yōu)于過程性描述,因?yàn)檫@類描述中通常不會(huì)隱含具體實(shí)現(xiàn)方面的考慮。 ATM系統(tǒng)數(shù)據(jù)流圖中大多數(shù)處理框的功能都比較簡單。作為一個(gè)例子,表10.3(見書

49、246頁)給出了對“更新賬戶”這個(gè)處理功能的描述。,10.5.3 描述處理框功能,正如10.3節(jié)指出的那樣,“對象”是由描述其屬性的數(shù)據(jù),及可以對這些數(shù)據(jù)施加的操作(即服務(wù)),封裝在一起構(gòu)成的獨(dú)立單元。因此,為建立完整的對象模型,既要確定類中應(yīng)該定義的屬性,又要確定類中應(yīng)該定義的服務(wù)。然而在10.3節(jié)中已經(jīng)指出,需要等到建立了動(dòng)態(tài)模型和功能模型之后,才能最終確定類中應(yīng)有的服務(wù),因?yàn)檫@兩個(gè)子模型更明確地描述了每個(gè)類中應(yīng)該提供哪些服務(wù)。事實(shí)上,在確定類中應(yīng)有的服務(wù)時(shí),既要考慮該類實(shí)體的常規(guī)行為,又要考慮在本系統(tǒng)中特殊需要的服務(wù)。,10.6 定義服務(wù),1. 常規(guī)行為 在分析階段可以認(rèn)為,類中定義的每個(gè)屬性都是可以訪問的,也就是說,假設(shè)在每個(gè)類中都定義了讀、寫該類每個(gè)屬性的操作。但是,通

溫馨提示

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

最新文檔

評論

0/150

提交評論