面向?qū)ο蠓椒?二)_第1頁(yè)
面向?qū)ο蠓椒?二)_第2頁(yè)
面向?qū)ο蠓椒?二)_第3頁(yè)
面向?qū)ο蠓椒?二)_第4頁(yè)
面向?qū)ο蠓椒?二)_第5頁(yè)
已閱讀5頁(yè),還剩78頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、9.3 面向?qū)ο蠓治鰊面向?qū)ο蠓治?OOA)的關(guān)鍵,是識(shí)別出問題域內(nèi)的對(duì)象,并分析它們相互間的關(guān)系,最終建立起問題域的簡(jiǎn)潔、精確、可理解的正確模型。在用面向?qū)ο笥^點(diǎn)建立起的三種模型中,對(duì)象模型是最基本、最重要、最核心的。9.3.1 分析過程n概述n 面向?qū)ο蠓治觯褪浅槿『驼碛脩粜枨蟛⒔栴}域精確模型的過程。n三個(gè)子模型與五個(gè)層次n 正如本書6.4節(jié)所述,面向?qū)ο蠼5玫降哪P桶到y(tǒng)的三個(gè)要素,即靜態(tài)結(jié)構(gòu)(對(duì)象模型),交互次序(動(dòng)態(tài)模型)和數(shù)據(jù)變換(功能模型)。解決的問題不同,這三個(gè)子模型的重要程度也不同:幾乎解決任何一個(gè)問題,都需要從客觀世界實(shí)體及實(shí)體間相互關(guān)系抽象出極有價(jià)值的對(duì)象模型

2、;當(dāng)問題涉及交互作用和時(shí)序時(shí)(例如,用戶界面及過程控制等),動(dòng)態(tài)模型是重要的;解決運(yùn)算量很大的問題(例如,高級(jí)語言編譯、科學(xué)與工程計(jì)算等),則涉及重要的功能模型。動(dòng)態(tài)模型和功能模型中都包含了對(duì)象模型中的操作(即服務(wù)或方法)。n 復(fù)雜問題(大型系統(tǒng))的對(duì)象模型由下述五個(gè)層次組成:主題層(也稱為范疇層)、類和對(duì)象層、結(jié)構(gòu)層、屬性層和服務(wù)層,如圖所示。圖9-13 復(fù)雜問題的對(duì)象模型 n主題層主題是指導(dǎo)人們理解大型而復(fù)雜模型的一種機(jī)制,它是把一些具有較強(qiáng)聯(lián)系的類組織在一起而得的類集合。通過劃分主題,把一個(gè)大型、復(fù)雜的對(duì)象模型分解成幾個(gè)不同的概念范疇,這是人們從宏觀的角度分析系統(tǒng)。當(dāng)系統(tǒng)規(guī)模不太大時(shí),可

3、以不用主題層。n一個(gè)主題有一個(gè)名稱和一個(gè)標(biāo)識(shí)它的編號(hào)。在描繪對(duì)象模型的圖中,把屬于同一個(gè)主題的那些類和對(duì)象框在一個(gè)框中,并在框的四角標(biāo)上這個(gè)主題的編號(hào)。 n對(duì)象層給出系統(tǒng)中所有反映問題域與系統(tǒng)責(zé)任的對(duì)象。用類符號(hào)表達(dá)屬于每一類的對(duì)象。類作為對(duì)象的抽象描述,是構(gòu)成系統(tǒng)的基本單位。n結(jié)構(gòu)層給出各個(gè)類(及其所代表的對(duì)象)彼此之間的關(guān)系。這些關(guān)系包括:繼承關(guān)系,用一般特殊結(jié)構(gòu)表示;組裝關(guān)系,用整體都分結(jié)構(gòu)表示;反映屬性的靜態(tài)依賴關(guān)系,用實(shí)例連接表示;反映服務(wù)的動(dòng)態(tài)依賴關(guān)系,用消息連接表示。這個(gè)層次描述了對(duì)象外部的聯(lián)系狀況。 n屬性層屬性是用來描述一個(gè)對(duì)象或者一個(gè)分類結(jié)構(gòu)實(shí)例的數(shù)據(jù)單元。屬性在模型圖中顯

4、示,并在對(duì)象庫(kù)中說明。 n服務(wù)層服務(wù)是收到消息之后所執(zhí)行的處理。服務(wù)在模型圖中標(biāo)明,并在對(duì)象庫(kù)中詳細(xì)說明。對(duì)象的服務(wù)表示和屬性一同封裝處理。n 綜上所述,我們?cè)诟拍钌峡梢哉J(rèn)為,面向?qū)ο蠓治龃篌w上按照下列順序進(jìn)行:尋找類和對(duì)象,識(shí)別結(jié)構(gòu),識(shí)別主題,定義屬性,建立動(dòng)態(tài)模型,建立功能模型,定義服務(wù)。但是,正如前面已經(jīng)多次強(qiáng)調(diào)指出過的,分析不可能嚴(yán)格地按照預(yù)定順序進(jìn)行,大型、復(fù)雜系統(tǒng)的模型需要反復(fù)構(gòu)造多遍才能建成。通常,先構(gòu)造出模型的子集,然后再逐漸擴(kuò)充,直到完全、充分地理解了整個(gè)問題,才能最終把模型建立起來。n 分析也不是一個(gè)機(jī)械的過程。大多數(shù)需求陳述都缺乏必要的信息,所缺少的信息主要從用戶和領(lǐng)域?qū)?/p>

5、家那里獲取,同時(shí)也需要從分析員對(duì)問題域的背景知識(shí)中提取。在分析過程中,系統(tǒng)分析員必須與領(lǐng)域?qū)<壹坝脩舴磸?fù)交流,以便澄清二義性,改正錯(cuò)誤的概念,補(bǔ)足缺少的信息。面向?qū)ο蠼⒌南到y(tǒng)模型,盡管在最終完成之前還是不準(zhǔn)確、不完整的,但對(duì)做到準(zhǔn)確、無歧義的交流仍然是大有益處的。n例子n自動(dòng)取款機(jī)(ATM)系統(tǒng),是講述面向?qū)ο蠓治龊兔嫦驅(qū)ο笤O(shè)計(jì)時(shí)使用的一個(gè)實(shí)例。圖9.3.2 ATM系統(tǒng)n 下面陳述對(duì)ATM系統(tǒng)的需求。n 某銀行擬開發(fā)一個(gè)自動(dòng)取款機(jī)系統(tǒng),它是一個(gè)由自動(dòng)取款機(jī)、中央計(jì)算機(jī)、分行計(jì)算機(jī)及柜員終端組成的網(wǎng)絡(luò)系統(tǒng)。ATM和中央計(jì)算機(jī)由總行投資購(gòu)買??傂袚碛卸嗯_(tái)ATM,分別設(shè)在全市各主要街道上。分行負(fù)責(zé)

6、提供分行計(jì)算機(jī)和柜員終端。柜員終端設(shè)在分行營(yíng)業(yè)廳及分行下屬的各個(gè)儲(chǔ)蓄所內(nèi)。該系統(tǒng)的軟件開發(fā)成本由各個(gè)分行分?jǐn)?。n 銀行柜員使用柜員終端處理儲(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ī)具體處理針對(duì)某個(gè)賬戶的事務(wù)并且維護(hù)賬戶。n 擁有銀行賬戶的儲(chǔ)戶有權(quán)申請(qǐng)領(lǐng)取現(xiàn)金兌換卡。使用現(xiàn)金兌換卡可以通過ATM訪問自己的賬戶。目前僅限于用現(xiàn)金兌換卡在ATM上提取現(xiàn)金(即取款),或查詢有

7、關(guān)自己賬戶的信息(例如,某個(gè)指定賬戶上的余額)。將來可能還要求使用ATM辦理轉(zhuǎn)賬、存款等事務(wù)。n 所謂現(xiàn)金兌換卡就是一張?zhí)刂频拇趴ǎ厦嬗蟹中写a和卡號(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ā)的訪問。n 當(dāng)用戶把現(xiàn)金兌換卡插入ATM之后,ATM就與用戶交互,以獲取有關(guān)這次事務(wù)的信息,并與中央計(jì)算機(jī)交換關(guān)于事務(wù)的信息。首先,ATM要求用

8、戶輸入密碼,接下來ATM把從這張卡上讀到的信息以及用戶輸入的密碼傳給中央計(jì)算機(jī),請(qǐng)求中央計(jì)算機(jī)核對(duì)這些信息并處理這次事務(wù)。中央計(jì)算機(jī)根據(jù)卡上的分行代碼確定這次事務(wù)與分行的對(duì)應(yīng)關(guān)系,并且委托相應(yīng)的分行計(jì)算機(jī)驗(yàn)證用戶密碼。如果用戶輸入的密碼是正確的,ATM就要求用戶選擇事務(wù)類型(取款、查詢等)。當(dāng)用戶選擇取款時(shí),ATM請(qǐng)求用戶輸入取款額。最后,ATM從現(xiàn)金出口吐出現(xiàn)金,并且打印出賬單交給用戶。建立對(duì)象模型n 9.3.2 標(biāo)識(shí)類和對(duì)象n 類和對(duì)象是在問題域中客觀存在的,系統(tǒng)分析員的主要任務(wù),就是通過分析找出這些類和對(duì)象。首先,找出所有候選的類和對(duì)象;然后,從候選的類和對(duì)象中篩選掉不正確的或不必要的。

9、n 1. 找出候選的類和對(duì)象n 另一種更簡(jiǎn)單的分析方法,是所謂的非正式分析。這種分析方法以用自然語言書寫的需求陳述為依據(jù),把陳述中的名詞作為類和對(duì)象的候選者,用形容詞作為確定屬性的線索,把動(dòng)詞作為服務(wù)(操作)的候選者。n 下面以ATM系統(tǒng)為例,說明非正式分析過程。認(rèn)真閱讀需求陳述,從陳述中找出下列名詞,可以把它們作為類和對(duì)象的初步的候選者。n 銀行、自動(dòng)取款機(jī)(ATM)、系統(tǒng)、中央計(jì)算機(jī)、分行計(jì)算機(jī)、柜員終端、網(wǎng)絡(luò)、總行、分行、軟件、成本、市、街道、營(yíng)業(yè)廳、儲(chǔ)蓄所、柜員、儲(chǔ)戶、現(xiàn)金、支票、賬戶、事務(wù)、現(xiàn)金兌換卡、余額、磁卡、分行代碼、卡號(hào)、用戶、副本、信息、密碼、類型、取款額、賬單以及訪問。n

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

11、戶)n (2) 無關(guān)(成本、街道)n (3) 籠統(tǒng)(網(wǎng)絡(luò)、軟件)n (4) 屬性(現(xiàn)金、取款額)n (5) 操作n (6) 實(shí)現(xiàn)n 綜上所述,在ATM系統(tǒng)的例子中,經(jīng)過初步篩選,剩下下列類和對(duì)象:ATM、中央計(jì)算機(jī)、分行計(jì)算機(jī)、柜員終端、總行、分行、柜員、儲(chǔ)戶、賬戶、事務(wù)和現(xiàn)金兌換卡。n 9.3.3 標(biāo)識(shí)結(jié)構(gòu)n 先分析確定結(jié)構(gòu)中關(guān)聯(lián),再確定確定一般特殊(繼承關(guān)系)結(jié)構(gòu)和整體部分(組裝關(guān)系)結(jié)構(gòu)。(后兩種結(jié)構(gòu)的標(biāo)識(shí)一般在標(biāo)識(shí)屬性層之后進(jìn)行)n 兩個(gè)或多個(gè)對(duì)象之間的相互依賴、相互作用的關(guān)系(靜態(tài)聯(lián)系)就是關(guān)聯(lián)。分析確定關(guān)聯(lián),能促使分析員考慮問題域的邊緣情況,有助于發(fā)現(xiàn)那些尚未被發(fā)現(xiàn)的類和對(duì)象。nn

12、 1. 初步確定關(guān)聯(lián)n 在需求陳述中使用的描述性動(dòng)詞或動(dòng)詞詞組,通常表示關(guān)聯(lián)關(guān)系。因此,在初步確定關(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)。n 2. 篩選n 經(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)。n(1) 已刪去的類之間的關(guān)聯(lián)n(2) 與問題無關(guān)的或應(yīng)在實(shí)現(xiàn)階段考慮的關(guān)聯(lián)n(3) 瞬時(shí)事件:關(guān)聯(lián)應(yīng)描述問題的靜態(tài)關(guān)聯(lián),而不應(yīng)是瞬時(shí)

13、事件。n(4) 三元關(guān)聯(lián):大多可分解為二元關(guān)聯(lián)或用詞組描述成限定關(guān)聯(lián) (5) 派生關(guān)聯(lián):應(yīng)刪去那些可以用其它關(guān)聯(lián)定義的冗余關(guān)聯(lián)n 3. 進(jìn)一步完善n 應(yīng)該進(jìn)一步完善經(jīng)篩選后余下的關(guān)聯(lián),通常從下述幾個(gè)方面進(jìn)行改進(jìn)。n (1) 正名n (2) 分解n (3) 補(bǔ)充n (4) 標(biāo)明階數(shù)n 下圖是經(jīng)上述分析過程之后得出的ATM系統(tǒng)原始對(duì)象圖。圖9.3.3 ATM系統(tǒng)原始對(duì)象圖n 9.3.4 標(biāo)識(shí)主題n 在開發(fā)大型、復(fù)雜系統(tǒng)的過程中,為了降低復(fù)雜程度,人們習(xí)慣于把系統(tǒng)再進(jìn)一步劃分成幾個(gè)不同的主題,也就是在概念上把系統(tǒng)包含的內(nèi)容分解成若干個(gè)范疇。圖9.3.4 把ATM系統(tǒng)劃分成三個(gè)主題n 9.3.5 確定

14、屬性n 一般說來,確定屬性的過程包括分析和選擇兩個(gè)步驟。n 1. 分析n 屬性的確定既與問題域有關(guān),也和目標(biāo)系統(tǒng)的任務(wù)有關(guān)。應(yīng)該僅考慮與具體應(yīng)用直接相關(guān)的屬性,不要考慮那些超出所要解決的問題范圍的屬性。在分析過程中應(yīng)該首先找出最重要的屬性,以后再逐漸把其余屬性增添進(jìn)去。在分析階段不要考慮那些純粹用于實(shí)現(xiàn)的屬性。n 2. 選擇n 認(rèn)真考察經(jīng)初步分析而確定下來的那些屬性,從中刪掉不正確的或不必要的屬性。通常有以下幾種常見情況。n (1) 誤把對(duì)象當(dāng)作屬性n (2) 把鏈屬性誤作為屬性n (3) 誤把內(nèi)部狀態(tài)當(dāng)成了屬性n (4) 過于細(xì)化n (5) 存在不一致的屬性圖9.3.5 ATM對(duì)象模型中的屬

15、性n 識(shí)別繼承關(guān)系n 確定了類中應(yīng)該定義的屬性之后,就可以利用繼承機(jī)制共享公共性質(zhì),并對(duì)系統(tǒng)中眾多的類加以組織。n 一般說來,可以使用兩種方式建立繼承(即歸納)關(guān)系。n 自底向上:抽象出現(xiàn)有類的共同性質(zhì)泛化出父類,這個(gè)過程實(shí)質(zhì)上模擬了人類歸納思維過程。n 自頂向下:把現(xiàn)有類細(xì)化成更具體的子類,這模擬了人類的演繹思維過程。圖9.3.6 帶有繼承關(guān)系的ATM對(duì)象模型n 反復(fù)修改n 僅僅經(jīng)過一次建模過程很難得到完全正確的對(duì)象模型。事實(shí)上,軟件開發(fā)過程就是一個(gè)多次反復(fù)修改、逐步完善的過程。在建模的任何一個(gè)步驟中,如果發(fā)現(xiàn)了模型的缺陷,都必須返回到前期階段進(jìn)行修改。由于面向?qū)ο蟮母拍詈头?hào)在整個(gè)開發(fā)過程

16、中都是一致的,因此遠(yuǎn)比使用結(jié)構(gòu)化分析和設(shè)計(jì)技術(shù)更容易實(shí)現(xiàn)反復(fù)修改及逐步完善的過程。圖9.3.7 修改后的ATM對(duì)象模型建立動(dòng)態(tài)模型n 建立動(dòng)態(tài)模型的第一步,是編寫典型交互行為的腳本。雖然腳本中不可能包括每個(gè)偶然事件,但是,至少必須保證不遺漏常見的交互行為。接下來從腳本中提取出事件,確定觸發(fā)每個(gè)事件的動(dòng)作對(duì)象以及接受事件的目標(biāo)對(duì)象。第三步,排列事件發(fā)生的次序,確定每個(gè)對(duì)象可能有的狀態(tài)及狀態(tài)間的轉(zhuǎn)換關(guān)系,并用狀態(tài)圖描繪它們。最后,比較各個(gè)對(duì)象的狀態(tài)圖,檢查它們之間的一致性,確保事件之間的匹配。n 編寫腳本n 所謂“腳本”,原意是指“表演戲曲、話劇,拍攝電影、電視劇等所依據(jù)的本子,里面記載臺(tái)詞、故事

17、情節(jié)等”。在建立動(dòng)態(tài)模型的過程中,腳本是指系統(tǒng)在某一執(zhí)行期間內(nèi)出現(xiàn)的一系列事件。腳本描述用戶(或其他外部設(shè)備)與目標(biāo)系統(tǒng)之間的一個(gè)或多個(gè)典型的交互過程,以便對(duì)目標(biāo)系統(tǒng)的行為有更具體的認(rèn)識(shí)。編寫腳本的目的,是保證不遺漏重要的交互步驟,它有助于確保整個(gè)交互過程的正確性和清晰性。n 編寫腳本時(shí),首先編寫正常情況的腳本。然后,考慮特殊情況,例如輸入或輸出的數(shù)據(jù)為最大值(或最小值)。最后,考慮出錯(cuò)情況,例如,輸入的值為非法值或響應(yīng)失敗。n分別給出了ATM系統(tǒng)的正常情況腳本和異常情況腳本。n系統(tǒng)的正常情況腳本n ATM請(qǐng)儲(chǔ)戶插卡;儲(chǔ)戶插入一張現(xiàn)金兌換卡n ATM接受該卡并讀它上面的分行代碼和卡號(hào)n ATM

18、要求儲(chǔ)戶輸入密碼;儲(chǔ)戶輸入自己的密碼“1234”等數(shù)字n ATM請(qǐng)求總行驗(yàn)證卡號(hào)和密碼;總行要求“39”號(hào)分行核對(duì)儲(chǔ)戶密碼,然后通知ATnM說這張卡有效n ATM要求儲(chǔ)戶選擇事務(wù)類型(取款、轉(zhuǎn)賬、查詢等);儲(chǔ)戶選擇“取款”n ATM要求儲(chǔ)戶輸入取款額;儲(chǔ)戶輸入“880”n ATM確認(rèn)取款額在預(yù)先規(guī)定的限額內(nèi),然后要求總行處理這個(gè)事務(wù);總行把請(qǐng)求轉(zhuǎn)給分行,該分行成功地處理完這項(xiàng)事務(wù)并返回該賬戶的新余額ZK)n ATM吐出現(xiàn)金并請(qǐng)儲(chǔ)戶拿走這些現(xiàn)象;儲(chǔ)戶拿走現(xiàn)金n ATM問儲(chǔ)戶是否繼續(xù)這項(xiàng)事務(wù);儲(chǔ)戶回答“不”n ATM打印賬單,退出現(xiàn)金兌換卡,請(qǐng)儲(chǔ)戶拿走它們;儲(chǔ)戶取走賬單和卡n ATM請(qǐng)儲(chǔ)戶插卡n系

19、統(tǒng)的異常情況腳本n ATM請(qǐng)儲(chǔ)戶插卡;儲(chǔ)戶插入一張現(xiàn)金兌換卡n ATM接受這張卡并順序讀它上面的數(shù)字n ATM要求密碼;儲(chǔ)戶誤輸入“8888”n ATM請(qǐng)求總行驗(yàn)證輸入的數(shù)字和密碼;總行在向有關(guān)分行咨詢之后拒絕這張卡n ATM顯示“密碼錯(cuò)”,并請(qǐng)儲(chǔ)戶重新輸入密碼;儲(chǔ)戶輸入“1234”;ATM請(qǐng)總行驗(yàn)證后知道這次輸入的密碼正確n ATM請(qǐng)儲(chǔ)戶選擇事務(wù)類型;儲(chǔ)戶選擇“取款”n ATM詢問取款額;儲(chǔ)戶改變主意不想取款了,他敲“取消”鍵n ATM退出現(xiàn)金兌換卡,并請(qǐng)儲(chǔ)戶拿走它;儲(chǔ)戶拿走他的卡n ATM請(qǐng)儲(chǔ)戶插卡圖9.3.8 ATM的界面格式n畫事件跟蹤圖n 完整、正確的腳本為建立動(dòng)態(tài)模型奠定了必要的基

20、礎(chǔ)。但是,用自然語言書寫的腳本往往不夠簡(jiǎn)明,而且有時(shí)在閱讀時(shí)會(huì)有二義性。為了有助于建立動(dòng)態(tài)模型,通常在畫狀態(tài)圖之前先畫出事件跟蹤圖。為此首先需要進(jìn)一步明確事件及事件與對(duì)象的關(guān)系。n 1. 確定事件n 應(yīng)該仔細(xì)分析每個(gè)腳本,以便從中提取出所有外部事件。事件包括系統(tǒng)與用戶(或外部設(shè)備)交互的所有信號(hào)、輸入、輸出、中斷和動(dòng)作等。從腳本中容易找出正常事件,但是,應(yīng)該小心仔細(xì),不要遺漏了異常事件和出錯(cuò)條件。n 傳遞信息的對(duì)象的動(dòng)作也是事件。n 經(jīng)過分析,應(yīng)該區(qū)分出每類事件的發(fā)送對(duì)象和接受對(duì)象。一類事件相對(duì)它的發(fā)送對(duì)象來說是輸出事件,但是相對(duì)它的接受對(duì)象來說則是輸入事件。有時(shí)一個(gè)對(duì)象把事件發(fā)送給自己,在這

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

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

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

24、事件跟蹤圖中找出以前考慮過的腳本的分支點(diǎn)(例如“驗(yàn)證賬戶”就是一個(gè)分支點(diǎn),因?yàn)轵?yàn)證的結(jié)果可能是“賬戶有效”,也可能是“無效賬戶”),然后把其他腳本中的事件序列并入已有的狀態(tài)圖中,作為一條可選的路徑。n 考慮完正常事件之后再考慮邊界情況和特殊情況,其中包括在不適當(dāng)時(shí)候發(fā)生的事件(例如,系統(tǒng)正在處理某個(gè)事務(wù)時(shí),用戶要求取消該事務(wù))。ATM類的狀態(tài)圖總行類的狀態(tài)圖分行類的狀態(tài)圖建立功能模型n 畫出基本系統(tǒng)模型圖n 基本系統(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)與外

25、部世界之間的交互事件的參數(shù)。ATM系統(tǒng)的基本系統(tǒng)模n畫出功能級(jí)數(shù)據(jù)流圖n 把基本系統(tǒng)模型中單一的處理框分解成若干個(gè)處理框,以描述系統(tǒng)加工、變換數(shù)據(jù)的基本功能,就得到功能級(jí)數(shù)據(jù)流圖。n描述處理框功能n 把數(shù)據(jù)流圖分解細(xì)化到一定程度之后,就應(yīng)該描述圖中各個(gè)處理框的功能。應(yīng)該注意的是,要著重描述每個(gè)處理框所代表的功能,而不是實(shí)現(xiàn)功能的具體算法。n 描述既可以是說明性的,也可以是過程性的。ATM系統(tǒng)的功能級(jí)數(shù)據(jù)流圖n對(duì)更新賬戶功能的描述n更新賬戶(賬號(hào),事務(wù)類型,金額)現(xiàn)金額,賬單數(shù)據(jù),信息n 如果取款額超過賬戶當(dāng)前余額,拒絕該事務(wù)且不付出現(xiàn)金n 如果取款額不超過賬戶當(dāng)前余額,從余額中減去取款額后作為

26、新的余額,付出儲(chǔ)戶要取的現(xiàn)金n 如果事務(wù)是存款,把存款額加到余額中得到新余額,不付出現(xiàn)金n 如果事務(wù)是查詢,不付出現(xiàn)金n在上述任何一種情況下,賬單內(nèi)容都是:ATM號(hào)、日期、時(shí)間、賬號(hào)、事務(wù)類型、事務(wù)金額(如果有的話)和新余額9.3.6 定義服務(wù)n在確定類中應(yīng)有的服務(wù)時(shí),既要考慮該類實(shí)體的常規(guī)行為,又要考慮在本系統(tǒng)中特殊需要的服務(wù)。n 1. 系統(tǒng)行為:系統(tǒng)分析中,與對(duì)象有關(guān)的某些行為實(shí)際上不是對(duì)象自身的行為,而是系統(tǒng)把對(duì)象看作一個(gè)整體來處理時(shí)施加于對(duì)象的行為。面向?qū)ο髮?shí)現(xiàn)的系統(tǒng)一般都為此類系統(tǒng)行為提供了統(tǒng)一的支持,所以不需要在每個(gè)對(duì)象中顯式地定義相應(yīng)的服務(wù)。例如:對(duì)象的創(chuàng)建(create),釋放

27、(release)。 n2. 對(duì)象的基本服務(wù)n根據(jù)面向?qū)ο蠓庋b原則,對(duì)象外部的行為不能對(duì)對(duì)象內(nèi)部的屬性作任何讀、寫直接操作。而只能由對(duì)象內(nèi)部的行為(服務(wù))向外提供相應(yīng)的服務(wù)。于是,每個(gè)對(duì)象中都要設(shè)立許多讀取或設(shè)置屬性的值的服務(wù)。此類服務(wù)并不是客觀事物固有行為的映射,而是由于封裝原則引起的;另一方面有些面向?qū)ο蟪绦蛟O(shè)計(jì)語言(例如 C+)編程時(shí),不一定都要用一個(gè)服務(wù)來實(shí)現(xiàn),因此對(duì)于這類服務(wù)的處理可以不描述或只作簡(jiǎn)單的說明。n3. 對(duì)象的特殊服務(wù)n面向?qū)ο蟮闹攸c(diǎn)就是發(fā)現(xiàn)和描述這類服務(wù)。此類服務(wù)描述了對(duì)象所映射事物的固有行為,其算法是進(jìn)行某些計(jì)算或監(jiān)控操作。此類服務(wù)是應(yīng)該在面向?qū)ο蠓治鲋信Πl(fā)現(xiàn)并加以

28、定義的。na.與數(shù)據(jù)流圖中處理框?qū)?yīng)的操作n 數(shù)據(jù)流圖中的每個(gè)處理框都與一個(gè)對(duì)象(也可能是若干個(gè)對(duì)象)上的操作相對(duì)應(yīng)。應(yīng)該仔細(xì)對(duì)照狀態(tài)圖和數(shù)據(jù)流圖,以便更正確地確定對(duì)象應(yīng)該提供的服務(wù)。nb.從事件導(dǎo)出操作n 狀態(tài)圖中發(fā)往對(duì)象的事件也就是該對(duì)象接收到的消息,因此該對(duì)象必須有由消息選擇符指定的操作,這個(gè)操作修改對(duì)象狀態(tài)(即屬性值)并啟動(dòng)相應(yīng)的服務(wù)。n4. 利用繼承減少冗余操作n 應(yīng)該盡量利用繼承機(jī)制以減少所需定義的服務(wù)數(shù)目。只要不違背領(lǐng)域知識(shí)和常識(shí),就盡量抽取出相似類的公共屬性和操作,以建立這些類的新父類,并在類等級(jí)的不同層次中正確地定義各個(gè)服務(wù)。面向?qū)ο蠓治鰧?shí)例n需求陳述n 我們將要討論的是電梯

29、的控制問題,下面給出對(duì)這個(gè)問題的描述。n 在一幢有m層樓的大廈中需要一套控制n部電梯的產(chǎn)品,要求這n部電梯根據(jù)下列約束條件在樓層間移動(dòng)。nC1:每部電梯有m個(gè)按鈕,每個(gè)按鈕代表一個(gè)樓層。當(dāng)按下一個(gè)按鈕時(shí)該按鈕指示燈亮,同時(shí)電梯駛向相應(yīng)的樓層,當(dāng)?shù)竭_(dá)由按鈕指定的樓層時(shí)指示燈熄滅。nC2:除了大廈的最低層和最高層之外,每層樓都有兩個(gè)按鈕分別指示電梯上行和下行。當(dāng)這兩個(gè)按鈕之一被按下時(shí)相應(yīng)的指示燈亮,當(dāng)電梯到達(dá)此樓層時(shí)燈熄滅,電梯向要求的方向移動(dòng)。nC3:當(dāng)電梯無升降動(dòng)作時(shí),關(guān)門并停在當(dāng)前樓層。n建立對(duì)象模型n 面向?qū)ο蠓治龅牡谝徊绞菢?gòu)造對(duì)象模型。在這個(gè)步驟中將抽象出類和它的屬性,并用對(duì)象模型圖描繪

30、類和對(duì)象及它們彼此之間的關(guān)系。類所提供的服務(wù)將在面向?qū)ο蠓治龊笃诨蛎嫦驅(qū)ο笤O(shè)計(jì)階段再確定下來。n 為了抽象出問題域中包含的類,可以用下述三個(gè)過程產(chǎn)生候選類,并對(duì)所得到的結(jié)果加以精化。n 1. 精確地定義問題n 應(yīng)該盡可能簡(jiǎn)潔地定義所需要的產(chǎn)品,最好只用一句話來描述目標(biāo)系統(tǒng)。例如,對(duì)電梯系統(tǒng)可以像下面那樣描述。n 在一個(gè)m層樓的大廈里,用每層樓的按鈕和電梯內(nèi)的按鈕來控制n部電梯的移動(dòng)。n 2. 提出非形式化策略n 為了提出一種解決上述問題的非形式化策略,必須確定問題的約束條件。對(duì)電梯問題提出了三種約束,最好能用一小段文字把非形式化策略清楚地表達(dá)出來,對(duì)電梯問題來說,解決問題的非形式化策略可表達(dá)如

31、下。n 在一幢有m層樓的大廈里,用電梯內(nèi)的和每個(gè)樓層的按鈕來控制n部電梯的運(yùn)動(dòng)。當(dāng)按下電梯按鈕以請(qǐng)求在某一指定樓層停下時(shí),按鈕指示燈亮;當(dāng)請(qǐng)求獲得滿足時(shí),指示燈熄滅。當(dāng)電梯無升降操作時(shí),關(guān)門并停在當(dāng)前樓層。n 3. 把策略形式化n 在以上這段描述非形式化策略的文字中,共有八個(gè)不同的名詞:按鈕、電梯、樓層、運(yùn)動(dòng)、大廈、指示燈、請(qǐng)求和門。這些名詞所代表的事物可作為類的初步候選者。其中,樓層和大廈是處于問題邊界之外的,因此可以忽略;運(yùn)動(dòng)、指示燈、請(qǐng)求和門可以作為其他類的屬性,例如,指示燈(的狀態(tài))可作為按鈕類的屬性,門(的狀態(tài))可作為電梯類的屬性。經(jīng)過上述篩選后只剩下兩個(gè)候選類,即電梯和按鈕。n 補(bǔ)

32、充了電梯控制器類之后,得到了圖所示的對(duì)象模型。電梯系統(tǒng)對(duì)象模型的第一次迭代電梯系統(tǒng)對(duì)象模型的第二次迭代n建立動(dòng)態(tài)模型n 1. 編寫腳本n 這一步的目的是,決定每一個(gè)類應(yīng)該做的操作。達(dá)到這個(gè)目的的一種有效的方法,是列出用戶和系統(tǒng)之間相互作用的典型情況,即寫出腳本(包括正常情況腳本和異常情況腳本)。表9.3.4和表9.3.5分別是正常情況腳本和異常情況腳本。n電梯系統(tǒng)正常情況腳本n 用戶A在3樓按上行按鈕呼叫電梯,用戶A希望到7樓去n 上行按鈕指示燈亮n 一部電梯到達(dá)3樓,電梯內(nèi)的用戶B已按下了到9樓的按鈕n 上行按鈕指示燈熄滅n 電梯開門n 用戶A進(jìn)入電梯n 用戶A按下電梯內(nèi)到7樓的按鈕n 7樓

33、按鈕指示燈亮n 電梯關(guān)門n 電梯到達(dá)7樓n 7樓按鈕指示燈熄滅n 電梯開門n 用戶A走出電梯n 電梯在等待時(shí)間到后關(guān)門n 電梯載著用戶B繼續(xù)上行到達(dá)9樓n電梯系統(tǒng)異常情況腳本n 用戶A在3樓按上行按鈕呼叫電梯,但是用戶A希望到1樓n 上行銨鈕指示燈亮n 一部電梯到達(dá)3樓,電梯內(nèi)用戶B已按下了到9樓的按鈕n 上行按鈕指示燈熄滅n 電梯開門n 用戶A進(jìn)入電梯n 用戶A按下電梯內(nèi)到1樓的按鈕n 電梯內(nèi)1樓按鈕指示燈亮n 電梯在等待超時(shí)后關(guān)門n 電梯上行到達(dá)9樓n 電梯內(nèi)9樓按鈕指示燈熄滅n 電梯開門n 用戶B走出電梯n 電梯在等待超時(shí)后關(guān)門n 電梯載著用戶A下行駛向1樓n 2. 畫狀態(tài)轉(zhuǎn)換圖n 電梯控制器是在電梯系統(tǒng)中起核心控制作用的類,我們將畫出這個(gè)類的狀態(tài)轉(zhuǎn)換圖。為簡(jiǎn)單起見,僅

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論