第八章 系統(tǒng)分析與設(shè)計(jì)方法
8.1 定義問題與歸結(jié)模型
定義問題的過程包括:理解真實(shí)世界中的問題和用戶的額需要,并提出滿足這些需要的解決方案的過程。
8.1.1 問題分析
目標(biāo)就是在開發(fā)之前對要解決的問題有一個更透徹的理解。為了達(dá)到這一目標(biāo),通常需要經(jīng)過在問題定義上達(dá)成共識,理解問題的本質(zhì),確定項(xiàng)目干系人和用戶,定義系統(tǒng)的邊界和確定系統(tǒng)實(shí)現(xiàn)的約束這五個步驟。
1. 在問題定義上達(dá)成共識
應(yīng)當(dāng)將問題用標(biāo)準(zhǔn)的格式寫出來,根據(jù)UP的建議,應(yīng)當(dāng)包括以下幾個方面的要素。
- 問題概述:用簡短的幾句話,將所理解的問題本質(zhì)描述出來;
- 影響:說明該問題將會對哪些項(xiàng)目干系人(風(fēng)險(xiǎn)承擔(dān)者)產(chǎn)生影響;
- 結(jié)果:確定問題對項(xiàng)目干系人和商業(yè)活動或產(chǎn)生什么樣的影響;
- 優(yōu)點(diǎn):概要性的提出解決方案,并列舉出該解決方案的主要優(yōu)點(diǎn)。
在問題定義上達(dá)成共識,能夠有效的將開發(fā)團(tuán)隊(duì)的理解與用戶的需求達(dá)成一致,這樣就能夠使得整個系統(tǒng)的開發(fā)沿著合理的方向發(fā)展。
2. 理解問題的本質(zhì)
一種技術(shù)是“根本原因”分析,這是一種提示問題或其表象的根本原因的系統(tǒng)化方法。在實(shí)際的應(yīng)用中,長使用因果魚骨圖和累托圖兩種方法。
因果魚骨圖
是一種有效的探尋問題根源的技術(shù),它通過直觀的圖形找出問題或現(xiàn)象的所有潛在原因,從而追蹤出問題的根源。提供了一種運(yùn)用集體智慧解決問題的方法。在使用時,通常按照以下步驟進(jìn)行。
- 將問題簡明扼要的寫在右邊的方框里;
- 確定問題潛在原因的主要類別,把它們連到魚的脊骨上;
- 用頭腦風(fēng)暴方法尋找原因并歸類。
帕累托法
是采用釋放圖的形式,根據(jù)問題的相對頻率或大小從高往低將序排列,幫助設(shè)計(jì)師將精力集中在重要的問題上。它為80%的問題找到關(guān)鍵的20%的 原因,可以一目了然的顯示出各個問題的相對重要程度,有助于預(yù)防在解決了一些問題后,卻使另外一些問題變得更糟的現(xiàn)象發(fā)生。在使用時,通常按照以下步驟進(jìn)行:
- 明確問題:也就是前面達(dá)成共識的問題定義
- 找出問題的各種可能原因
- 選擇評價(jià)標(biāo)準(zhǔn)和考察期限:最常用的評價(jià)標(biāo)準(zhǔn)包括頻率(占總原因的百分比)和費(fèi)用(產(chǎn)生的影響),而考察的期限則應(yīng)具有相應(yīng)問題的代表性,并不是越長越好。
- 收集各種原因發(fā)生的頻率及費(fèi)用數(shù)據(jù);
- 將原因按照發(fā)生的頻率或費(fèi)用從大到小排列起來;
- 將原因排在橫軸上,頻率或費(fèi)用排列在縱軸上。
3. 確定項(xiàng)目干系人和用戶
要想有效的解決問題,必須了解用戶和其他相關(guān)的項(xiàng)目干系人(任何將從新系統(tǒng)或應(yīng)用的實(shí)現(xiàn)中受到實(shí)質(zhì)性影響的人)的需要。
4. 定義系統(tǒng)的邊界
系統(tǒng)的邊界是指解決方案系統(tǒng)和現(xiàn)實(shí)世界之間的邊界。在系統(tǒng)邊界中,信息以輸入和輸出的形式流入系統(tǒng)并由系統(tǒng)流向系統(tǒng)外的用戶,所有和系統(tǒng)的交互都是通過系統(tǒng)和外部的接口進(jìn)行的。在定義系統(tǒng)邊界時,將世界分為兩個部分:系統(tǒng)及與系統(tǒng)進(jìn)行交互的事物。
要描述系統(tǒng)的邊界有兩種方法:一種是結(jié)構(gòu)化分析中的“上下文范圍圖”,另一種則是面向?qū)ο蠓治鲋械摹坝美P汀薄?/p>
- 上下文范圍圖。也就是數(shù)據(jù)流圖中的頂層圖,他是一個反映領(lǐng)域信息的模型,能夠清晰的顯示出系統(tǒng)的工作職責(zé)和相鄰系統(tǒng)的職責(zé)起止支出,從而讓讀者能夠從宏觀的層面去了解系統(tǒng)。
- 用例模型。通過引入?yún)⑴c者來描述“和系統(tǒng)進(jìn)行交互的事物”
然后,在根據(jù)每個參與者的功能需求,識別出代表系統(tǒng)功能的用例,從而界定系統(tǒng)的邊界。
5. 確定系統(tǒng)實(shí)現(xiàn)的約束
由于各種因素的存在,會對解決方案的選擇造成一定的限制,成這種限制為約束。每條約束都將影響到最后的解決方案的形成,甚至?xí)绊懯欠衲軌蛱岢鼋鉀Q方案。
8.1.2 問題定義
對于一個問題的完整定義,通常應(yīng)包括目標(biāo)、功能需求和非功能需求三個方面。
1. 目標(biāo)
指構(gòu)建系統(tǒng)的原因,他是最高層次的用戶需求,是業(yè)務(wù)上的需要,而功能、性能需求則必須是以某種形式對該目標(biāo)作出貢獻(xiàn)。在描述目標(biāo)時,應(yīng)該注意一下幾個方面。
- 優(yōu)勢:目標(biāo)應(yīng)該不僅僅是解決問題,還要提供業(yè)務(wù)上的優(yōu)勢;
- 度量:不僅要說明業(yè)務(wù)的優(yōu)勢,而且還必須提供度量這種優(yōu)勢的標(biāo)準(zhǔn);
- 合理性:要確保完成解決方案所需的工作量少于所獲得的業(yè)務(wù)優(yōu)勢,這才是合理的解決方案;
- 可行性:要探尋能夠滿足度量標(biāo)準(zhǔn)的解決方案;
- 可達(dá)成性:對于組織而言,是否具備獲取該系統(tǒng)的技能,構(gòu)件完成狗是否能夠操作它。
2. 功能需求
是用來指明系統(tǒng)必須做的事情,只有這些行為的存在,才有系統(tǒng)存在的價(jià)值。功能需求是在與用戶或某個業(yè)務(wù)人員交談時,他們所描述的內(nèi)容是為了完成他們某部分的工作而必須做的事情。而在設(shè)計(jì)解決方案時,會遇到一些限制條件,這些東西也是“系統(tǒng)需求”的一部分,不過應(yīng)該以設(shè)計(jì)約束或非功能需求形式指定。
需求的二義性主要體現(xiàn)在以下幾個方面:
- 同名異義的詞。
- 代詞。
3. 非功能需求
是系統(tǒng)必備的屬性,這些屬性可以看做是一些使產(chǎn)品更有吸引力、易用、快速或可靠的特征或?qū)傩浴7枪δ苄枨蟛⒉桓淖儺a(chǎn)品的功能,它是為工作賦予特征的。功能需求是以動詞為特征的,而非功能需求則是以副詞為特征的。非功能需求主要包括以下幾種。
- 敏感需求:即產(chǎn)品外觀的精神實(shí)質(zhì),也就是與用戶界面的觀感相關(guān)的一組屬性。
- 易用性需求:也就是產(chǎn)品的易用程度,以及特殊的可用性考慮,通常包括用戶的接受率、因?yàn)橐朐摦a(chǎn)品而提高的生產(chǎn)效率、錯誤率、特殊人群的可用性等指標(biāo);
- 性能需求:也就是關(guān)于功能實(shí)現(xiàn)要求有多快、多可靠、多少處理量及多精確的約束。
- 可操作性需求:衡量產(chǎn)品的操作環(huán)境,以及對該操作環(huán)境必須考慮的問題;
- 可維護(hù)性和可移植性需求:期望的改變,以及完成改變允許的時間;
- 安全性需求:產(chǎn)品的安全保密性,通常體現(xiàn)為保密性、完整性和可獲得性;
- 文化和政策需求:由產(chǎn)品的開發(fā)者和使用者所帶來的特別需求;
- 法律需求:哪些法律和標(biāo)準(zhǔn)適用于本產(chǎn)品。
8.2 需求分析與軟件設(shè)計(jì)
8.2.1 需求分析的任務(wù)與過程
需求分析主要就是確定待開發(fā)軟件的功能、性能、數(shù)據(jù)、界面等要求。需求分析的實(shí)現(xiàn)步驟通常包括:獲取當(dāng)前系統(tǒng)的物理模型、抽象出當(dāng)前系統(tǒng)的邏輯模型、建立目標(biāo)系統(tǒng)的邏輯模型三個部分。具體來說,修分析階段可以分成4個方面:
- 問題識別:用于發(fā)現(xiàn)需求、描述需求,以此來預(yù)先估計(jì)以后系統(tǒng)可能達(dá)到的目標(biāo)。
- 分析與綜合:對問題進(jìn)行分析,然后在此基礎(chǔ)上整合出解決方案。這個步驟是經(jīng)常進(jìn)行的,常用的方法有面向數(shù)據(jù)流的結(jié)構(gòu)化分析方法,面向數(shù)據(jù)結(jié)構(gòu)的Jackson方法,面向?qū)ο蟮姆治龇椒ㄒ约坝糜诮討B(tài)模型的狀態(tài)遷移圖和Petri網(wǎng)。
- 編制需求分析的文檔:也就是對已經(jīng)確定的需求進(jìn)行文檔化描述,該文檔通常稱為“需求規(guī)格說明書”。
- 需求分析與評審:主要是對功能的正確性、完整性和清晰性,以及其它需求給予評價(jià)。
1. 需求的分類
- 功能需求:指系統(tǒng)必須完成的,為了向它的用戶提供有用的功能,產(chǎn)品必須執(zhí)行的動作。
- 非功能需求:指產(chǎn)品必須具備的屬性或品質(zhì),如性能、響應(yīng)時間、可靠性、容錯性、擴(kuò)展性等。
- 設(shè)計(jì)約束:也稱為限制條件、補(bǔ)充規(guī)約。
除了三種需求之外,還有業(yè)務(wù)需求、用戶需求、系統(tǒng)需求這三個處于不同層面的概念
- 業(yè)務(wù)需求:指反映組織結(jié)構(gòu)或客戶對系統(tǒng)、產(chǎn)品高層次的目標(biāo)需求,通常問題定義本身就是業(yè)務(wù)需求。
- 用戶需求:指描述用戶使用產(chǎn)品必須要完成什么任務(wù),怎么完成的需求,通常是在問題定義的基礎(chǔ)上進(jìn)行用戶訪談、調(diào)查,對用戶使用的場景進(jìn)行整理,從而建立從用戶角度出發(fā)的需求。
- 系統(tǒng)需求:是從系統(tǒng)的角度來說明軟件的需求,它包括用特性說明的功能需求、質(zhì)量屬性、肺功能需求及設(shè)計(jì)約束。
2. 需求工程
就是包括創(chuàng)建和維護(hù)系統(tǒng)需求文檔所必須的一切活動的過程,主要包括需求開發(fā)和需求管理兩大工作。
- 需求開發(fā):包括需求捕獲、需求分析、編寫規(guī)格說明書和需求驗(yàn)證4個階段。在這個階段需要完成確定產(chǎn)品所期望的用戶類型,獲取每種用戶類型的需求,了解實(shí)際用戶任務(wù)和目標(biāo)這些任務(wù)所支持的業(yè)務(wù)需求、分析源于用戶的信息、對需求進(jìn)行優(yōu)先級分類、將所收集的需求編寫成為軟件規(guī)格說明書和需求分析模型,對需求進(jìn)行評審等工作。
- 需求管理:通常包括定義需求基線、處理需求變更、需求跟蹤等方面的工作。
這兩個方面是相輔相成的,需求開發(fā)是主線,是目標(biāo);需求管理是支持,是保障。換句話說,需求開發(fā)是努力更清晰,更明確的掌握客戶對系統(tǒng)的需求;而需求管理管理則是對需求的變化進(jìn)行管理的過程。
需求分析方法
- 結(jié)構(gòu)化分析方法。
- 軟系統(tǒng)方法
- 面向?qū)ο蠓治龇椒?/li>
- 面向問題域的分析PDOA
8.2.2 如果進(jìn)行系統(tǒng)設(shè)計(jì)
優(yōu)秀的系統(tǒng)設(shè)計(jì)一般在以下幾個方面都很出色。
- 組件的獨(dú)立性。審視自己設(shè)計(jì)的系統(tǒng),是否做到了高內(nèi)聚、低耦合?
- 例外的識別和處理。
- 防錯和容錯。
8.2.3 軟件設(shè)計(jì)的任務(wù)與活動
軟件設(shè)計(jì)是一個把軟件需求變換成軟件表示的過程,最初這種表示只是描繪出軟件的總體框架,然后再進(jìn)一步細(xì)化,并在此框架中填入細(xì)節(jié)。
1. 軟件設(shè)計(jì)的兩個階段
- 概要設(shè)計(jì)。也稱為高層設(shè)計(jì),將軟件需求轉(zhuǎn)化為數(shù)據(jù)結(jié)構(gòu)和軟件的系統(tǒng)結(jié)構(gòu)。例如,如果采用結(jié)構(gòu)化設(shè)計(jì),則將從宏觀的角度講軟件劃分成各個組成模塊,病確定模塊的功能及模塊之間的調(diào)用關(guān)系。
- 詳細(xì)設(shè)計(jì)。也稱為低層設(shè)計(jì),將對結(jié)構(gòu)表示進(jìn)行細(xì)化,得到詳細(xì)的數(shù)據(jù)結(jié)構(gòu)與算法。同樣的,如果采用結(jié)構(gòu)化設(shè)計(jì),則詳細(xì)設(shè)計(jì)的任務(wù)就是為每個模塊進(jìn)行設(shè)計(jì)。
2. 主要的設(shè)計(jì)方法比較
8.3 結(jié)構(gòu)化分析與設(shè)計(jì)
8.3.1 結(jié)構(gòu)化分析
結(jié)構(gòu)化分析方法的基本思想是自頂向下逐層分解。分解和抽象是人們控制問題復(fù)雜性的兩種基本手段。將一個大問題逐層逐級分解為最底層的問題,就是分解過程。
結(jié)構(gòu)化分析與面向?qū)ο蠓治龇椒ㄖg的最大差別是:結(jié)構(gòu)化分析方法把系統(tǒng)看做一個過程的集合體,包括人完成的和電腦完成的;而面向?qū)ο蠓椒▌t把系統(tǒng)看成一個相互影響的對象集。結(jié)構(gòu)化分析方法的特點(diǎn)是利用數(shù)據(jù)流圖來幫助人們理解問題,對問題進(jìn)行分析。
結(jié)構(gòu)化分析方法一般包括以下工具:數(shù)據(jù)流圖DFD、數(shù)據(jù)字典DD、結(jié)構(gòu)化語言、判定表、判定樹。
結(jié)構(gòu)化系統(tǒng)分析方法從總體上看是一種強(qiáng)烈依賴數(shù)據(jù)流圖的自頂向下的建模方法。
1. 結(jié)構(gòu)化分析的工作步驟
- 研究“物質(zhì)環(huán)境”:首先,應(yīng)畫出當(dāng)前系統(tǒng)(可能是非計(jì)算機(jī)系統(tǒng),或是半計(jì)算機(jī)系統(tǒng))的數(shù)據(jù)流圖,說明系統(tǒng)的輸入、輸出數(shù)據(jù)流,說明系統(tǒng)的數(shù)據(jù)流情況,以及經(jīng)歷了哪些處理過程。這個過程可以幫助分析員有效的理解業(yè)務(wù)環(huán)境,在與用戶的充分溝通與交流中完成。
- 建立系統(tǒng)邏輯模型。當(dāng)物理模型建立之后,接下來的工作就是畫出相對于真實(shí)系統(tǒng)的等價(jià)邏輯數(shù)據(jù)流圖。在前一步驟建立的數(shù)據(jù)流圖的基礎(chǔ)上,將所有自然數(shù)據(jù)流都轉(zhuǎn)成等價(jià)的邏輯流。
- 劃清人機(jī)界限。最后,確定在系統(tǒng)邏輯模型中,哪些將采用自動化完成,哪些仍然保留手工操作。
2. 數(shù)據(jù)流圖
DFD是一種圖形化的系統(tǒng)模型,它在一張圖中展示信息系統(tǒng)的主要需求,即輸入、輸出、處理(過程)、數(shù)據(jù)存儲。DFD包括以下幾個基本元素
- 過程:也稱為加工,一步步的執(zhí)行指令,完成輸入到輸出的轉(zhuǎn)換。
- 外部實(shí)體:也稱為源/宿,系統(tǒng)之外的數(shù)據(jù)源或目的。
- 數(shù)據(jù)存儲:也稱為文件,存放數(shù)據(jù)的地方,一般是以文件、數(shù)據(jù)庫等形式出現(xiàn)。
- 數(shù)據(jù)流:從一處到另一處的數(shù)據(jù)流向,數(shù)從數(shù)據(jù)或數(shù)據(jù)到一個過程的數(shù)據(jù)流。
- 實(shí)時連接:當(dāng)過程執(zhí)行時,外部實(shí)體與過程之間的來回通信。
- 數(shù)據(jù)流圖的層次。數(shù)據(jù)流圖提供一種表現(xiàn)系統(tǒng)高層和低層概念的機(jī)制,也就是先繪制一張較高層次的數(shù)據(jù)流圖,然后再次基礎(chǔ)上,對其中過程(處理)進(jìn)行分解,分解成為若干獨(dú)立的、低層次的、詳細(xì)的數(shù)據(jù)流圖,而且可以這樣逐一分解下去,知道系統(tǒng)被清晰的描述出來。
- Context圖。也就是系統(tǒng)上下文范圍關(guān)系圖。這是描繪系統(tǒng)最高層結(jié)構(gòu)的DFD圖。它的特點(diǎn)是:將整個待開發(fā)的系統(tǒng)表示為一個過程,將所有的外部實(shí)體和進(jìn)出系統(tǒng)的數(shù)據(jù)流都畫在一張圖中。用來描述系統(tǒng)有什么輸入、輸出數(shù)據(jù)流,與哪些外部實(shí)體直接相關(guān),可以把整個系統(tǒng)的范圍勾畫出來。
- 逐級分解。當(dāng)完成了Context圖的建模之后,就可以在此基礎(chǔ)上進(jìn)行進(jìn)一步的分解。
- 如何畫DFD。DFD的繪制是一個自頂向下、由外到里的過程,通常按照以下幾個步驟進(jìn)行。
- 畫系統(tǒng)的輸入和輸出:就是在圖的邊緣標(biāo)出系統(tǒng)的輸入、輸出數(shù)據(jù)流。這一步其實(shí)是絕地你個研究的內(nèi)容和系統(tǒng)的范圍。在畫的時候,可以先將盡可能多的輸入、輸出畫出來,然后再刪除多余的,增加遺漏的。
- 畫數(shù)據(jù)流圖的內(nèi)部:將系統(tǒng)的書、輸出用一系列的處理連接起來,可以從輸入數(shù)據(jù)流花香輸出數(shù)據(jù)流,也可以從中間畫出去。
- 為每一個數(shù)據(jù)流命名:命名的好壞與數(shù)據(jù)流圖的可理解性密切相關(guān),應(yīng)避免使用空洞的名字。
- 為加工命名:注意應(yīng)使用動賓短語。
- 不考慮初始化也重點(diǎn),暫不考慮出錯路徑等細(xì)節(jié),不畫控制流和控制信息。
3. 細(xì)化記錄DFD部件
為了更好的描述DFD的部件,結(jié)構(gòu)化分析方法還引入了數(shù)據(jù)字典、結(jié)構(gòu)化語言及決策樹、決策表等方法。其中數(shù)據(jù)字典應(yīng)用最為廣泛。
數(shù)據(jù)字典技術(shù)是一種很實(shí)用、有效的表達(dá)數(shù)據(jù)格式的手段。他是對所有與系統(tǒng)相關(guān)的數(shù)據(jù)元素的一個有組織的列表和精確嚴(yán)格的定義。使得用戶和系統(tǒng)分析員對于輸入、輸出、存儲層粉和中間計(jì)算機(jī)有共同的理解。通常數(shù)據(jù)字典的每一個條目中包括以下信息。
- 名稱:數(shù)據(jù)或控制箱、數(shù)據(jù)存儲或外部實(shí)體的主要名稱,如果有別名的還應(yīng)該將別名列出來。
- 何處使用/如何使用
- 內(nèi)容描述:說明該條目的內(nèi)容組成,通常采用以下符號進(jìn)行說明
-
=
:由...
構(gòu)成 -
+
:和,代表順序連接的關(guān)系。 -
[|]
:或,代表從中選一個 -
{}*
:n次重復(fù) -
()
:代表可選的數(shù)據(jù)項(xiàng) -
*...*
:表示特定限制的注釋
- 補(bǔ)充信息:關(guān)于數(shù)據(jù)類型、默認(rèn)值、限制等信息。
8.3.2 結(jié)構(gòu)化設(shè)計(jì)
結(jié)構(gòu)化設(shè)計(jì)包括架構(gòu)設(shè)計(jì)、接口設(shè)計(jì)、數(shù)據(jù)設(shè)計(jì)和過程設(shè)計(jì)等任務(wù)。他是一種面向數(shù)據(jù)流的設(shè)計(jì)方法,是以結(jié)構(gòu)化分析階段所產(chǎn)生的成果為基礎(chǔ),進(jìn)一步自頂向下、逐步求精和模塊化的過程。
1. 概要設(shè)計(jì)與詳細(xì)設(shè)計(jì)的主要任務(wù)
概要設(shè)計(jì)階段的主要任務(wù)是設(shè)計(jì)軟件的結(jié)構(gòu)、確定系統(tǒng)是由哪些模塊組成,以及每個模塊之間的關(guān)系。它采用結(jié)構(gòu)圖來描述程序的結(jié)構(gòu),此外還可以使用層次圖和HIPO(層次圖加輸入/處理/輸出圖)。
整個過程主要包括:復(fù)查基本系統(tǒng)模型、復(fù)查并精化數(shù)據(jù)流圖、確定數(shù)據(jù)流圖的信息流類型(包括交換流和事務(wù)流)、根據(jù)流類型分別實(shí)施變換分析或事務(wù)分析、根據(jù)軟件設(shè)計(jì)原則對得到的軟件結(jié)構(gòu)圖進(jìn)一步優(yōu)化。
而詳細(xì)設(shè)計(jì)階段的主要任務(wù)則是確定應(yīng)該如何具體的實(shí)現(xiàn)所要求的系統(tǒng),得出對目標(biāo)系統(tǒng)的精確描述。它采用自頂向下、逐步求精的設(shè)計(jì)方式和單入口單出口的控制結(jié)構(gòu)。
2. 結(jié)構(gòu)圖
結(jié)構(gòu)圖的基本成分包括模塊、調(diào)用(模塊之間的調(diào)用關(guān)系)和數(shù)據(jù)(模塊間傳遞及處理數(shù)據(jù)信息)。
結(jié)構(gòu)圖是在需求分析階段產(chǎn)生的數(shù)據(jù)流圖的基礎(chǔ)上進(jìn)行進(jìn)一步的設(shè)計(jì)。它將DFD圖中的信息流分為兩種類型。
- 交換流:信息首先沿著輸入通路進(jìn)入系統(tǒng),并將其轉(zhuǎn)換為內(nèi)部表示,然后通過變換中心(加工)的處理,再沿著輸出轉(zhuǎn)換為外部形式離開系統(tǒng)。具有這種特性的加工流就是交換流。
- 事務(wù)流:信息首先沿著輸入通路進(jìn)入系統(tǒng),事務(wù)中心根據(jù)輸入信息的類型在若干個動作序列(活動流)中選擇一個執(zhí)行,這種信息流稱為事務(wù)流。
3. 程序流程圖和盒圖
程序流程圖和盒圖都是用來描述程序的細(xì)節(jié)邏輯的。
程序流程圖的特點(diǎn)是簡單、直觀、易學(xué),但它的缺點(diǎn)是由于其隨意性而使得畫出來的流程圖容易成為非結(jié)構(gòu)化的流程圖。
盒圖的主要特點(diǎn)是功能域明確、無法任意轉(zhuǎn)移控制、容易確定全局?jǐn)?shù)據(jù)和局部數(shù)據(jù)的作用域、容易表示嵌套關(guān)系、可以表示模塊的層次結(jié)構(gòu)。但它的缺點(diǎn)是修改相對比較困難。
4. PAD和PDL
PAD是問題分析圖的縮寫,它符合自頂向下、逐步求精的原則,也符合結(jié)構(gòu)化程序設(shè)計(jì)的思想,最大的特點(diǎn)在于能夠很方便的轉(zhuǎn)換為程序語言的源程序代碼。
PDL這是語言描述工具的縮寫,它和高級程序語言很相似,也包括數(shù)據(jù)說明部分和過程部分,還可以帶注釋等成分,但它是不可執(zhí)行的。PDL是一種形式化語言,其控制結(jié)構(gòu)的描述是確定的,但內(nèi)部的描述語法是不確定的。PDL通常也被稱為偽碼。
8.3.3 模塊設(shè)計(jì)
模塊是執(zhí)行某一特定任務(wù)的數(shù)據(jù)結(jié)構(gòu)和程序代碼。通常將模塊的接口和功能定義為其外部特性,將模塊的局部數(shù)據(jù)和實(shí)現(xiàn)該模塊的程序代碼稱為內(nèi)部特性。而在模塊設(shè)計(jì)中,最重要的原則就是實(shí)現(xiàn)信息隱蔽和模塊獨(dú)立。
1. 信息隱蔽原則
信息隱蔽是開發(fā)整體程序結(jié)構(gòu)時使用的法則,即將每個程序的成分隱藏或封裝在一個單一的設(shè)計(jì)模式中,并且盡可能少的暴露其內(nèi)部的處理。通常將難的決策、可能修改的決策、數(shù)據(jù)結(jié)構(gòu)的內(nèi)部連接以及對它所做的操作細(xì)節(jié)、內(nèi)部特征碼、與計(jì)算機(jī)硬件有關(guān)的細(xì)節(jié)等隱蔽起來。
通過信息隱蔽可以提高軟件的可修改性、可測試性和可移植性。
2. 模塊獨(dú)立性原則
模塊獨(dú)立是指每個模塊完成一個相對獨(dú)立的特定子功能,并且與其他模塊之間的聯(lián)系最簡單。保持模塊的高度獨(dú)立性,也是設(shè)計(jì)過程中的一個很重要的原則。通常用耦合(模塊之間聯(lián)系的緊密程度)和內(nèi)聚(模塊內(nèi)部各元素之間聯(lián)系的緊密程度)兩個標(biāo)準(zhǔn)來衡量,設(shè)計(jì)的目標(biāo)是高內(nèi)聚、低耦合。
模塊的內(nèi)聚類型如下圖,根據(jù)內(nèi)聚度從高到低排序
內(nèi)聚類型 | 描述 |
---|---|
功能內(nèi)聚 | 完成一個單一功能,各個部分協(xié)同工作,缺一不可 |
順序內(nèi)聚 | 處理元素相關(guān),而且必須順序執(zhí)行 |
通信內(nèi)聚 | 所有處理元素集中在一個數(shù)據(jù)結(jié)構(gòu)的區(qū)域上 |
過程內(nèi)聚 | 處理元素相關(guān),并且必須按特定的次序執(zhí)行 |
瞬時內(nèi)聚 | 所包含的任務(wù)必須在同一時間間隔內(nèi)執(zhí)行(如初始化模塊) |
邏輯內(nèi)聚 | 完成邏輯上相關(guān)的一組任務(wù) |
偶然內(nèi)聚 | 完成一組沒有關(guān)系或松散關(guān)系的任務(wù) |
模塊的耦合類型如下圖,根據(jù)耦合度從低到高排序
耦合類型 | 描述 |
---|---|
非直接耦合 | 沒有直接聯(lián)系,互相不依賴對方 |
數(shù)據(jù)耦合 | 借助參數(shù)表傳遞簡單數(shù)據(jù) |
標(biāo)記耦合 | 一個數(shù)據(jù)結(jié)構(gòu)的一部分借助于模塊接口來傳遞 |
控制耦合 | 模塊間傳遞的信息中包含用于控制模塊內(nèi)部邏輯的信息 |
外部耦合 | 與軟件以外的環(huán)境有關(guān) |
公共耦合 | 多個模塊引用同一個全局?jǐn)?shù)據(jù)區(qū) |
內(nèi)容耦合 | 一個模塊訪問另外一個模塊的內(nèi)部數(shù)據(jù)<br />一個模塊不通過正常入口轉(zhuǎn)入到另一個模塊的內(nèi)部<br />兩個模塊有一部分程序代碼重疊<br />一個模塊有多個入口 |
除了滿足以上兩大基本原則外,通常在模塊分解時還需要注意:保持模塊的大小適中,盡可能減少調(diào)用的深度,直接調(diào)用該模塊的個數(shù)應(yīng)該盡量大,但調(diào)用其他模塊的個數(shù)則不宜過大;保證模塊是單入口、單出口的;模塊的作用域應(yīng)該在控制域之內(nèi);功能應(yīng)該是可預(yù)測的。
8.4 面向?qū)ο蟮姆治雠c設(shè)計(jì)
8.4.1 面向?qū)ο蟮幕靖拍?/h3>
1. 對象和類
對象是系統(tǒng)中用來描述客觀事物的一個實(shí)體,它由對象標(biāo)識(名稱)、屬性(狀態(tài)、數(shù)據(jù)、成員變量)和服務(wù)(操作、行為、方法)三個要素組成,它們被封裝為一個整體,以接口的形式對外提供服務(wù)。
類是對具有相同屬性和服務(wù)的一個或一組對象的抽象。類與對象是抽象描述和具體實(shí)例的關(guān)系,一個具體的對象被稱為類的一個實(shí)例。
在系統(tǒng)設(shè)計(jì)過程中,類可以分為三種類型,分別是實(shí)體類、邊界類和控制類。
- 實(shí)體類:實(shí)體類映射需求中的每個實(shí)體,實(shí)體類保存需要存儲在永久存儲體重的信息。實(shí)體類通常是永久性的,它們所具有的屬性和關(guān)系是長期需要的,有時甚至在系統(tǒng)的整個生存周期都需要。
實(shí)體類通常采用業(yè)務(wù)領(lǐng)域術(shù)語命名,一般來說是一個名詞,在用例模型向領(lǐng)域模型的轉(zhuǎn)化中,一個參與者一般對應(yīng)于實(shí)體類。通常可以從SRS中的那些與數(shù)據(jù)庫表(需要持久存儲)對應(yīng)的名詞著手來尋找實(shí)體類。通常情況下,實(shí)體類一定有屬性,但不一定有操作。 - 控制類:控制類是用于控制用例工作的類,一般是由動賓結(jié)構(gòu)的短語(“動詞+名詞”或“名詞+動詞”)轉(zhuǎn)化來的名詞。控制類用于對一個或幾個用例所特有的控制行為進(jìn)行建模,控制對象(控制類的實(shí)例)通常控制其他對象,因此,它們的行為具有協(xié)調(diào)性。
通常情況下,控制類沒有屬性,但一定有方法 - 邊界類:用于封裝在用例內(nèi)、外流動的信息或數(shù)據(jù)流。邊界類位于系統(tǒng)與邊界的交界處,包括所有窗體、報(bào)表、打印機(jī)和掃描儀等硬件的接口,以及與其他系統(tǒng)的接口。每個參與者與用例交互至少要有一個邊界類。
邊界類用于系統(tǒng)接口與系統(tǒng)外部進(jìn)行交互,邊界對象將系統(tǒng)與其外部環(huán)境的變更分隔開,使這些變更不會對系統(tǒng)的其他部分造成影響。通常情況下,邊界類可以既有屬性也有方法。
2. 繼承與泛化
繼承用來說明特殊類(子類)與一般類(父類)的關(guān)系,而通常用泛化來說明一般類和特殊類的關(guān)系,也就是說它們是一對多關(guān)系。
3. 多態(tài)與重載
多態(tài)性(即多種形式)一般是指一般類中定義的屬性被特殊類繼承后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為,通常是使用重載和改寫兩項(xiàng)技術(shù)來實(shí)現(xiàn)的
多態(tài)類型 | 描述 |
---|---|
重載(專用多態(tài)) | 描述一個函數(shù)名稱有多種不同實(shí)現(xiàn)方式,通常可以在編譯時基于類型簽名來區(qū)分各個重載函數(shù)的名稱 |
改寫(包括多態(tài)) | 是重載的一種特殊情況,只發(fā)生在有關(guān)父類和子類之間關(guān)系中。通常簽名相同,內(nèi)容不一樣。 |
多態(tài)變量(賦值多態(tài)強(qiáng)制多態(tài)) | 聲明為一種類型,但實(shí)際上卻可以包含另一種類型數(shù)值的變量 |
泛型(模板,參數(shù)多態(tài)) | 它提供了一種創(chuàng)建通用工具的方法,可以在特定的場合將其特化 |
重載是編譯時進(jìn)行的(靜態(tài)綁定),而改寫則是運(yùn)行時選擇的(動態(tài)綁定)。
4. 模板類
也稱類屬類,用來實(shí)現(xiàn)參數(shù)多態(tài)機(jī)制。一個類屬類是關(guān)于一組類的特性抽象,強(qiáng)調(diào)的是這些類的成員特征中與具體類型無關(guān)的那些部分,而用變元來表示與具體類型有關(guān)的那些部分。
5. 消息和消息通信
消息就是向?qū)ο蟀l(fā)出的服務(wù)請求,通常包括提供服務(wù)的對象標(biāo)識、消息名、輸入信息和回答消息。消息通信則是面向?qū)ο蠓椒▽W(xué)中的一個重要原則,它與對象的封裝原則密不可分,為對象間提供了唯一合法的動態(tài)聯(lián)系的途徑。
8.4.2 面向?qū)ο蠓治?/h3>
1. OOA/OOD方法
OOA模型中包括主題、對象類、結(jié)構(gòu)、屬性和服務(wù)5個層次,需經(jīng)過標(biāo)識對象類、標(biāo)識結(jié)構(gòu)與關(guān)聯(lián)、劃分主題、定義屬性、定義服務(wù)5個步驟來完成整個分析同坐。
OOD中將貫穿OOA中的5個層次和5個活動,它由人機(jī)交互部件、問題域部件、任務(wù)管理部件、數(shù)據(jù)管理部件4個部分組成,其主要的活動就是這4個部件的設(shè)計(jì)工作。
- 設(shè)計(jì)問題域部分:OOA的結(jié)果恰好是OOD的問題域部件,分析的結(jié)果在OOD中可以被改動或增補(bǔ),但基于問題域的總體組織框架是長時間穩(wěn)定的;
- 設(shè)計(jì)人機(jī)交互部件:人機(jī)交互部件在上述結(jié)果中加入人機(jī)交互的設(shè)計(jì)和交互的細(xì)節(jié),包括窗口和輸出服務(wù)的設(shè)計(jì)。可以用原型來幫助實(shí)際交互機(jī)制進(jìn)行開發(fā)和選擇;
- 設(shè)計(jì)任務(wù)管理部分:這部分主要是識別事件驅(qū)動任務(wù),識別時鐘驅(qū)動任務(wù),識別優(yōu)先任務(wù)和關(guān)鍵任務(wù),識別協(xié)調(diào)者,審查每個任務(wù)并定義每個任務(wù)。
- 設(shè)計(jì)數(shù)據(jù)管理部分:數(shù)據(jù)管理部分提供了在數(shù)據(jù)管理系統(tǒng)中存儲和檢索對象的基本結(jié)構(gòu),其目的是隔離數(shù)據(jù)管理方法對其他部分的影響。
2. Booth方法
Booth任務(wù)軟件開發(fā)是一個螺旋上升的過程,每個周期中包括標(biāo)識類和對象、確定類和對象的含義、標(biāo)識關(guān)系、說明每個類的接口和實(shí)現(xiàn)四個步驟。
/ | 靜態(tài)模型 | 動態(tài)模型 |
---|---|---|
邏輯模型 | 類圖<br />對象圖 | 狀態(tài)轉(zhuǎn)換圖<br />時序圖 |
物理模型 | 模塊圖<br />進(jìn)程圖 |
Booth方法的挨罰過程是一個迭代的、漸進(jìn)式的系統(tǒng)開發(fā)過程,它可以分為宏過程和微過程兩類。宏過程用于控制微過程,是覆蓋幾個月或幾周所進(jìn)行的活動。它包括負(fù)責(zé)建立核心需求的概念化,為所期望的行為建立模型的分析,建立架構(gòu)的設(shè)計(jì),形成實(shí)現(xiàn)的進(jìn)化,以及管理軟件交付使用的維護(hù)等5個主要活動。
而微過程則基本上代表了開發(fā)人員的日常活動,它由4個重要、沒有順序關(guān)系的步驟組成:在給定的抽象層次上識別出類和對象,識別出這些類和對象的語義,識別出類間和對詳見的關(guān)系,實(shí)現(xiàn)類和對象。
3. OMT方法
OMT是對象建模技術(shù)的縮寫,主要用于分析、系統(tǒng)設(shè)計(jì)和對象設(shè)計(jì)。包括對象模型(靜態(tài)的、結(jié)構(gòu)化的系統(tǒng)的“數(shù)據(jù)”性質(zhì),通常采用類圖)、動態(tài)模型(瞬時的、行為化的系統(tǒng)“控制”性質(zhì),通常使用狀態(tài)圖)和功能模型(表示變化的系統(tǒng)的“功能”性質(zhì),通常使用數(shù)據(jù)流圖)。OMT方法的三大模型如下表
模型 | 說明 | 主要技術(shù) |
---|---|---|
對象模型 | 描述系統(tǒng)中對象的靜態(tài)結(jié)構(gòu)、對象之間的關(guān)系、屬性、操作。它表示靜態(tài)的、結(jié)構(gòu)上的、系統(tǒng)的“數(shù)據(jù)”特征 | 對象圖 |
動態(tài)模型 | 描述與時間和操作順序有關(guān)的系統(tǒng)特征,如激發(fā)事件、事件序列、確定事件先后關(guān)系的狀態(tài)。它表示瞬時、行為上的、系統(tǒng)的“控制”特征 | 狀態(tài)圖 |
功能模型 | 描述與值的變換有關(guān)的系統(tǒng)特征:功能、映射、約束和函數(shù)依賴 | 數(shù)據(jù)流圖 |
4. OOSE方法
面向?qū)ο筌浖こ痰目s寫。它在OMT的基礎(chǔ)上,對功能模型進(jìn)行了補(bǔ)充,提出了“用例”的概念,最終取代數(shù)據(jù)流圖進(jìn)行需求分析和建立功能模型。
8.4.3 統(tǒng)一建模語言
1. UML是什么
- UML是一種語言。為軟件開發(fā)人員之間提供給了一種用于交流的詞匯表和一種用于軟件藍(lán)圖的標(biāo)準(zhǔn)語言。
- UML是一種可視化語言
- UML是一種可用于詳細(xì)描述的語言:UML所建的模型是精確的、無歧義和完整的,因此適合于對所有重要的分析、設(shè)計(jì)和實(shí)現(xiàn)決策進(jìn)行詳細(xì)描述。
- UML是一種構(gòu)造語言
- UML是一種文檔化語言:適合于建立系統(tǒng)架構(gòu)及其所有的細(xì)節(jié)文檔。
2. UML的結(jié)構(gòu)
UML由構(gòu)造快、公共機(jī)制和架構(gòu)三個部分組成。
- 構(gòu)造塊。構(gòu)造塊也就是基本的UML建模元素(事物)、關(guān)系和圖。
- 建模元素:包括結(jié)構(gòu)事物(類、接口、協(xié)作、用例、活動類、組件、節(jié)點(diǎn)等)、行為事物(交互、狀態(tài)機(jī))、分組事物(包)、注釋事物。
- 關(guān)系:包括關(guān)聯(lián)關(guān)系、依賴關(guān)系、泛化關(guān)系、實(shí)現(xiàn)關(guān)系。
- 圖:UML2.0包括14中不同的圖,分為表示系統(tǒng)靜態(tài)結(jié)構(gòu)的靜態(tài)模型(包括類圖、對象圖、包圖、構(gòu)件圖、部署圖、制品圖),以及表示系統(tǒng)動態(tài)結(jié)構(gòu)的動態(tài)模型(包括對象圖、用例圖、順序圖、通信圖、定時圖、狀態(tài)圖、活動圖、交互概覽圖)。
- 公共機(jī)制。指達(dá)到特定目標(biāo)的公共UML方法。
- 規(guī)格說明:規(guī)格說明是元素語義的文本描述,它是模型的重要組成部分。
- 修飾:UML為每一個模型元素設(shè)置了一個簡單的記號,還可以通過修飾來表達(dá)更多的信息。
- 公共分類:包括類元與實(shí)體(類元表示概念,而實(shí)體表示具體的實(shí)體)、接口和實(shí)現(xiàn)(接口用來定義契約,而實(shí)現(xiàn)就是具體的內(nèi)容)兩組公共分類。
- 擴(kuò)展機(jī)制:包括約束(添加新規(guī)則來擴(kuò)展元素的語義)、構(gòu)造型(用于定義新的UML建模元素)、標(biāo)記值(添加新的特殊信息來擴(kuò)展模型元素的規(guī)格說明)。
- 架構(gòu)。UML對系統(tǒng)架構(gòu)的定義是:系統(tǒng)的組織結(jié)構(gòu),包括系統(tǒng)分解的組成部分、它們的關(guān)聯(lián)性、交互、機(jī)制和指導(dǎo)原則,這些提供系統(tǒng)設(shè)計(jì)的信息。而具體來說,就是指5個系統(tǒng)視圖。
- 邏輯視圖:以問題域的詞匯組成的類和對象集合。
- 進(jìn)程視圖:可執(zhí)行縣城和進(jìn)程作為活動類的建模,它是邏輯視圖的一次執(zhí)行實(shí)例。
- 實(shí)現(xiàn)視圖:對組成基于系統(tǒng)的物理代碼的文件和組件進(jìn)行建模
- 部署視圖:把組件物理的部署到一組物理的、可計(jì)算的節(jié)點(diǎn)上。
- 用例視圖:最基本的需求分析模型
3. 用例圖基礎(chǔ)
用例實(shí)例實(shí)在系統(tǒng)中執(zhí)行的一系列動作,這些動作將生成特定參與者可見的價(jià)值結(jié)果。一個用例定義一組用例實(shí)例。
用例模型描述的是外部參與者所理解的系統(tǒng)功能。用例模型用于需求分析階段,它的建立是系統(tǒng)開發(fā)者和用戶反復(fù)討論的結(jié)果,表明了開發(fā)者和用戶對需求規(guī)格達(dá)成的共識。
- 參與者。參與者代表與系統(tǒng)接口的任何事物或人,是指代表某一種特定功能的角色。因此,參與者都是虛擬的概念。在UML中,用一個小人表示參與者
- 用例。用例是對系統(tǒng)行為的動態(tài)描述,它可以促進(jìn)設(shè)計(jì)人員、開發(fā)人員與用戶的溝通,理解正確的需求、還可以劃分系統(tǒng)和外部實(shí)體的界限,是系統(tǒng)設(shè)計(jì)的起點(diǎn)。
- 包含和擴(kuò)展。兩個用例之間的關(guān)系可以主要概況為兩種情況。一種是用于重用的包含關(guān)系,用構(gòu)造型
<<include>>
或者<<use>>
表示;另一種是用于分離出不同的行為,用構(gòu)造型<<extend>>
表示。
- 包含關(guān)系:當(dāng)可以從兩個或兩個以上的原始用例中提取公共行為,或者發(fā)現(xiàn)能夠使用一個組件來實(shí)現(xiàn)某一個用例的部分功能是很重要的事時,應(yīng)該使用包含關(guān)系來表示。所提取出來的公共行為稱為抽象用例。
- 擴(kuò)展關(guān)系:如果一個用例明顯的混合了兩種或兩種以上的不同場景,即根據(jù)情況可能發(fā)生多種事情。可以將這個用例分為一個主用例和一個或多個輔用例,描述可能更加清晰。
4. 類圖和對象圖基礎(chǔ)
在面向?qū)ο蠼<夹g(shù)中,將客觀世界的實(shí)體映射為對象,并歸納成一個個類。類、對象和它們之間的關(guān)聯(lián)是面向?qū)ο蠹夹g(shù)中最基本的元素。對于一個想要描述的系統(tǒng),其類型和對象模型揭示了系統(tǒng)的結(jié)構(gòu)。在UML中,類和對象模型分別由類圖和對象圖表示。類圖是OO方法的核心。
- 類和對象。通常用對象描述客觀世界中某個具體的實(shí)體。類是對一類具有相同特征的對象的描述。對象是類的實(shí)例。在UML中,類的可視化表示為一個劃分成三個格子的長方形(下面兩個格子可省略)。
- 類的獲取和命名:最頂部的格子包含類的名稱。
- 類的屬性:中間的格子包含類的屬性,用以描述該類對象的共同特點(diǎn)。該項(xiàng)可省略。UML規(guī)定類的屬性的語法為:“可見性 屬性名:類型 = 默認(rèn)值 {約束特性}”。
可見性包括Public、Private和Protected,分別用+、-、#表示。
類型表示該類的種類,它可以是基本數(shù)據(jù)類型,例如整數(shù)、實(shí)數(shù)、布爾型等,也可以使用戶自定義的類型。一般它由所涉及的程序設(shè)計(jì)語言確定。
約束特性則是用戶對該屬性性質(zhì)的一個約束說明。例如“{只讀}”說明該屬性是只讀屬性。 - 類的操作:該項(xiàng)可省略。操作用于修改、檢索類的屬性或執(zhí)行某些動作。操作通常也被稱為功能,但是它們被約束在類的內(nèi)部,只能作用到該類的對象上。操作名、返回類型和參數(shù)表組成操作界面。UML規(guī)定操作的語法為“可見性:操作名(參數(shù)表):返回類型 {約束特性}”。
類圖描述了類和類之間的靜態(tài)關(guān)系。
- 類之間的關(guān)系。關(guān)系是事物間的連接,在面向?qū)ο蠼V校?個很重要的關(guān)系。
- 依賴關(guān)系。有兩個元素X、Y,如果修改元素X的定義可能會引起對另一個元素Y的定義的修改,則稱元素Y依賴于元素X。在UML中,使用帶箭頭的虛線表示依賴關(guān)系。
- 泛化關(guān)系。描述了一般事物與該事物中的特殊種類之間的關(guān)系,也就是父類與子類之間的關(guān)系。繼承關(guān)系是泛化關(guān)系的反關(guān)系。也就是說子類是從父類中集成的,而父類則是子類的泛化。在UML中,使用帶空心箭頭的實(shí)線表示,箭頭指向父類。
在UML中,對泛化關(guān)系有三個要求:
a. 子類應(yīng)與父類完全一致,父類所具有的關(guān)聯(lián)、屬性和操作,子類都應(yīng)具有。
b. 子類中除了與父類一致的信息外,還包括額外的信息。
c. 可以使用父類實(shí)例的地方,也可以使用子類實(shí)例。 - 關(guān)聯(lián)關(guān)系。關(guān)聯(lián)表示兩個類之間存在某種語義上的聯(lián)系。在UML中,用一條實(shí)線來表示關(guān)聯(lián)關(guān)系。
a. 聚合關(guān)系:聚合表示類之間的關(guān)系是整體和部分的關(guān)系。在UML中,用一個帶空心菱形的實(shí)線表示,空心菱形指的是代表“整體”的類。
b. 組合關(guān)系:如果聚合關(guān)系中的表示“部分”的類存在,與表示“整體”的類有著緊密的關(guān)系,那么就應(yīng)該使用“組合”關(guān)系來表示。在UML中,用帶有實(shí)心菱形的實(shí)線表示,菱形指向的是代表“整體”的類。 - 實(shí)現(xiàn)關(guān)系。是用來規(guī)定接口和實(shí)現(xiàn)接口的類或組件之間的關(guān)系的。接口是操作的集合,這些操作用于規(guī)定類或組件的服務(wù)。在UML中,用一個帶空心箭頭的虛線表示。
- 多重性問題:重復(fù)性又稱多重性,多重性表示為一個整數(shù)范圍n...m,整數(shù)n定義所連接的最少對象的數(shù)目,而m則為最多對象數(shù)(當(dāng)不知道確切的最大數(shù)時,最大數(shù)用表示)。最常見的多重性有:0...1;0...;1...1;1...;。
多重性是用來說明關(guān)聯(lián)的兩個類之間的數(shù)量關(guān)系的。 - 類圖。對于軟件系統(tǒng),其類模型和對象模型類圖描述類和類之間的靜態(tài)關(guān)系。與數(shù)據(jù)模型不同,它不僅顯示了信息的結(jié)構(gòu),同時還描述了系統(tǒng)的行為。類圖是定義其他圖的基礎(chǔ)。
- 對象圖。UML中對象圖與類圖有相同的表示形式。對象圖可以看做是類圖的一個實(shí)例。對象是類的實(shí)例;對象之間的鏈?zhǔn)穷愔g的關(guān)聯(lián)的實(shí)例。對象與類的圖形表示相似,均為劃分成兩個格子的長方形(下面的格子可省略)。上面的格子是對象名,對象名下有下劃線;下面的格子記錄屬性值。鏈的圖形表示與關(guān)聯(lián)相似。對象圖常用于表示復(fù)雜類圖的一個實(shí)例。
5. 交互圖基礎(chǔ)
交互圖是表示各組對象如何依賴某種行為進(jìn)行寫作的模型。通常可以使用一個交互圖來表示和說明一個用例的行為。
- 順序圖。用來描述對象之間動態(tài)的交互歡喜,著重體現(xiàn)對象間消息傳遞的時間順序。順序圖允許直觀的表示出對象的生存期,在生存期內(nèi),對象可以對輸入消息作出響應(yīng),并且可以發(fā)送信息。
對象間的通信通過在對象的生命線上畫消息來表示。消息的箭頭知名消息的類型。順序圖中的消息可以使信號、操作調(diào)用或類似于C++中的RPC和JAVA中的RMI。當(dāng)收到消息時,接收對象立即開始執(zhí)行活動,即對象被激活了。通過在對象生命線上顯示一個細(xì)長矩形框來表示激活。
消息可以用消息名及參數(shù)來標(biāo)識,消息也可帶有順序號。消息還可以帶有條件表達(dá)式,表示分支或決定是否發(fā)送消息。如果用于表示分支,則兩個分支是相互排斥的,即在某一時刻僅可發(fā)送分支中的一個消息。 - 通信圖。用于描述相互合作的對象間的交互關(guān)系和鏈接關(guān)系。順序圖著重體現(xiàn)交互的時間順序,通信圖則著重體現(xiàn)交互對象間的靜態(tài)鏈接關(guān)系。
- 定時圖。著重表示定時約束的定時圖。
根據(jù)UML的定義,定時圖實(shí)際上是一種特殊形式的順序圖,它與順序圖的區(qū)別主要在幾個方面:
- 坐標(biāo)軸交換了位置,改為從左到右來表示時間的推移。
- 用生命線的“凹下凸起”來表示狀態(tài)的變化,每個水平位置代表一種不同的狀態(tài),狀態(tài)的順序可以有意義、也可以沒有意義。
- 生命線可以跟在一根線后面,在這根線上顯示一些不同的狀態(tài)值。
- 可以顯示一個度量時間值得標(biāo)尺,用刻度表示時間間隔。
定時圖的土元包括生命線、狀態(tài)、狀態(tài)變遷、消息、時間刻度。
6. 狀態(tài)圖基礎(chǔ)
用來描述一個特定對象的所有可能狀態(tài)及其引起狀態(tài)轉(zhuǎn)移的事件。一個狀態(tài)圖包括一系列狀態(tài)及狀態(tài)之間的轉(zhuǎn)移。
狀態(tài)圖包括以下部分:
- 狀態(tài):又稱為中間狀態(tài),用圓角矩形框表示
- 初始狀態(tài):又稱為初態(tài),用一個黑色的實(shí)心圓圈表示,在一張狀態(tài)圖中只能夠有一個初始狀態(tài)。
- 結(jié)束狀態(tài):又稱為終態(tài),在黑色的實(shí)心圓圈外面套上一個空心圓,在一張狀態(tài)圖中可能有多個結(jié)束狀態(tài)。
- 狀態(tài)轉(zhuǎn)移:用箭頭說明狀態(tài)的轉(zhuǎn)移情況,并用文字說明引發(fā)這個狀態(tài)變化的相應(yīng)事件是什么。
一個狀態(tài)也可能被細(xì)分成為多個子狀態(tài),那么如果將這些子狀態(tài)都描繪出來的話,那么這個狀態(tài)就是符合狀態(tài)。
7. 活動圖基礎(chǔ)
活動圖是由狀態(tài)圖變化而來的。活動圖依據(jù)對象狀態(tài)的變化來捕獲動作(將要執(zhí)行的工作或活動)與動作的結(jié)果。活動圖中一個活動結(jié)束后將立即進(jìn)入下一個活動(在狀態(tài)圖中狀態(tài)的變遷可能需要事件的觸發(fā))。
- 基本活動圖。活動圖與狀態(tài)圖類似,包括了初始狀態(tài)、終止?fàn)顟B(tài),以及中間的活動狀態(tài),每個活動之間也就是一種狀態(tài)的變遷。在活動圖中,還引入了以下幾個概念:
- 判定:說明基于某些表達(dá)式的選擇性路徑,在UML中用菱形表示。
- 分支與組合:處理并發(fā)流,UML中使用粗線表示。
- 帶泳道的活動圖。將活動圖的邏輯描述與順序圖、協(xié)作圖的責(zé)任描述結(jié)合起來。
- 對象流:在活動圖中可以出現(xiàn)對象。對象可以作為活動的輸入或輸出,對象與活動間的輸入/輸出關(guān)系用虛線箭頭來表示。如果僅表示對象受到某一活動的影響,則可用不帶箭頭的虛線來連接對象與活動。
- 信號:在活動途中可以表示信號的發(fā)送與接收,分別用發(fā)送與接收標(biāo)識來表示。發(fā)送和接收標(biāo)識也可與對象相連,用于表示消息的發(fā)送者和接收者。
8. 構(gòu)件圖基礎(chǔ)
構(gòu)件圖是面向?qū)ο笙到y(tǒng)的物理方面進(jìn)行建模要用的兩種圖之一。它可以有效的顯示一組構(gòu)件,以及他們之間的關(guān)系。構(gòu)件圖中通常包括構(gòu)件、接口及各種關(guān)系。
通常構(gòu)件值得是源代碼文件、二進(jìn)制代碼文件和可執(zhí)行文件等。而構(gòu)件圖就是用來顯示編譯、鏈接或執(zhí)行時構(gòu)件之間的依賴關(guān)系的。通常來說,可以使用構(gòu)件圖完成以下工作:
- 對源代碼進(jìn)行建模:這樣可以清晰地表示出各個不同源程序文件之間的關(guān)系。
- 對可執(zhí)行體的發(fā)布建模:將清晰地表示出各個可執(zhí)行文件、DLL文件之間的關(guān)系。
- 對物理數(shù)據(jù)庫建模:用來表示各種類型的數(shù)據(jù)庫、表之間的關(guān)系。
- 對可調(diào)整的系統(tǒng)建模
在繪制構(gòu)件圖時,應(yīng)該注意側(cè)重于描述系統(tǒng)的靜態(tài)實(shí)現(xiàn)視圖的一個方面,圖形不要過于簡化,應(yīng)該為構(gòu)件圖取一個直觀的名稱,在繪制時避免產(chǎn)生線的交叉。
9. 部署圖基礎(chǔ)
也成為實(shí)施圖,和構(gòu)件圖一眼個,是面向?qū)ο笙到y(tǒng)的物理方面建模的兩種圖之一。構(gòu)件圖說明構(gòu)建之間的邏輯關(guān)系,而部署圖是在此基礎(chǔ)上更進(jìn)一步的描述系統(tǒng)硬件的物理拓?fù)浣Y(jié)構(gòu)及在此結(jié)構(gòu)上運(yùn)行的軟件構(gòu)件,常用于幫助理解分布式系統(tǒng)。通常包括以下一些關(guān)鍵的組成部分:
- 節(jié)點(diǎn)和連接。節(jié)點(diǎn)代表一個物理設(shè)備及其上運(yùn)行的軟件系統(tǒng)。在UML中,使用一個立方體表示一個節(jié)點(diǎn),節(jié)點(diǎn)名放在左上角。節(jié)點(diǎn)之間的連線表示系統(tǒng)之間進(jìn)行交互的通信路徑,在UML中被稱為連接。通信類型則放在連接旁邊的“《》”之間,表示所用的通信協(xié)議或網(wǎng)絡(luò)類型
- 構(gòu)件和接口。在部署圖中,構(gòu)件代表可執(zhí)行的物理代碼模塊,如一個可執(zhí)行程序。
在面向?qū)ο蠓椒ㄖ校惡蜆?gòu)件等元素并不是所有的屬性和操作都對外可見。他們對外提供了可見操作和屬性,稱之為類和構(gòu)件的接口。界面可以表示為一頭是一個小圓圈的直線。
8.5 用戶界面設(shè)計(jì)
接口設(shè)計(jì)主要包括三個方面的內(nèi)容:一是設(shè)計(jì)軟件構(gòu)件間的接口;二是軟件設(shè)計(jì)模塊和其他非人的信息生產(chǎn)者和消費(fèi)者(如外部實(shí)體)的接口;三是人(如用戶)和計(jì)算機(jī)間的界面設(shè)計(jì)。
8.5.1 用戶界面設(shè)計(jì)的原則
設(shè)計(jì)時必須遵從三個黃金法則
- 置用戶與控制之下:具體來說就是以不強(qiáng)迫用戶進(jìn)入不必要的或不希望的動作的方式來定義交互模式、提供靈活的交互、允許用戶交互時可以被中斷和撤銷、當(dāng)技能級別增長時可以使交互流水化并允許定制交互、使用戶隔離內(nèi)部細(xì)節(jié)、設(shè)計(jì)應(yīng)允許用戶和出現(xiàn)在屏幕上的對象直接交互。
- 減少用戶的記憶負(fù)擔(dān):具體來說就是減少對短期記憶的要求、建立有意義的默認(rèn)、定義直覺性的捷徑、界面的視覺布局應(yīng)該基于對真實(shí)世界的隱喻、以不斷進(jìn)展的方式提示信息。
- 保持界面的一致性:具體來說就是允許用戶將當(dāng)前任務(wù)放入有意義的語境、在應(yīng)用系列內(nèi)保持一致性,如果過去的交互模型已經(jīng)建立了用戶期望,除非有不得已的理由,否則不要改變它。
用戶界面設(shè)計(jì)原則如下:
原則 | 描述 |
---|---|
用戶熟悉 | 界面所使用的術(shù)語和概念應(yīng)該來自于用戶的經(jīng)驗(yàn),這些用戶是將來要使用系統(tǒng)最多的人。 |
意外最小化 | 永遠(yuǎn)不要讓用戶對系統(tǒng)的行為感到吃驚。 |
可恢復(fù)性 | 界面應(yīng)該有一種機(jī)制來允許用戶從錯誤中恢復(fù) |
用戶指南 | 在錯誤發(fā)生時,界面應(yīng)該提供有意義的反饋,并有上下文感知能力的用戶幫助功能。 |
用戶差異性 | 界面應(yīng)該為不同類型用戶提供合適的交互功能 |
8.5.2 用戶界面設(shè)計(jì)過程
用戶界面的設(shè)計(jì)過程也應(yīng)該是迭代的,它通常包括4個不同的框架活動:
- 用戶、任務(wù)和環(huán)境分析:著重于分析將和系統(tǒng)交互的用戶的特點(diǎn),記錄下技術(shù)級別、業(yè)務(wù)理解和對新系統(tǒng)的一般感悟,并定義不同的用戶類別。然后對用戶將要完成什么樣的任務(wù)進(jìn)行詳細(xì)的標(biāo)識和描述。最后對用戶的物理工作環(huán)境進(jìn)行了解和分析。
- 界面設(shè)計(jì):主要包括建立任務(wù)的目標(biāo)和意圖,為每個目標(biāo)或意圖定制特定的動作序列,按在界面上執(zhí)行的方式對動作序列進(jìn)行規(guī)約,指明系統(tǒng)狀態(tài),定義控制機(jī)制,指明控制機(jī)制如何影響系統(tǒng)狀態(tài),指明用戶如何通過界面上的信息來解釋系統(tǒng)狀態(tài)。
- 實(shí)現(xiàn):就是根據(jù)界面設(shè)計(jì)進(jìn)行實(shí)現(xiàn),前期可以通過原型工具來快速實(shí)現(xiàn),減少返工的工作量。
- 界面確認(rèn):界面實(shí)現(xiàn)后就可以進(jìn)行一些定性和定量的數(shù)據(jù)收集,以進(jìn)行界面的評估,以調(diào)整界面的設(shè)計(jì)。
8.6 工作流設(shè)計(jì)
8.6.1 工作流設(shè)計(jì)概述
工作流是一類能夠完全或者部分自動執(zhí)行的經(jīng)營過程,根據(jù)一系列過程規(guī)則、文檔、信息或任務(wù)在不同的執(zhí)行者之間傳遞、執(zhí)行。
- 工作流。是現(xiàn)實(shí)中的具體工作從開始到結(jié)束過程的抽象和概括。這個過程包括了眾多因素:任務(wù)順序、路線規(guī)則、時間時限約束等。
- 流程定義。是指對業(yè)務(wù)過程的形式化表示,定義了過程運(yùn)行中的活動和所涉及的各種信息。這些信息包括過程的開始和完成條件、構(gòu)成過程的活動和進(jìn)行活動間導(dǎo)航的規(guī)則、用戶所需要完成的任務(wù)、可能被調(diào)用的應(yīng)用、工作流間的引用關(guān)系,以及工作流數(shù)據(jù)的定義。
- 流程實(shí)例。常稱為工作,是一個流程定義的運(yùn)行實(shí)例。
- 工作流管理系統(tǒng)。與數(shù)據(jù)庫管理系統(tǒng)類似,是一個軟件系統(tǒng)。這個程序存儲流程的定義,按照所使用的流程定義來觸發(fā)流程狀態(tài)的改變,推動流程的運(yùn)轉(zhuǎn)。這個推動的依據(jù)常常被稱為工作流引擎。
- 流程定義工具。同樣是一套軟件系統(tǒng)。可能是獨(dú)立的軟件,也可能是工作流管理系統(tǒng)的一部分。
- 參與者。回答業(yè)務(wù)流程中“誰”這個問題。
- 活動。活動是流程定義中的一個元素,一次活動可能改變流程處理數(shù)據(jù)的內(nèi)容、流程的狀態(tài),并可能將流程推動到其他活動中去。活動可以有人來完成,也可以是系統(tǒng)自動的處理過程。
- 活動所有者。參與者之一,它有權(quán)決定該活動是否結(jié)束,當(dāng)他決定活動結(jié)束時,將活動推動到其他活動中,可能是下一個活動,也可能是前一個活動。
- 工作所有者。是有權(quán)整體控制流程實(shí)例執(zhí)行過程的參與者。
- 工作項(xiàng)。代表流程實(shí)例中活動的參與者將要執(zhí)行的工作。
要分析現(xiàn)實(shí)中的處理流程,必須首先描述目標(biāo)系統(tǒng)的流程,這個過程也可以稱為建模。
8.6.2 工作流管理系統(tǒng)
是一種“在工作流形式化表示的驅(qū)動下,通過軟件的執(zhí)行而完成工作流定義、管理及執(zhí)行的系統(tǒng)”,其主要目標(biāo)是對業(yè)務(wù)過程中各活動發(fā)生的先后次序及與活動相關(guān)的相應(yīng)人力或信息資源的調(diào)用進(jìn)行管理,而實(shí)現(xiàn)業(yè)務(wù)過程的自動化。工作流管理系統(tǒng)的六個基本模塊的參考模型如下:
- 流程定義工具。這部分軟件提供圖形化或者其他方式的界面給設(shè)計(jì)者。由設(shè)計(jì)者將實(shí)際工作流程進(jìn)行抽象,并將設(shè)計(jì)者提交的流程定義轉(zhuǎn)換為形式化語言描述,提供給計(jì)算機(jī)工作流執(zhí)行服務(wù)進(jìn)行流程實(shí)例處理的一句。
- 工作流執(zhí)行服務(wù)。這個服務(wù)程序是工作流管理系統(tǒng)的核心,它使用一種或多種數(shù)據(jù)流引擎,對流程定義進(jìn)行解釋,激活有效的流程實(shí)例,推動流程實(shí)例在不同的活動中運(yùn)轉(zhuǎn)。和客戶應(yīng)用程序、其他工作流服務(wù)執(zhí)行程序進(jìn)行交互,從而完成流程實(shí)例的創(chuàng)建、執(zhí)行和管理工作。同時這部分軟件為每個用戶維護(hù)一個活動列表告訴用戶當(dāng)前必須處理的任務(wù)。如果有必要,還可以通過電子郵件甚至短消息的形式提醒用戶任務(wù)的到達(dá)。
- 其他工作流執(zhí)行服務(wù)。
- 客戶應(yīng)用程序。這是給最終用戶的界面,用戶通過使用這部分軟件對工作流的數(shù)據(jù)進(jìn)行必要的處理,如果用戶是當(dāng)前活動的擁有者,還可以通過客戶應(yīng)用程序改變流程實(shí)例的活動,將流程實(shí)例推動到另一個活動中。
- 被調(diào)用應(yīng)用程序。
- 管理和監(jiān)控工具。
8.7 簡單分布式計(jì)算機(jī)應(yīng)用系統(tǒng)的設(shè)計(jì)
8.8 系統(tǒng)運(yùn)行環(huán)境的集成和設(shè)計(jì)
1. 集中式系統(tǒng)
所有操作都集中于一臺主機(jī)中,而操作員必須在主機(jī)的附近操作。集中式系統(tǒng)常見于銀行、保險(xiǎn)、證券行業(yè)。集中式系統(tǒng)由以下幾個部分組成:
- 單計(jì)算機(jī)結(jié)構(gòu);這種結(jié)構(gòu)簡單、容易維護(hù),但是處理能力受到限制。
- 集群結(jié)構(gòu):由多個計(jì)算機(jī)組成,這些計(jì)算機(jī)具有類似的硬件平臺、操作系統(tǒng)等。通常采用負(fù)載均衡、資源共享等方式實(shí)現(xiàn)更大的處理能力和容量。
- 多計(jì)算機(jī)結(jié)構(gòu):由多個計(jì)算機(jī)組成,這些計(jì)算機(jī)之間操作環(huán)境可能不同。適用于當(dāng)系統(tǒng)可以分解成多個不同的子系統(tǒng)時。
2. 分布式系統(tǒng)
3. C/S結(jié)構(gòu)
4. 多層結(jié)構(gòu)
這種結(jié)構(gòu)是C/S結(jié)構(gòu)的擴(kuò)展,典型的分為由存儲數(shù)據(jù)的數(shù)據(jù)庫服務(wù)器作為數(shù)據(jù)層、實(shí)現(xiàn)商業(yè)規(guī)則的程序作為邏輯層、管理用戶輸入輸出的視圖層所組成的三層結(jié)構(gòu)。
多層結(jié)構(gòu)形式復(fù)雜、工鞥多余,實(shí)現(xiàn)多層結(jié)構(gòu)常常需要來實(shí)現(xiàn)不同層次建通信的專門程序——管件,也稱為中間件。中間件大多數(shù)實(shí)現(xiàn)遠(yuǎn)程程序調(diào)用、對象請求調(diào)度等功能。
5. Internet、Intranet和Extranet
Internet是全球的網(wǎng)絡(luò)集合,使用通用的TCP/IP協(xié)議來相互連接。Internet提供了電子郵件、文件傳輸、遠(yuǎn)程登錄等服務(wù)。Intranet是私有網(wǎng)絡(luò),只限于內(nèi)部使用,也使用TCP/IP協(xié)議。Extranet是一個擴(kuò)展的Intranet。它包括企業(yè)之外的和企業(yè)密切相關(guān)合作的其他企業(yè)。Extranet允許分離的組織交換信息并進(jìn)行合作,這樣就形成了一個虛擬組織,現(xiàn)在的VPN技術(shù)允許在公用網(wǎng)絡(luò)上架構(gòu)支隊(duì)組織內(nèi)部開發(fā)服務(wù)。
8.9 系統(tǒng)過渡計(jì)劃
1. 直接過渡
當(dāng)新系統(tǒng)運(yùn)行時,立即關(guān)閉原來的系統(tǒng)
2. 并行過渡
讓新系統(tǒng)和舊系統(tǒng)在一段時間里同時運(yùn)行
3. 階段過渡
適用于分階段開發(fā)的系統(tǒng)。