第六章(1)-面向?qū)ο蠓治鯻第1頁
第六章(1)-面向?qū)ο蠓治鯻第2頁
第六章(1)-面向?qū)ο蠓治鯻第3頁
第六章(1)-面向?qū)ο蠓治鯻第4頁
第六章(1)-面向?qū)ο蠓治鯻第5頁
已閱讀5頁,還剩100頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第6章軟件管理(1)

-----面向?qū)ο蠓治鼋滩哪夸?.1三個模型的建模思想6.2數(shù)據(jù)模型設(shè)計(jì)概論6.3數(shù)據(jù)庫設(shè)計(jì)的理論與方法6.4數(shù)據(jù)模型建模實(shí)例分析6.5三個模型建模實(shí)例分析6.6三個模型建模思想總結(jié)課堂安排三個模型的建模思想面向?qū)ο蠓治龅幕具^程需求陳述建立對象模型建立動態(tài)模型建立功能模型定義服務(wù)總結(jié)軟件開發(fā)的主要工作是軟件需求和軟件設(shè)計(jì),二者的關(guān)鍵是軟件的建模。所謂模型:為了理解事物而對事物所做的一種抽象,是對事物的一種無歧義的書面描述。

模型通常是由一組圖示符號和組織這些符號的規(guī)則組成,可以利用它們來定義和描述問題域中的術(shù)語和概念。

通過建??梢赃_(dá)到以下四個目的:

模型幫助設(shè)計(jì)人員按照實(shí)際情況或所需的樣式對系統(tǒng)進(jìn)行可視化。

模型允許詳細(xì)說明系統(tǒng)的結(jié)構(gòu)或行為。

模型給出一個指導(dǎo)系統(tǒng)的模板。

模型對做出的決策進(jìn)行文檔化。

用面向?qū)ο箝_發(fā)軟件,通常需要建立三種形式的模型,它們分別是描述系統(tǒng)數(shù)據(jù)結(jié)構(gòu)的對象模型、描述系統(tǒng)控制結(jié)構(gòu)的動態(tài)模型和描述系統(tǒng)功能的功能模型。這三種模型都涉及數(shù)據(jù)、控制、操作等共同的概念,只不過每種模型描述的側(cè)重點(diǎn)不同。

6.1三個模型的建模思想6.1.1對象模型對象模型表示靜態(tài)的、結(jié)構(gòu)化的系統(tǒng)的“數(shù)據(jù)”性質(zhì),是對模擬客觀世界實(shí)體的對象以及對象彼此之間的關(guān)系的映射,描述了系統(tǒng)的靜態(tài)結(jié)構(gòu)。在三個模型中,它是最重要,最核心,最基本的,它為建立動態(tài)模型和功能模型提供了實(shí)質(zhì)性的框架,人們依靠對象模型完成三個模型的集成。6.1.2動態(tài)模型動態(tài)模型表示瞬時的、行為化的系統(tǒng)“控制”性質(zhì),它規(guī)定了對象模型中對象的合法變化序列。一旦建立起對象模型后,就需要考察對象的動態(tài)行為。所有的對象都有自己的生命周期。對一個對象而言,生命周期由許多階段組成,在每個特定階段中,都有適合該對象的一組運(yùn)行規(guī)律和行為規(guī)則,用以規(guī)范對象的行為,生命周期中的階段也就是對象的狀態(tài)6.1三個模型的建模思想6.1.3功能模型功能模型表示變化的系統(tǒng)的“功能”性質(zhì),指明了系統(tǒng)應(yīng)該“做什么”,更直接地反映了用戶對目標(biāo)系統(tǒng)的需求。因此,功能模型實(shí)質(zhì)上是用戶需求模型,反映了系統(tǒng)的功能需求,對系統(tǒng)的功能、性能、接口和界面進(jìn)行定義,是用戶界面模型設(shè)計(jì)的主要依據(jù)。功能模型既是動態(tài)的又是靜態(tài)的,因?yàn)橛械墓δ芘c系統(tǒng)運(yùn)行時間序列有關(guān)。功能模型既是數(shù)據(jù)庫和數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)的基礎(chǔ),又是功能模塊設(shè)計(jì)、編程實(shí)現(xiàn)和測試驗(yàn)收的依據(jù)。6.1三個模型的建模思想6.1.4三個模型之間的關(guān)系1.針對每個類建立的動態(tài)模型,描述了類實(shí)例的生命周期或運(yùn)行周期。2.狀態(tài)轉(zhuǎn)換驅(qū)使行為發(fā)生,這些行為在數(shù)據(jù)流圖中被映射成處理,在用例圖中被映射成用例,它們同時與類圖中的服務(wù)相對應(yīng)。3.功能模型中的處理(或用例)對應(yīng)于對象模型中的類所提供的服務(wù)。通常,復(fù)雜的處理(或用例)對應(yīng)于復(fù)雜對象提供的服務(wù),簡單的處理(或用例)對應(yīng)于更基本的對象提供的服務(wù)。有時一個處理(或用例)對應(yīng)于多個服務(wù),也有一個服務(wù)對應(yīng)于多個處理(或用例)的時候。4.數(shù)據(jù)流圖中的數(shù)據(jù)存儲,以及數(shù)據(jù)的源點(diǎn)/終點(diǎn),通常是對象模型中的對象。5.數(shù)據(jù)流圖中的數(shù)據(jù)流,往往是對象模型中對象的屬性值,也可能是整個對象。6.用例圖中的行為者,可能是對象模型中的對象。7.功能模型中的處理(或用例)可能產(chǎn)生動態(tài)模型中的事件。8.對象模型描述了數(shù)據(jù)流圖中的數(shù)據(jù)流、數(shù)據(jù)存儲以及數(shù)據(jù)源點(diǎn)/終點(diǎn)的結(jié)構(gòu)。6.1三個模型的建模思想6.2面向?qū)ο蠓治霾徽摬捎媚姆N方法學(xué)開發(fā)軟件,分析過程都是提取系統(tǒng)需求的過程。分析工作主要包括3項(xiàng)內(nèi)容:理解、表達(dá)和驗(yàn)證。首先,分析員通過與用戶及領(lǐng)域?qū)<业某浞纸涣?,力求充分理解用戶需求和該?yīng)用領(lǐng)域的關(guān)鍵性背景知識。用某種無二義性的方式把這種理解表達(dá)成文檔資料(軟件需求規(guī)格說明,在面向?qū)ο蠓治鲋?,主要由對象模型、動態(tài)模型和功能模型組成)由于問題復(fù)雜,理解過程通常不能一次達(dá)到理想效果,還須進(jìn)一步驗(yàn)證軟件需求規(guī)格說明的正確性、完整性和有效性,發(fā)現(xiàn)問題則進(jìn)行修正。6.2面向?qū)ο蠓治鲂枨蠓治鲞^程是系統(tǒng)分析員與用戶及領(lǐng)域?qū)<曳磸?fù)交流和多次修正的過程。理解和驗(yàn)證的過程交替進(jìn)行,反復(fù)迭代,往往需要利用原型系統(tǒng)作為輔助工具。面向?qū)ο蠓治龅年P(guān)鍵是識別出問題域內(nèi)的類與對象,分析確定它們之間的關(guān)系,最終建立起問題域的對象模型、動態(tài)模型和功能模型。在用面向?qū)ο笥^點(diǎn)建立起的三種模型中,對象模型是最基本、最重要、最核心的。6.2.1面向?qū)ο蠓治龅幕具^程1、

概述面向?qū)ο蠓治?,就是抽取和整理用戶需求并建立問題域精確模型的過程。通常,面向?qū)ο蠓治鲞^程從分析用戶需求的文件開始。需求陳述往往是不完整、不準(zhǔn)確的,通過分析應(yīng)該改正原始陳述中的二義性和不一致性,補(bǔ)充遺漏的內(nèi)容。在分析需求陳述的過程中,需要反復(fù)多次地與用戶協(xié)商、討論、交流信息,還應(yīng)該了解現(xiàn)有的類似系統(tǒng)??焖俚亟⒁粋€能在計(jì)算機(jī)上運(yùn)行的原型系統(tǒng),有助于分析員與用戶之間的溝通,從而能更正確地提取出用戶的需求。6.2.1面向?qū)ο蠓治龅幕具^程分析員應(yīng)該在深入理解用戶需求的基礎(chǔ)上,抽象出目標(biāo)系統(tǒng)的本質(zhì)屬性,并利用模型精確地表示出來。通過建立模型能夠糾正在分析早期對問題域的誤解在面向?qū)ο蠓治鼋V行枳⒁獾膯栴}:必須向領(lǐng)域?qū)<覍W(xué)習(xí)領(lǐng)域知識,必須有領(lǐng)域?qū)<业拿芮信浜?。?yīng)該仔細(xì)研究以前針對相同的或類似的問題域進(jìn)行面向?qū)ο蠓治龅玫降慕Y(jié)果,這些結(jié)果在當(dāng)前項(xiàng)目中往往有許多是可重用的。2、3個子模型與5個層次3個模型對象模型(靜態(tài)模型):幾乎解決任何一個問題,都需要從客觀世界實(shí)體及實(shí)體間相互關(guān)系抽象出極有價值的對象模型。動態(tài)模型(交互次序):問題涉及交互作用和時序時最重要。功能模型(數(shù)據(jù)變換):解決運(yùn)算量很大的問題時很重要。動態(tài)模型和功能模型中都包含了對象模型中的操作(即服務(wù)或方法)。2、3個子模型與5個層次大型系統(tǒng)的對象模型通常由下述5個層次組成:其中,主題是指導(dǎo)讀者理解大型、復(fù)雜模型的一種機(jī)制。即通過劃分主題把一個大型、復(fù)雜的對象模型分解成幾個不同的概念范疇。2、3個子模型與5個層次面向?qū)ο蠓治鲈谙率鰞蓚€方面體現(xiàn)Miller(7±2)原則:控制可見性和指導(dǎo)讀者的注意力。面向?qū)ο蠓治鐾ㄟ^控制讀者能見到的層次數(shù)目來控制可見性。面向?qū)ο蠓治鲈黾恿酥黧w層,它可以從一個相當(dāng)高的層次描述總體模型,并對讀者的注意力加以指導(dǎo)。2、3個子模型與5個層次5個層次對應(yīng)著建立對象模型的五項(xiàng)活動找出類與對象識別結(jié)構(gòu)識別主題定義屬性定義服務(wù)這五項(xiàng)活動完全沒有必要順序完成,也無須徹底完成一項(xiàng)工作以后再開始另外一項(xiàng)工作。2、3個子模型與5個層次在概念上,面向?qū)ο蠓治龃篌w上按照下列順序進(jìn)行:尋找類與對象—>識別結(jié)構(gòu)—>識別主題—>定義屬性—>建立動態(tài)模型—>建立功能模型—>定義服務(wù)但是,分析工作不可能嚴(yán)格地按照順序進(jìn)行,大型復(fù)雜系統(tǒng)的模型需要反復(fù)構(gòu)造多遍才能完成。通常,先構(gòu)造出模型的子集,然后再逐漸擴(kuò)充,直到完全、充分地理解了整個問題,才能最終把模型建立起來。2、3個子模型與5個層次分析也不是一個機(jī)械的過程。大多數(shù)需求陳述都缺乏必要的信息,所缺少的信息主要從用戶和領(lǐng)域?qū)<夷抢铽@取,同時也需要從分析員對問題域的背景知識中提取。在分析過程中,系統(tǒng)分析員必須與領(lǐng)域?qū)<壹坝脩舴磸?fù)交流,以便澄清二義性,改正錯誤的概念,補(bǔ)足缺少的信息。面向?qū)ο蠼⒌南到y(tǒng)模型,盡管在最終完成之前還是不準(zhǔn)確、不完整的,但對做到準(zhǔn)確、無歧義的交流仍然是大有益處的。6.3需求陳述6.3.1書寫要點(diǎn)需求陳述通常包括:問題范圍,功能需求,性能需求,應(yīng)用環(huán)境及假設(shè)條件等。應(yīng)該闡明“做什么”,而不是“怎么做”應(yīng)該描述用戶的需求,而不是提出解決問題的方法應(yīng)該指出哪些是系統(tǒng)必要的性質(zhì),哪些是任選的性質(zhì)應(yīng)該避免對設(shè)計(jì)策略施加過多的約束,也不要描述系統(tǒng)的內(nèi)部結(jié)構(gòu),否則將限制實(shí)現(xiàn)的靈活性對系統(tǒng)性能及外界環(huán)境交互協(xié)議的描述是合適的需求對采用的軟件工程標(biāo)準(zhǔn)、模塊構(gòu)造準(zhǔn)則、將來可能做的擴(kuò)充以及可維護(hù)性要求等方面描述,也都是適當(dāng)?shù)男枨笙到y(tǒng)分析員必須與用戶及領(lǐng)域?qū)<颐芮信浜蠀f(xié)同工作,共同提煉和整理用戶需求6.3需求陳述在這個過程中,很可能需要快速建立起原型系統(tǒng),以便與用戶更有效地交流。例子銀行自動取款機(jī)(ATM)系統(tǒng)6.3需求陳述某銀行擬開發(fā)一個自動取款機(jī)系統(tǒng),它是一個由自動取款機(jī)、中央計(jì)算機(jī)、分行計(jì)算機(jī)及柜員終端組成的網(wǎng)絡(luò)系統(tǒng)。該系統(tǒng)的軟件開發(fā)成本由各個分行分?jǐn)?。ATM和中央計(jì)算機(jī)由總行投資購買??傂袚碛卸嗯_ATM,分別設(shè)在各主要街道上。分行負(fù)責(zé)提供分行計(jì)算機(jī)和柜員終端。柜員終端設(shè)在分行營業(yè)廳及下屬的各個儲蓄所內(nèi)。6.3需求陳述銀行柜員使用柜員終端處理儲戶提交的儲蓄事務(wù)。儲戶可以用現(xiàn)金或支票向自己擁有的某個賬戶內(nèi)存款或開新賬戶,儲戶也可以從自己的賬戶中取款。通常,一個儲戶可能擁有多個賬戶。柜員負(fù)責(zé)把儲戶提交的存款或取款事務(wù)輸進(jìn)柜員終端,接收儲戶交來的現(xiàn)金或支票,或付給儲戶現(xiàn)金。柜員終端與相應(yīng)的分行計(jì)算機(jī)通信,分行計(jì)算機(jī)具體處理針對某個賬戶的事務(wù)并且維護(hù)賬戶。擁有銀行賬戶的儲戶有權(quán)申請領(lǐng)取銀行卡。使用銀行卡可以通過ATM訪問自己的賬戶。銀行卡在ATM上提取現(xiàn)金(即取款),或查詢有關(guān)自己賬戶的信息。6.3需求陳述所謂銀行卡就是一張?zhí)刂频拇趴?,上面有分行代碼和卡號。通常,一張卡可以訪問儲戶的若干個賬戶,但是不一定能訪問這個儲戶的全部賬戶。每張銀行卡僅屬于一個儲戶所有,但是,同一張卡可能有多個副本,因此,必須考慮同時在若干臺ATM上使用同樣的銀行卡的可能性。也就是系統(tǒng)應(yīng)該能夠處理并發(fā)的訪問。6.3需求陳述當(dāng)用戶把銀行卡插入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)用戶選擇取款時,ATM請求用戶輸入取款額。最后,ATM從現(xiàn)金出口吐出現(xiàn)金,并且打印出賬單交給用戶。6.4.建立對象模型面向?qū)ο蠓治鍪滓墓ぷ鳎墙栴}域的對象模型。對象模型描述了現(xiàn)實(shí)世界中的“類與對象”以及它們之間的關(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)用戶的需求變化時,靜態(tài)數(shù)據(jù)結(jié)構(gòu)相對來說比較穩(wěn)定因此,用面向?qū)ο蠓椒ㄩ_發(fā)絕大多數(shù)軟件時,都首先建立對象模型,然后再建立另外兩個子模型。需求陳述、應(yīng)用領(lǐng)域的專業(yè)知識以及關(guān)于客觀世界的常識,是建立對象模型的主要信息來源。6.4建立對象模型建立對象模型的典型工作步驟:確定對象類和關(guān)聯(lián),對于大型復(fù)雜問題還要進(jìn)一步劃分出若干個主題;給類和關(guān)聯(lián)增添屬性,以進(jìn)一步描述它們;利用適當(dāng)?shù)睦^承關(guān)系進(jìn)一步合并和組織類;在建立動態(tài)模型和功能模型之后,確定類中的操作。6.4.1確定類與對象

類與對象是在問題域中客觀存在的,系統(tǒng)分析員的主要任務(wù)就是通過分析找出這些類與對象。首先,找出所有候選的類與對象;然后,從候選的類與對象中篩選掉不正確的或不必要的。

1.找出候選的類與對象對象是對問題域中有意義的事物的抽象,它們既可能是物理實(shí)體,也可能是抽象概念。6.4.1確定類與對象具體地說,大多數(shù)客觀事物可分為下述5類:可感知的物理實(shí)體,例如,汽車、書、房屋等等人或組織的角色,例如,醫(yī)生、教師、雇主、雇員、計(jì)算機(jī)系等等應(yīng)該記憶的事件,例如飛行、演出、訪問、交通事故等等兩個或多個對象的相互作用,通常具有交易或接觸的性質(zhì),例如,購買、納稅、結(jié)婚等等需要說明的概念,例如,政策、保險政策、版權(quán)法等等分析時,可以參照上列5類常見事物,找出在當(dāng)前問題域中的候選類與對象。6.4.1確定類與對象另一種更簡單的分析方法,是所謂的非正式分析,即:以用自然語言書寫的需求陳述為依據(jù)把陳述中的名詞作為類與對象的候選者用形容詞作為確定屬性的線索把動詞作為服務(wù)(操作)的候選者該方式確定的候選者是非常不準(zhǔn)確的,其中往往包含大量不準(zhǔn)確或不必要的事物,因此必須進(jìn)一步嚴(yán)格篩選。建立對象模型-確定類與對象以ATM系統(tǒng)為例,說明非正式分析過程。例子銀行自動取款機(jī)(ATM)系統(tǒng)建立對象模型-確定類與對象認(rèn)真閱讀6.3.2節(jié)給出的需求陳述,從陳述中找出下列名詞,可以把它們作為類與對象的初步的候選者。

銀行、自動取款機(jī)、系統(tǒng)、中央計(jì)算機(jī)、分行計(jì)算機(jī)、柜員機(jī)、網(wǎng)絡(luò)、總行、分行、軟件、成本、市、街道、營業(yè)廳、儲蓄所、柜員、儲戶、現(xiàn)金、支票、賬戶、事務(wù)、日志、通訊鏈路、存折、信用卡、余額、銀行卡、分行代碼、卡號、用戶、副本、信息、密碼、類型、取款額、賬單、訪問。建立對象模型-確定類與對象通常,在需求陳述中不會一個不漏地寫出問題域中所有有關(guān)的對象/類,因此,分析員應(yīng)該根據(jù)領(lǐng)域知識或常識進(jìn)一步把隱含的對象/類提取出來。例如,在ATM系統(tǒng)的需求陳述中雖然沒寫“通信鏈路”和“事務(wù)日志”,但是,根據(jù)領(lǐng)域知識和常識可以知道,在ATM系統(tǒng)中應(yīng)該包含這兩個實(shí)體。篩選出正確的類與對象2.篩選出正確的類與對象僅通過一個簡單、機(jī)械的過程不可能正確地完成分析工作。非正式分析僅僅幫助我們找到一些候選的類與對象,接下來應(yīng)該嚴(yán)格考察每個候選對象,從中去掉不正確的或不必要的,僅保留確實(shí)應(yīng)該記錄其信息或需要其提供服務(wù)的那些對象。篩選出正確的類與對象篩選時主要依據(jù)下列標(biāo)準(zhǔn),刪除不正確或不必要的類與對象。(1)冗余如果兩個名詞(或名詞短語)代表同樣的事物,則應(yīng)該僅保留在此問題域中最富于描述力的名稱。在ATM系統(tǒng)中,儲戶和用戶是重復(fù)的,應(yīng)去掉用戶這個冗余類,因?yàn)?,儲戶更能描述信息,所以保留儲戶?,F(xiàn)金兌換卡、磁卡和副本是重復(fù)的,應(yīng)去掉磁卡和副本這兩個冗余類,因?yàn)?,現(xiàn)金兌換卡更能準(zhǔn)確描述信息,所以保留現(xiàn)金兌換卡。(2)無關(guān)現(xiàn)實(shí)世界中存在許多對象,不能把它們都納入到系統(tǒng)中去,僅需要把本問題密切相關(guān)的對象放在目標(biāo)系統(tǒng)中。有些類在其他問題當(dāng)中可能很重要,但與當(dāng)前要解決的問題無關(guān),同樣也應(yīng)刪除它。在ATM例中,這個系統(tǒng)并不處理分?jǐn)傑浖_發(fā)成本的問題,而且ATM和柜員終端放置的地點(diǎn)與本軟件的關(guān)系也不大。因此,應(yīng)該去掉候選類“成本”、“市”、“街道”、“營業(yè)廳”和“儲蓄所”。篩選出正確的類與對象(3)籠統(tǒng)類應(yīng)當(dāng)是明確的。所以在需求陳述中出現(xiàn)的一些模糊的、泛指的名詞,雖然在初步分析時把它們作為候選的對象/類列出來了,但是,要么系統(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)屬性在需求陳述中有些名詞實(shí)際上描述的是其他對象的屬性,應(yīng)該把這些名詞從候選對象/類中去掉。當(dāng)然,如果某個性質(zhì)具有很強(qiáng)的獨(dú)立性,則應(yīng)把它作為類而不是作為屬性。在ATM系統(tǒng)的例子中,“分行代碼”、“卡號”、“密碼”、“類型”、“現(xiàn)金”、“支票”、“取款額”、“賬單”、“余額”等,實(shí)際上都應(yīng)該作為屬性對待。篩選出正確的類與對象(5)操作在需求陳述中有時可能使用一些既可作為名詞,又可作為動詞的詞,應(yīng)該慎重考慮它們在本問題中的含義,以便正確地決定把它們作為類還是作為類中定義的操作。例如,在打電話中通常把“撥號”作為動詞,當(dāng)構(gòu)造電話模型時確實(shí)應(yīng)該把它作為一個操作,而不是一個類。但是,在開發(fā)電話的自動記賬系統(tǒng)時,“撥號”需要有自己的屬性(例如日期,時間,受話地點(diǎn)等),因此應(yīng)該把它作為一個類??傊?,本身具有屬性需獨(dú)立存在的操作,應(yīng)該作為對象/類。在ATM系統(tǒ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)階段,這些對象/類可能是重要的,但在分析階段過早地考慮它們反而會分散我們的注意力。在ATM系統(tǒng)的例子中,“事務(wù)日志”無非是對一系列事務(wù)的記錄,它的確切表示方式是面向?qū)ο笤O(shè)計(jì)的議題;“通信鏈路”在邏輯上是一種聯(lián)系,在系統(tǒng)實(shí)現(xiàn)時它是關(guān)聯(lián)類的物理實(shí)現(xiàn)。總之,應(yīng)該暫時去掉“事務(wù)日志”和“通信鏈路”這兩個類,在設(shè)計(jì)或?qū)崿F(xiàn)時再考慮它們。篩選出正確的類與對象綜上所述,在ATM系統(tǒng)的例子中,從36種候選對象/類中,經(jīng)過初步篩選,剩下下列11種對象/類:ATM、中央計(jì)算機(jī)、分行計(jì)算機(jī)、柜員終端、總行、分行、柜員、儲戶、賬戶、事務(wù)、現(xiàn)金兌換卡。篩選出正確的類與對象兩個或多個對象之間相互作用、相互依賴的關(guān)系就是關(guān)聯(lián)。在分析確定關(guān)聯(lián)的過程中,不必花過多精力去區(qū)分關(guān)聯(lián)和聚集。1.初步確定關(guān)聯(lián)在需求陳述中使用的描述性動詞或動詞詞組,通常表示關(guān)聯(lián)關(guān)系:大多數(shù)關(guān)聯(lián)可通過直接提取需求中的動詞詞組得出分析需求陳述,還能發(fā)現(xiàn)一些隱含的關(guān)聯(lián)還應(yīng)該與用戶及領(lǐng)域?qū)<矣懻搯栴}域?qū)嶓w間的相互依賴、相互作用關(guān)系,根據(jù)領(lǐng)域知識再進(jìn)一步補(bǔ)充一些關(guān)聯(lián)6.4.2確定關(guān)聯(lián)初步確定關(guān)聯(lián)(1)直接提取動詞短語得出的關(guān)聯(lián)ATM、中央計(jì)算機(jī)、分行計(jì)算機(jī)及柜員終端組成網(wǎng)絡(luò)??傂袚碛卸嗯_ATM。ATM設(shè)在主要街道上。分行提供分行計(jì)算機(jī)和柜員終端。柜員終端設(shè)在分行營業(yè)廳及儲蓄所內(nèi)。分行分?jǐn)傑浖_發(fā)成本。儲戶擁有賬戶。分行計(jì)算機(jī)處理針對賬戶的事務(wù)。分行計(jì)算機(jī)維護(hù)賬戶。柜員終端與分行計(jì)算機(jī)通信。柜員輸入針對賬戶的事務(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ā)的訪問。初步確定關(guān)聯(lián)

(2)需求陳述中隱含的關(guān)聯(lián)總行由各個分行組成。分行保管賬戶??傂袚碛兄醒胗?jì)算機(jī)。系統(tǒng)維護(hù)事務(wù)日志。系統(tǒng)提供必要的安全性。儲戶擁有現(xiàn)金兌換卡。初步確定關(guān)聯(lián)(3)根據(jù)問題域知識得出的關(guān)聯(lián)現(xiàn)金兌換卡訪問賬戶。分行雇用柜員。初步確定關(guān)聯(lián)2.篩選候選關(guān)聯(lián)需經(jīng)過進(jìn)一步篩選,以去掉不正確的或不必要的關(guān)聯(lián)。篩選時主要依據(jù)下述標(biāo)準(zhǔn)刪除候選的關(guān)聯(lián)。(1)已刪除類之間的關(guān)聯(lián)如果在分析確定對象的過程中已經(jīng)刪掉了某個候選對象,則與這個對象有關(guān)的關(guān)聯(lián)也應(yīng)該刪去,或用其他對象重新表達(dá)這個關(guān)聯(lián)。以ATM系統(tǒng)為例,由于已經(jīng)刪去了“系統(tǒng)”、“網(wǎng)絡(luò)”、“市”、“街道”、“成本”、“軟件”、“事務(wù)日志”,“現(xiàn)金”,“營業(yè)廳”、“儲蓄所”、“帳單”等候選類,因此,與這些類有關(guān)的關(guān)聯(lián)也應(yīng)該刪去。篩選ATM、中央計(jì)算機(jī)、分行計(jì)算機(jī)及柜員終端組成網(wǎng)絡(luò)。ATM設(shè)在主要街道上。柜員終端設(shè)在分行營業(yè)廳及儲蓄所內(nèi)。分行分?jǐn)傑浖_發(fā)成本。ATM吐出現(xiàn)金。ATM打印賬單。系統(tǒng)維護(hù)事務(wù)日志。系統(tǒng)提供必要的安全性。篩選(2)與問題無關(guān)的或應(yīng)在實(shí)現(xiàn)階段考慮的關(guān)聯(lián)應(yīng)該把處在本問題域之外的關(guān)聯(lián)或與實(shí)現(xiàn)密切相關(guān)的關(guān)聯(lián)刪去。例如,在ATM中,“系統(tǒng)處理并發(fā)的訪問”并沒有標(biāo)明對象之間的新關(guān)聯(lián),它只不過提醒我們在實(shí)現(xiàn)階段需要使用實(shí)現(xiàn)并發(fā)訪問的算法,以處理并發(fā)事務(wù)。篩選(3)瞬時事件關(guān)聯(lián)應(yīng)該描述問題域的靜態(tài)結(jié)構(gòu),而不應(yīng)該描述一個瞬時事件。例如,在ATM中,“ATM讀現(xiàn)金兌換卡”描述了ATM與用戶交互周期中的一個動作,而并不是ATM與現(xiàn)金兌換卡之間的恒定關(guān)系,因此應(yīng)該刪去。類似地,還應(yīng)該刪去“ATM與用戶交互”這個候選的關(guān)聯(lián)。如果用動作表述的需求隱含了問題域的某種基本結(jié)構(gòu),則應(yīng)該用適當(dāng)?shù)膭釉~詞組重新表示這個關(guān)聯(lián)。例如,在ATM系統(tǒng)的需求陳述中,“中央計(jì)算機(jī)確定事務(wù)與分行的對應(yīng)關(guān)系”隱含了結(jié)構(gòu)上“中央計(jì)算機(jī)與分行通信”的關(guān)系。

篩選(4)三元關(guān)聯(lián)三個或三個以上對象之間的關(guān)聯(lián),大多可以分解為二元關(guān)聯(lián)。例如,在ATM系統(tǒng)中,“分行計(jì)算機(jī)處理針對賬戶的事務(wù)”可分解為“分行計(jì)算機(jī)處理事務(wù)”和“事務(wù)修改賬戶”這樣兩個二元關(guān)聯(lián);“柜員輸入針對賬戶的事務(wù)”可分解為“柜員輸入事務(wù)”和“事務(wù)修改賬戶”這樣兩個二元關(guān)聯(lián);“ATM與中央計(jì)算機(jī)交換關(guān)于事務(wù)的信息”可分解為“ATM與中央計(jì)算機(jī)通信”和“在ATM上的輸入事務(wù)”這樣兩個二元關(guān)聯(lián)。篩選篩選(5)派生關(guān)聯(lián)應(yīng)該刪除那些可以用其他關(guān)聯(lián)定義的冗余關(guān)聯(lián)。例如,在ATM中,“總行擁有多臺ATM”實(shí)質(zhì)上是“總行擁有中央計(jì)算機(jī)”和“ATM與中央計(jì)算機(jī)通信”這兩個關(guān)聯(lián)組合的結(jié)果。而“分行計(jì)算機(jī)維護(hù)賬戶”的實(shí)際含義是“分行保管賬戶”和“事務(wù)修改賬戶”。進(jìn)一步完善3.進(jìn)一步完善正名——應(yīng)該仔細(xì)選擇含義更明確的名字作為關(guān)聯(lián)名。例如,分行提供分行計(jì)算機(jī)和柜員終端--》分行擁有分行計(jì)算機(jī)+分行擁有柜員終端分解——為了能適用于不同的關(guān)聯(lián),必要時應(yīng)該分解以前確定的類與對象。例如,事務(wù)=遠(yuǎn)程事務(wù)+柜員事務(wù)進(jìn)一步完善補(bǔ)充——發(fā)現(xiàn)了遺漏的關(guān)聯(lián)就應(yīng)該及時補(bǔ)上。例如,將事務(wù)分解成上述兩類后,需補(bǔ)充:“柜員輸入柜員事務(wù)”和“柜員事務(wù)輸進(jìn)柜員終端”、“在ATM輸入遠(yuǎn)程事務(wù)”和“遠(yuǎn)程事務(wù)由現(xiàn)金兌換卡授權(quán)”標(biāo)明重?cái)?shù)——應(yīng)該初步判斷各個關(guān)聯(lián)的類型并粗略地確定關(guān)聯(lián)的重?cái)?shù)。ATM系統(tǒng)原始的類圖6.4.3劃分主題對于大型、復(fù)雜的系統(tǒng),為了降低復(fù)雜程度,通常把系統(tǒng)再進(jìn)一步劃分成不同的主題,即在概念上把系統(tǒng)包含的內(nèi)容分解成若干個范疇。對于小型系統(tǒng),無須引入主題層。對于含有較多對象的系統(tǒng),則往往先識別出類與對象和關(guān)聯(lián),然后劃分主題,并用它作為指導(dǎo)開發(fā)者和用戶觀察整個模型的一種機(jī)制。對于規(guī)模極大的系統(tǒng),則首先由高級分析員粗略地識別對象和關(guān)聯(lián),然后初步劃分主題,經(jīng)進(jìn)一步分析,對系統(tǒng)結(jié)構(gòu)有風(fēng)深入的了解之后,再進(jìn)一步修改和精煉主題。6.4.3劃分主題應(yīng)該按問題領(lǐng)域而不是用功能分解方法來確定主題。此外,應(yīng)該按照使不同主題內(nèi)的對象相互間依賴和交互最少的原則來確定主題。以ATM系統(tǒng)為例,我們可以把它劃分成“總行”、“分行”和“ATM”等三個主題??傂蟹中蠥TM6.4.3劃分主題6.4.4確定屬性屬性是對象的性質(zhì),如名字、重量、速度或顏色。確定屬性的過程包括分析和選擇兩個步驟。1.分析通常,陳述中用名詞詞組表示屬性(例如,汽車的顏色)

,形容詞表示可枚舉的具體屬性(例如,紅色的)。但不可能在需求陳述中找出全部屬性,還必須借助于領(lǐng)域知識和常識才能分析得出需要的屬性應(yīng)該僅考慮與具體應(yīng)用密切相關(guān)的屬性,不要考慮那些超出所要解決的問題范圍的屬性。首先提取最重要的屬性,以后逐步把其余屬性增添進(jìn)去。6.4.4確定屬性2.選擇認(rèn)真考慮經(jīng)初步分析而確定下來的那些屬性,從中刪除不正確的或不必要的屬性。(1)誤把對象當(dāng)作屬性如果某個實(shí)體的獨(dú)立存在比它的值更重要,則應(yīng)把它作為一個對象而不是對象的屬性。例如,老板是一個對象而薪水是一個屬性。在具體應(yīng)用領(lǐng)域中具有自身性質(zhì)的實(shí)體,必然是對象。同一個實(shí)體在不同應(yīng)用領(lǐng)域中,到底應(yīng)該作為對象還是屬性,需要具體分析才能確定。例如,在郵政表中,城市可以認(rèn)為是一個屬性,而在人口普查中,城市是一個對象。一個在特定應(yīng)用中本身具有特性的實(shí)體是一個對象。6.4.4確定屬性(2)誤把關(guān)聯(lián)類的屬性當(dāng)作一般對象的屬性如果某個性質(zhì)依賴于某個關(guān)聯(lián)鏈的存在,則該性質(zhì)是關(guān)聯(lián)類的屬性。(3)把限定誤當(dāng)成屬性如果把某個屬性值固定下來以后能減少關(guān)聯(lián)的重?cái)?shù),則應(yīng)該把這個屬性重新表述成一個限定詞。在ATM系統(tǒng)中,“分行代碼”、“賬號”、“雇員號”等都是限定詞。6.4.4確定屬性(4)誤把內(nèi)部狀態(tài)當(dāng)成了屬性如果一個屬性描述的是一個對象的內(nèi)部狀態(tài),它對對象外部是不可見的,則從分析中刪去它。(5)過于細(xì)化在分析階段應(yīng)該忽略那些對大多數(shù)操作都沒有影響的屬性。(6)存在不一致的屬性類應(yīng)該是簡單而且一致的。如果得出一些看起來與其他實(shí)行毫不相關(guān)的屬性,則應(yīng)該考慮把該類分解成兩個不同的類。6.4.4確定屬性6.4.5識別繼承關(guān)系確定了類中應(yīng)該定義的屬性之后,就可以用繼承去組織類以共享公共結(jié)構(gòu)。繼承關(guān)系的建立實(shí)質(zhì)上是知識抽取的過程,它反映出一定深度的領(lǐng)域知識,因此必須有領(lǐng)域?qū)<业拿芮信浜喜拍芡瓿???梢允褂孟率鰞煞N方法建立繼承關(guān)系:(1)自底向上:抽象出現(xiàn)有類的共性(公共屬性)泛化出父類,這模擬了人類的演繹思維過程。例如,在ATM系統(tǒng)中,“遠(yuǎn)程事務(wù)”和“柜員事務(wù)”是類似的,可以泛化出父類“事務(wù)”;類似地,可以從“ATM”和“柜員終端”泛化出父類“輸入站”。6.4.5識別繼承關(guān)系自底向上也稱為從特殊類發(fā)現(xiàn)一般類。公司職員股東姓名身分證號碼……股份……職員工資……………………股東姓名身分證號碼股份…………職員姓名身分證號碼工資…………?6.4.5識別繼承關(guān)系(2)自頂向下:把現(xiàn)有類細(xì)化成更具體的子類,這模擬了人類的演繹思維過程。利用多重繼承可以提高共享程度,但是同時也增加了概念上以及實(shí)現(xiàn)時的復(fù)雜程度。使用多重繼承機(jī)制時,通常應(yīng)該指定一個主要父類,從它繼承大部分屬性和行為;次要父類只補(bǔ)充一些屬性和行為。6.4.5識別繼承關(guān)系自頂向下也稱為從一般類發(fā)現(xiàn)特殊類。公司職員股東姓名身分證號碼……股份……職員工資……公司職員姓名身分證號碼股份工資…………………………??ATM現(xiàn)有金額付出金額輸入站柜員終端柜員事務(wù)事務(wù)類型日期金額遠(yuǎn)程事務(wù)中央計(jì)算機(jī)站號分行代碼通信總行名總行分行代碼擁有組成分行計(jì)算機(jī)站號通信通信分行站號擁有雇員號卡號賬號分行名擁有柜員姓名輸入1+雇傭儲戶姓名地址賬戶余額限額類型現(xiàn)金兌換卡密碼授權(quán)擁有1+1+1+訪問1+修改保管發(fā)放擁有1+輸入1+6.4.5識別繼承關(guān)系6.4.6反復(fù)修改僅僅經(jīng)過一次建模過程很難得到完全正確的對象模型。軟件開發(fā)過程就是一個多次反復(fù)修改、逐步完善過程。在建模的任何一個步驟中,如果發(fā)現(xiàn)了模型的缺陷,都必須返回前期階段進(jìn)行修改。面向?qū)ο蟮母拍詈头栐谡麄€開發(fā)過程中都是一致的,遠(yuǎn)比使用SA、SD更容易實(shí)現(xiàn)反復(fù)修改及逐步完善的過程。有些細(xì)化工作(如定義服務(wù))是在建立了動態(tài)模型和功能模型之后才進(jìn)行的。6.4.6反復(fù)修改對于ATM系統(tǒng),需作以下修改:1.分解“現(xiàn)金兌換卡”類“現(xiàn)金兌換卡”有兩個相對獨(dú)立的功能,它既是鑒別儲戶使用ATM的權(quán)限的卡,又是ATM獲得分行代碼和卡號等數(shù)據(jù)的數(shù)據(jù)載體。因此把“現(xiàn)金兌換卡”類分解為“卡權(quán)限”和“現(xiàn)金兌換卡”兩個類。前一個類標(biāo)志儲戶訪問賬戶的權(quán)限,后一個類是含有分行代碼和卡號的數(shù)據(jù)載體。多張現(xiàn)金兌換卡可能對應(yīng)著相同的訪問權(quán)限。6.4.6反復(fù)修改2.“事務(wù)”由“更新”組成一個事務(wù)包含對賬戶的若干次更新,更新指的是對賬戶所做的一個動作(取款、存款或查詢)?!案隆彪m然代表一個動作,但是它有自己的屬性(類型、金額等),應(yīng)該獨(dú)立存在,因此應(yīng)該把它作為類。3.把“分行”與“分行計(jì)算機(jī)”合并區(qū)分“分行”與“分行計(jì)算機(jī)”,對于本系統(tǒng)并沒有多大意義,為簡單起見,應(yīng)該把它們合并。類似地,合并“總行”和“中央計(jì)算機(jī)”。6.4.6反復(fù)修改6.5建立動態(tài)模型對于僅存儲靜態(tài)數(shù)據(jù)的系統(tǒng)來說(如數(shù)據(jù)庫),動態(tài)模型并沒有什么意義。然而在開發(fā)交互系統(tǒng)時,動態(tài)模型卻起著很重要的作用。建立動態(tài)模型的第一步,是編寫典型交互行為。接下來從腳本中提取出事件,確定觸發(fā)每個事件的動作對象以及接受時的目標(biāo)對象。第三步,排列事件發(fā)生的次序,確定每個對象可能有的狀態(tài)及狀態(tài)間的轉(zhuǎn)換關(guān)系,并用狀態(tài)圖描繪它們。最后,比較各個對象的狀態(tài)圖,檢查它們之間的一致性,確保事件之間的匹配。6.5.2編寫腳本腳本:腳本是指系統(tǒng)在某一執(zhí)行期內(nèi)出現(xiàn)的一系列事件。腳本描述用戶(或其他外部設(shè)備)與目標(biāo)系統(tǒng)之間的一個或多個典型的交互過程(正常和異常情況),以便對目標(biāo)系統(tǒng)的行為有更具體的認(rèn)識。編寫腳本的目的,是保證不遺漏重要的交互步驟,它有助于確保整個交互過程的正確性和清晰性。腳本描寫的范圍并不是固定的,既可以包括系統(tǒng)中發(fā)生的全部事件,也可以只包括由某些特定對象觸發(fā)的事件。腳本描寫的范圍主要由編寫腳本的具體目的決定。6.5.2編寫腳本編寫腳本的過程,實(shí)質(zhì)上就是分析確定用戶對系統(tǒng)交互行為的要求的過程。在編寫腳本的過程中,應(yīng)該與用戶充分交換意見,編寫后還需要經(jīng)過他們審查與修改。編寫腳本時:首先編寫正常情況的腳本然后考慮特殊情況,例如輸入或輸出的數(shù)據(jù)為最大值(或最小值)最后考慮出錯情況,例如,輸入的值為非法值或響應(yīng)失敗6.5.2編寫腳本腳本描述事件序列。每當(dāng)系統(tǒng)中的對象與用戶(或其他外部設(shè)備)交換信息時,就發(fā)生一個事件所交換的信息值就是該事件的參數(shù)(例如,“輸入密碼”事件的參數(shù)是所輸入的密碼)也有許多事件是無參數(shù)的,這樣的事件僅傳遞一個信息——該事件已經(jīng)發(fā)生了對于每個事件,都應(yīng)該指明觸發(fā)該事件的動作對象(例如,系統(tǒng)、用戶或其他外部事物)、接受事件的目標(biāo)對象以及該事件的參數(shù)。6.5.2編寫腳本6.5.2編寫腳本6.5.2設(shè)想用戶界面大多數(shù)交互行為都可以分為應(yīng)用邏輯和用戶界面兩部分。通常,系統(tǒng)分析員首先集中精力考慮系統(tǒng)的信息流和控制流,而不是首先考慮用戶界面。事實(shí)上,采用不同界面(例如,命令行或圖形用戶界面),可以實(shí)現(xiàn)同樣的程序邏輯。應(yīng)用邏輯是內(nèi)在的、本質(zhì)的內(nèi)容,用戶界面是外在的表現(xiàn)形式。動態(tài)模型著重表示應(yīng)用系統(tǒng)的控制邏輯。6.5.2設(shè)想用戶界面用戶界面的美觀程度、方便程度、易學(xué)程度以及效率等等,是用戶使用系統(tǒng)時最先感受到的,用戶對系統(tǒng)的“第一印象”往往從界面得來,用戶界面的好壞往往對用戶是否喜歡、是否接受一個系統(tǒng)起很重要的作用。因此,在分析階段也不能完全忽略用戶界面。在這個階段用戶界面的細(xì)節(jié)并不太重要,重要的是在這種界面下的信息交換方式。不經(jīng)過實(shí)際使用很難評價一個用戶界面的優(yōu)劣,因此,軟件開發(fā)人員往往快速地建立起用戶界面的原型,供用戶試用與評價。6.5.2設(shè)想用戶界面6.5.3畫事件跟蹤圖完整、正確的腳本為建立動態(tài)模型奠定了必要的基礎(chǔ)。但是,用自然語言書寫的腳本往往不夠簡明,而且有時在閱讀時會有二義性。為了有助于建立動態(tài)模型,通常在畫狀態(tài)圖之前先畫出事件跟蹤圖。為此首先需要進(jìn)一步明確事件及事件與對象的關(guān)系。1.確定事件應(yīng)仔細(xì)分析每個腳本,以提取出所有外部事件。事件包括用戶(或外部設(shè)備)和系統(tǒng)交互的所有信號、輸入、輸出、中斷、動作等。從腳本中容易找出正常事件,但是,應(yīng)該小心仔細(xì),不要遺漏了異常事件和出錯條件。6.5.3畫事件跟蹤圖傳遞信息的對象的動作也是事件。如:輸入密碼、插卡、ATM吐現(xiàn)金等都是事件。大多數(shù)對象相互之間的交互行為都對應(yīng)著事件。應(yīng)該把控制流產(chǎn)生相同效果的那些事件組合在一起作為一類事件,并給它們?nèi)∫粋€惟一的名字。例如,“吐出現(xiàn)金”是一個事件類,盡管這類事件中的每個個別事件的參數(shù)值不同(吐出的現(xiàn)金數(shù)額不同),然而這并不影響控制流。注意,應(yīng)該把對控制流有不同影響的那些事件區(qū)分開來,不誤誤把它們組合在一起。如:帳戶有效、帳戶無效、密碼錯等都是不同的事件。6.5.3畫事件跟蹤圖經(jīng)過分析,應(yīng)區(qū)分出每類事件的發(fā)送和接受對象。一類事件相對它的發(fā)送對象來說是輸出事件,但是相對它的接受對象來說則是輸入事件。有時一個對象把事件發(fā)送給自己,則該事件既是輸出事件,又是輸入事件。2.畫出事件跟蹤圖從腳本中提取出各類事件并確定了每類事件的發(fā)送對象和接受對象之后,就可以用事件跟蹤圖把事件序列以及事件與對象的關(guān)系,形象、清晰地表示出來。事件跟蹤圖實(shí)質(zhì)上是擴(kuò)充的腳本,也可以認(rèn)為它是UML順序圖的簡化形式。6.5.3畫事件跟蹤圖在事件跟蹤圖中:一條豎線代表一個對象,每個事件用一條水平的箭頭線表示,箭頭方向從事件的發(fā)送對象指向接受對象,時間從上向下遞增,即是畫最上面的水平箭頭線代表最先發(fā)生的事件,畫在最下面的水平箭頭線所代表的事件最晚發(fā)生。箭頭線之間的間距并沒有具體含義,圖中僅用箭頭線在垂直方向上的相對位置表示事件發(fā)生的先后,并不表示兩個事件之間的精確時間差。儲戶ATM總行分行插卡要求密碼輸入密碼請求驗(yàn)證賬戶請求分行驗(yàn)證賬戶賬戶有效賬戶有效要求事務(wù)類型輸入類型要求輸入取款額輸入取款額請求處理事務(wù)請求分行處理事務(wù)分行事務(wù)成功事務(wù)成功吐出現(xiàn)金請求拿走現(xiàn)金拿走現(xiàn)金請求繼續(xù)此事務(wù)結(jié)束打印賬單退卡拿走卡顯示主屏幕6.5.3畫事件跟蹤圖6.5.3畫狀態(tài)圖狀態(tài)圖:描繪事件和對象狀態(tài)的關(guān)系。當(dāng)對象接受了一個事件以后,它的下個狀態(tài)取決于當(dāng)前狀態(tài)及所接受的事件。由事件引起的狀態(tài)改變稱為“轉(zhuǎn)換”。如一個事件并不引起當(dāng)前狀態(tài)發(fā)生轉(zhuǎn)換,則可忽略這個事件。通常,用一張狀態(tài)圖描繪一類對象的行為,它指明了由事件序列引出的狀態(tài)序列。并不時所有的對象類均要畫狀態(tài)圖。重點(diǎn)在有重要交互行為的對象。6.5.3畫狀態(tài)圖從一張事件跟蹤圖出發(fā)畫狀態(tài)圖,應(yīng)該集中精力僅考慮影響一類對象的事件,也就是說,僅考慮事件跟蹤圖中那些箭頭線:把這些事件作為狀態(tài)圖中的有向邊(即箭頭線),在有向邊上標(biāo)上事件名。兩個事件之間的間隔就是一個狀態(tài)。一般來說,如果同一個對象對相同事件的響應(yīng)不同,則這個對象處在不同狀態(tài)。應(yīng)該盡量給每個狀態(tài)取一個有意義的名字。通常,從事件跟蹤圖中當(dāng)前考慮的豎線射出的箭頭線,是這條豎線代表的對象到達(dá)某個狀態(tài)時所做的行為(往往是導(dǎo)致另一類對象狀態(tài)轉(zhuǎn)換的事件)。6.5.3畫狀態(tài)圖根據(jù)一張事件跟蹤圖畫出狀態(tài)圖之后,再把其他腳本的事件跟蹤圖合并到已畫出的狀態(tài)圖中。為此需要在狀態(tài)圖中找出以前考慮的分支點(diǎn),然后把其他腳本中的事件序列插入到已有的狀態(tài)圖中,作為一條可選的路徑。考慮完正常事件之后再考慮邊界情況和特殊情況,其中包括在不適當(dāng)時候發(fā)生的事件(例如,系統(tǒng)正在處理某個事務(wù)時,用戶要求取消該事務(wù))。有時用戶(或外部設(shè)備)不能做出快速響應(yīng),然而某些資源又必須及時收回,于是在一定間隔就產(chǎn)生了“超時”事件。6.5.3畫狀態(tài)圖對用戶出錯情況往往需要花費(fèi)很多精力處理,并且會使原來清晰、緊湊的程序結(jié)構(gòu)變得復(fù)雜、繁瑣,但是,出錯處理是不能省略的。當(dāng)狀態(tài)圖覆蓋了所有腳本,包含了影響某些對象狀態(tài)的全部事件時,該類的狀態(tài)圖就構(gòu)造出來了。總行類的狀態(tài)圖分行類的狀態(tài)圖6.5.5審查動態(tài)模型各個類的狀態(tài)圖通過共享事件合并起來,構(gòu)成了系統(tǒng)的動態(tài)模型。在完成了每個具有重要交互行為的類的狀態(tài)圖之后,應(yīng)該檢查系統(tǒng)級的完整性和一致性。一般來說,每個事件都應(yīng)該既有發(fā)送對象又有接受對象,當(dāng)然,有時發(fā)送者和接受者是同一對象。對于沒有前驅(qū)或沒有后繼的狀態(tài)應(yīng)該著重審查,如果這個狀態(tài)既不

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論