軟件工程第11章-面向?qū)ο笤O(shè)計(jì)課件_第1頁
軟件工程第11章-面向?qū)ο笤O(shè)計(jì)課件_第2頁
軟件工程第11章-面向?qū)ο笤O(shè)計(jì)課件_第3頁
軟件工程第11章-面向?qū)ο笤O(shè)計(jì)課件_第4頁
軟件工程第11章-面向?qū)ο笤O(shè)計(jì)課件_第5頁
已閱讀5頁,還剩163頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第11章面向?qū)ο笤O(shè)計(jì)分析是提取和整理用戶需求,并建立問題域精確模型的過程。設(shè)計(jì)則是把分析階段得到的需求轉(zhuǎn)變成符合成本和質(zhì)量要求的、抽象的系統(tǒng)實(shí)現(xiàn)方案的過程。本章首先講述為獲得優(yōu)秀設(shè)計(jì)結(jié)果應(yīng)該遵循的準(zhǔn)則,然后具體講述面向?qū)ο笤O(shè)計(jì)的任務(wù)和方法。從面向?qū)ο蠓治龅矫嫦驅(qū)ο笤O(shè)計(jì)(OOD),是一個(gè)逐漸擴(kuò)充模型的過程?;蛘哒f,面向?qū)ο笤O(shè)計(jì)就是用面向?qū)ο笥^點(diǎn)建立求解域模型的過程。第11章面向?qū)ο笤O(shè)計(jì)分析是提取和整理用戶1

11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則11.2啟發(fā)規(guī)則11.3軟件重用11.4系統(tǒng)分解11.5設(shè)計(jì)問題域子系統(tǒng)11.6設(shè)計(jì)人機(jī)交互子系統(tǒng)

11.7設(shè)計(jì)任務(wù)管理子系統(tǒng)11.8設(shè)計(jì)數(shù)據(jù)管理子系統(tǒng)11.9設(shè)計(jì)類中的服務(wù)11.10設(shè)計(jì)關(guān)聯(lián)11.11設(shè)計(jì)優(yōu)化主要內(nèi)容11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則11.7設(shè)

11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則1.模塊化2.抽象3.信息隱藏4.弱耦合5.強(qiáng)內(nèi)聚6.可重用11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則1.模塊化2.抽象3.信31.模塊化對象就是模塊把數(shù)據(jù)結(jié)構(gòu)和操作這些數(shù)據(jù)的方法

緊密地結(jié)合在一起2.抽象過程抽象數(shù)據(jù)抽象:類參數(shù)化抽象:C++的“模板”

11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則1.模塊化對象就是模塊2.抽象過程抽象11.1面向?qū)?3.信息隱藏4.弱耦合通過對象的封裝性實(shí)現(xiàn)類分離了接口與實(shí)現(xiàn),支持信息隱藏耦合:一個(gè)軟件結(jié)構(gòu)內(nèi)不同模塊之間互連的緊密程度弱耦合:系統(tǒng)中某一部分的變化對其他部分的影響降到最低程度對象之間的耦合:交互耦合&繼承耦合

11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則3.信息隱藏4.弱耦合通過對象的封裝性實(shí)現(xiàn)耦合:一個(gè)軟件55.強(qiáng)內(nèi)聚6.可重用內(nèi)聚衡量一個(gè)模塊內(nèi)各個(gè)元素彼此結(jié)合的緊密程度在設(shè)計(jì)時(shí)應(yīng)該力求做到高內(nèi)聚面向?qū)ο笤O(shè)計(jì)的3種內(nèi)聚:

服務(wù)內(nèi)聚、類內(nèi)聚、一般\特殊內(nèi)聚盡量使用已有的類如果確實(shí)需要?jiǎng)?chuàng)建新類,則在設(shè)計(jì)這些新類的協(xié)議時(shí),應(yīng)該考慮將來的可重復(fù)使用性

11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則5.強(qiáng)內(nèi)聚6.可重用內(nèi)聚衡量一個(gè)模塊內(nèi)各個(gè)元素彼此結(jié)合的6

11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則11.2啟發(fā)規(guī)則11.3軟件重用11.4系統(tǒng)分解11.5設(shè)計(jì)問題域子系統(tǒng)11.6設(shè)計(jì)人機(jī)交互子系統(tǒng)

11.7設(shè)計(jì)任務(wù)管理子系統(tǒng)11.8設(shè)計(jì)數(shù)據(jù)管理子系統(tǒng)11.9設(shè)計(jì)類中的服務(wù)11.10設(shè)計(jì)關(guān)聯(lián)11.11設(shè)計(jì)優(yōu)化主要內(nèi)容11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則11.7設(shè)

11.2啟發(fā)規(guī)則1.設(shè)計(jì)結(jié)果應(yīng)該清晰易懂2.一般-特殊結(jié)構(gòu)的深度應(yīng)適當(dāng)3.設(shè)計(jì)簡單的類4.使用簡單的協(xié)議5.使用簡單的服務(wù)6.把設(shè)計(jì)變動(dòng)減至最小11.2啟發(fā)規(guī)則1.設(shè)計(jì)結(jié)果應(yīng)該清晰易懂2.一般-特81.設(shè)計(jì)結(jié)果應(yīng)該清晰易懂提高軟件可維護(hù)性和可重用性的重要措施保證設(shè)計(jì)結(jié)果清晰易懂的主要因素:

(1)用詞一致

(2)使用已有的協(xié)議

(3)減少消息模式的數(shù)目(4)避免模糊的定義2.一般-特殊結(jié)構(gòu)的深度應(yīng)適當(dāng)類等級中包含的層次數(shù)適當(dāng)一個(gè)中等規(guī)模(大約包含100個(gè)類)的系統(tǒng)中,類等級層次數(shù)應(yīng)保持為7±2。

11.2啟發(fā)規(guī)則1.設(shè)計(jì)結(jié)果應(yīng)該清晰易懂提高軟件可維護(hù)性和可重用性的重要措93.設(shè)計(jì)簡單的類4.使用簡單的協(xié)議盡量設(shè)計(jì)小而簡單的類注意以下幾點(diǎn):

(1)避免包含過多的屬性

(2)有明確的定義

(3)盡量簡化對象之間的合作關(guān)系(4)不要提供太多服務(wù)消息中的參數(shù)不要超過3個(gè)

11.2啟發(fā)規(guī)則3.設(shè)計(jì)簡單的類4.使用簡單的協(xié)議盡量設(shè)計(jì)小而簡單的類消105.使用簡單的服務(wù)6.把設(shè)計(jì)變動(dòng)減至最小類中的服務(wù)通常都很小盡量避免使用復(fù)雜的服務(wù)理想的設(shè)計(jì)變動(dòng)曲線如右圖所示在設(shè)計(jì)的早期階段,變動(dòng)較大,隨著時(shí)間推移,設(shè)計(jì)方案日趨成熟,改動(dòng)也越來越小了

11.2啟發(fā)規(guī)則5.使用簡單的服務(wù)6.把設(shè)計(jì)變動(dòng)減至最小類中的服務(wù)通常都11

11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則11.2啟發(fā)規(guī)則11.3軟件重用11.4系統(tǒng)分解11.5設(shè)計(jì)問題域子系統(tǒng)11.6設(shè)計(jì)人機(jī)交互子系統(tǒng)

11.7設(shè)計(jì)任務(wù)管理子系統(tǒng)11.8設(shè)計(jì)數(shù)據(jù)管理子系統(tǒng)11.9設(shè)計(jì)類中的服務(wù)11.10設(shè)計(jì)關(guān)聯(lián)11.11設(shè)計(jì)優(yōu)化主要內(nèi)容11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則11.7設(shè)

11.3軟件重用11.3.1概述11.3.2類構(gòu)建11.3.3設(shè)計(jì)簡單的類11.3軟件重用11.3.1概述11.3.2類構(gòu)1311.3.1軟件重用概述重用也叫再用或復(fù)用,是指同一事物不作修改或稍加改動(dòng)就多次重復(fù)使用。廣義地說,軟件重用可分為以下3個(gè)層次:知識重用方法和標(biāo)準(zhǔn)的重用軟件成分的重用上述前兩個(gè)重用層次屬于知識工程研究的范疇,本節(jié)僅討論軟件成分重用問題。1.重用

11.3軟件重用11.3.1軟件重用概述重用也叫再用或復(fù)用,是指同一事物不14代碼重用源代碼剪貼源代碼包含繼承設(shè)計(jì)結(jié)果重用

重用某個(gè)軟件系統(tǒng)的設(shè)計(jì)模型(即求解域模型)分許結(jié)果重用

更高級別的重用,即重用某個(gè)系統(tǒng)的分析模型2.軟件成分的重用級別

11.3軟件重用代碼重用2.軟件成分的重用級別11.3軟件重用15主要有以下10種:項(xiàng)目計(jì)劃成本估計(jì)體系結(jié)構(gòu)需求模型和規(guī)格說明設(shè)計(jì)源代碼用戶文檔和技術(shù)文檔用戶界面數(shù)據(jù)測試用例3.典型的可重用軟件成分

11.3軟件重用主要有以下10種:3.典型的可重用軟件成分11.31611.3.2類構(gòu)件1.可重用軟構(gòu)件應(yīng)具備的特點(diǎn)為使軟構(gòu)件也像硬件集成電路那樣,能在構(gòu)造各種各樣的軟件系統(tǒng)時(shí)方便地重復(fù)使用,就必須使它們滿足下列要求:模塊獨(dú)立性強(qiáng)成具有高度可塑性接口清晰、簡明、可靠需求模型和規(guī)格說明面向?qū)ο蠹夹g(shù)中的“類”,是比較理想的可重用軟構(gòu)件,不妨稱之為類構(gòu)件。

11.3軟件重用11.3.2類構(gòu)件1.可重用軟構(gòu)件應(yīng)具備的特點(diǎn)為使軟構(gòu)件172.類構(gòu)件的重用方式實(shí)例重用使用適當(dāng)?shù)臉?gòu)造函數(shù),按照需要?jiǎng)?chuàng)建類的實(shí)例用幾個(gè)簡單的對象作為類的成員創(chuàng)建出一個(gè)更復(fù)雜的類繼承重用

繼承性提供了一種對已有的類構(gòu)件進(jìn)行裁剪的機(jī)制多態(tài)重用使對象的對外接口更加一般化,降低了消息連接的復(fù)雜程度提供一種簡便可靠的軟構(gòu)件組合機(jī)制

11.3軟件重用2.類構(gòu)件的重用方式實(shí)例重用11.3軟件重用1811.3.3軟件重用的效益1.質(zhì)量

理想情況下,為了重用而開發(fā)的軟件構(gòu)件已被證明是正確的,且沒有缺陷。

事實(shí)上,由于不能定期進(jìn)行形式化驗(yàn)證,錯(cuò)誤可能而且也確實(shí)存在。

但是,隨著每一次重用,都會(huì)有一些錯(cuò)誤被發(fā)現(xiàn)并被清除,構(gòu)件的質(zhì)量也會(huì)隨之改善。

隨著時(shí)間的推移,構(gòu)件將變成實(shí)質(zhì)上無錯(cuò)誤的。

11.3軟件重用11.3.3軟件重用的效益1.質(zhì)量理想192.生產(chǎn)率

當(dāng)把可重用的軟件成分應(yīng)用于軟件開發(fā)的全過程時(shí),創(chuàng)建計(jì)劃、模型、文檔、代碼和數(shù)據(jù)所需花費(fèi)的時(shí)間將減少,從而將用較少的投入給客戶提供相同級別的產(chǎn)品,因此,生產(chǎn)率得到了提高。由于應(yīng)用領(lǐng)域、問題復(fù)雜程度、項(xiàng)目組的結(jié)構(gòu)和大小、項(xiàng)目期限、可應(yīng)用的技術(shù)等許多因素都對項(xiàng)目組的生產(chǎn)率有影響,因此,不同開發(fā)組織對軟件重用帶來生產(chǎn)率提高的數(shù)字的報(bào)告并不相同,但基本上30%~50%的重用大約可以導(dǎo)致生產(chǎn)率提高25%~40%。

11.3軟件重用2.生產(chǎn)率當(dāng)把可重用的軟件成分應(yīng)用于軟件203.成本軟件重用帶來的凈成本節(jié)省可以用下式估算:

C=Cs-Cr-CdCr是與重用相關(guān)聯(lián)的成本領(lǐng)域分析與建模的成本設(shè)計(jì)領(lǐng)域體系結(jié)構(gòu)的成本為便于重用而增加的文檔的成本維護(hù)和完善可重用的軟件成分的成本為從外部獲取構(gòu)件所付出的版稅和許可證費(fèi)用創(chuàng)建(或購買)及運(yùn)行重用庫的費(fèi)用對設(shè)計(jì)和實(shí)現(xiàn)可重用構(gòu)件的人員的培訓(xùn)費(fèi)用Cd是交付給客戶的軟件的實(shí)際成本Cs使用本書第13章講述的技術(shù)來估算

11.3軟件重用3.成本軟件重用帶來的凈成本節(jié)省可以用下式估算:21

11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則11.2啟發(fā)規(guī)則11.3軟件重用11.4系統(tǒng)分解11.5設(shè)計(jì)問題域子系統(tǒng)11.6設(shè)計(jì)人機(jī)交互子系統(tǒng)

11.7設(shè)計(jì)任務(wù)管理子系統(tǒng)11.8設(shè)計(jì)數(shù)據(jù)管理子系統(tǒng)11.9設(shè)計(jì)類中的服務(wù)11.10設(shè)計(jì)關(guān)聯(lián)11.11設(shè)計(jì)優(yōu)化主要內(nèi)容11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則11.7設(shè)11.4系統(tǒng)分解分而治之,各個(gè)擊破系統(tǒng)的主要組成部分稱為子系統(tǒng)

軟件工程師在設(shè)計(jì)比較復(fù)雜的應(yīng)用系統(tǒng)時(shí)普遍采用的策略,也是首先把系統(tǒng)分解成若干個(gè)比較小的部分,然后再分別設(shè)計(jì)每個(gè)部分。

面向?qū)ο笤O(shè)計(jì)模型的4大組成部分可以想象成整個(gè)模型的4個(gè)垂直切片。11.4系統(tǒng)分解分而治之,各個(gè)擊破系統(tǒng)的主要組成部分稱為子231.子系統(tǒng)之間的兩種交互方式(1)客戶-供應(yīng)商關(guān)系作為“客戶”的子系統(tǒng)調(diào)用作為“供應(yīng)商”的子系統(tǒng),后者完成某些服務(wù)工作并返回結(jié)果。前者必須了解后者的接口,然而后者卻無須了解前者的接口,因?yàn)槿魏谓换バ袨槎际怯汕罢唑?qū)動(dòng)的。(2)平等伙伴關(guān)系每個(gè)子系統(tǒng)都可能調(diào)用其他子系統(tǒng),每個(gè)子系統(tǒng)都必須了解其他子系統(tǒng)的接口。子系統(tǒng)之間的交互更復(fù)雜,這種交互方式還可能存在通信環(huán)路。

總地說來,單向交互比雙向交互更容易理解,也更容易設(shè)計(jì)和修改,因此應(yīng)該盡量使用客戶-供應(yīng)商關(guān)系11.4系統(tǒng)分解1.子系統(tǒng)之間的兩種交互方式(1)客戶-供應(yīng)商關(guān)系242.組織系統(tǒng)的兩種方案(1)層次組織把軟件系統(tǒng)組織成一個(gè)層次系統(tǒng),每層是一個(gè)子系統(tǒng)。上層在下層的基礎(chǔ)上建立,下層為實(shí)現(xiàn)上層功能而提供必要的服務(wù)。每一層內(nèi)所包含的對象,彼此間相互獨(dú)立,而處于不同層次上的對象,彼此間往往有關(guān)聯(lián)。在上、下層之間存在客戶-供應(yīng)商關(guān)系。低層相當(dāng)于供應(yīng)商,上層相當(dāng)于客戶。層次結(jié)構(gòu)又可進(jìn)一步劃分成兩種模式:封閉式和開放式。11.4系統(tǒng)分解2.組織系統(tǒng)的兩種方案(1)層次組織11.4系統(tǒng)分解252.組織系統(tǒng)的兩種方案(2)塊狀組織把軟件系統(tǒng)垂直地分解成若干個(gè)相對獨(dú)立的、弱耦合的子系統(tǒng)。一個(gè)子系統(tǒng)相當(dāng)于一塊,每塊提供一種類型的服務(wù)。

利用層次和塊的各種可能的組合,可以成功地把多個(gè)子系統(tǒng)組成一個(gè)完整的軟件系統(tǒng)。

右圖表示一個(gè)混合使用層次與塊狀的的應(yīng)用系統(tǒng)的組織結(jié)構(gòu)。11.4系統(tǒng)分解2.組織系統(tǒng)的兩種方案(2)塊狀組織利2611.4系統(tǒng)分解2.組織系統(tǒng)的兩種方案(3)設(shè)計(jì)系統(tǒng)的拓?fù)浣Y(jié)構(gòu)

由子系統(tǒng)組成完整的系統(tǒng)時(shí),典型的拓?fù)浣Y(jié)構(gòu)有管道形、樹形、星形等。

設(shè)計(jì)者應(yīng)該采用與問題結(jié)構(gòu)相適應(yīng)的、盡可能簡單的拓?fù)浣Y(jié)構(gòu),以減少子系統(tǒng)之間的交互數(shù)量。11.4系統(tǒng)分解2.組織系統(tǒng)的兩種方案(3)設(shè)計(jì)系統(tǒng)的27

11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則11.2啟發(fā)規(guī)則11.3軟件重用11.4系統(tǒng)分解11.5設(shè)計(jì)問題域子系統(tǒng)11.6設(shè)計(jì)人機(jī)交互子系統(tǒng)

11.7設(shè)計(jì)任務(wù)管理子系統(tǒng)11.8設(shè)計(jì)數(shù)據(jù)管理子系統(tǒng)11.9設(shè)計(jì)類中的服務(wù)11.10設(shè)計(jì)關(guān)聯(lián)11.11設(shè)計(jì)優(yōu)化主要內(nèi)容11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則11.7設(shè)11.5設(shè)計(jì)問題域子系統(tǒng)1.調(diào)整需求2.重用已有的類3.把問題域類組合在一起4.添加一般化類以建立協(xié)議5.調(diào)整繼承類層次6.ATM系統(tǒng)實(shí)例

在面向?qū)ο笤O(shè)計(jì)過程中,可能對面向?qū)ο蠓治鏊贸龅膯栴}域模型做補(bǔ)充或修改11.5設(shè)計(jì)問題域子系統(tǒng)1.調(diào)整需求2.重用已有的類2911.5設(shè)計(jì)問題域子系統(tǒng)1.調(diào)整需求用戶需求或外部環(huán)境發(fā)生了變化。分析員對問題域理解不透徹或缺乏領(lǐng)域?qū)<規(guī)椭?,以致面向?qū)ο蠓治瞿P筒荒芡暾?zhǔn)確地反映用戶的真實(shí)需求。

兩種情況會(huì)導(dǎo)致修改通過面向?qū)ο蠓治鏊_定的系統(tǒng)需求11.5設(shè)計(jì)問題域子系統(tǒng)1.調(diào)整需求用戶需求或外部環(huán)境302.重用已有的類選擇有可能被重用的已有類,標(biāo)出這些候選類中對本問題無用的屬性和服務(wù),盡量重用那些能使無用的屬性和服務(wù)降到最低程度的類。在被重用的已有類和問題域類之間添加泛化關(guān)系(即從被重用的已有類派生出問題域類)。標(biāo)出問題域類中從已有類繼承來的屬性和服務(wù),現(xiàn)在已經(jīng)無須在問題域類內(nèi)定義它們了。修改與問題域類相關(guān)的關(guān)聯(lián),必要時(shí)改為與被重用的已有類相關(guān)的關(guān)聯(lián)。如果有可能重用已有的類,則重用已有類的典型過程如下11.5設(shè)計(jì)問題域子系統(tǒng)2.重用已有的類選擇有可能被重用的已有類,標(biāo)出這些候選類中313.把問題域類組合在一起4.添加一般化類以建立協(xié)議在面向?qū)ο笤O(shè)計(jì)過程中,設(shè)計(jì)者往往通過引入一個(gè)根類而把問題域類組合在一起。

一些具體類需要有一個(gè)公共的協(xié)議,也就是說,它們都需要定義一組類似的服務(wù)(很可能還需要相應(yīng)的屬性)。在這種情況下可以引入一個(gè)附加類(例如根類),以便建立這個(gè)協(xié)議11.5設(shè)計(jì)問題域子系統(tǒng)3.把問題域類組合在一起4.添加一般化類以建立協(xié)議325.調(diào)整繼承類層次(1)使用多重繼承機(jī)制

避免屬性及服務(wù)命名沖突窄菱形模式闊菱形模式11.5設(shè)計(jì)問題域子系統(tǒng)5.調(diào)整繼承類層次(1)使用多重繼承機(jī)制避335.調(diào)整繼承類層次(1)使用多重繼承機(jī)制11.5設(shè)計(jì)問題域子系統(tǒng)

如果面向?qū)ο蠓治瞿P椭邪硕嘀乩^承關(guān)系,然而所使用的程序設(shè)計(jì)語言卻并不提供多重繼承機(jī)制,則必須修改面向?qū)ο蠓治龅慕Y(jié)果。即使使用支持多重繼承的語言,有時(shí)也會(huì)出于實(shí)現(xiàn)考慮而對面向?qū)ο蠓治鼋Y(jié)果作一些調(diào)整。下面分情況討論。窄菱形模式,出現(xiàn)屬性及服務(wù)命名沖突的可能性比較大;闊菱形模式,屬性及服務(wù)的名字發(fā)生沖突的可能性比較小,但是,它需要用更多的類才能表示同一個(gè)設(shè)計(jì)。5.調(diào)整繼承類層次(1)使用多重繼承機(jī)制11.5設(shè)計(jì)問345.調(diào)整繼承類層次(2)使用單重繼承機(jī)制

如果打算使用僅提供單繼承機(jī)制的語言實(shí)現(xiàn)系統(tǒng),則必須把面向?qū)ο蠓治瞿P椭械亩嘀乩^承結(jié)構(gòu)轉(zhuǎn)換成單繼承結(jié)構(gòu)。顯然,在多重繼承結(jié)構(gòu)中的某些繼承關(guān)系,經(jīng)簡化后將不再存在,這表明需要在各個(gè)具體類中重復(fù)定義某些屬性和服務(wù)。11.5設(shè)計(jì)問題域子系統(tǒng)5.調(diào)整繼承類層次(2)使用單重繼承機(jī)制356.ATM系統(tǒng)實(shí)例

ATM三個(gè)子系統(tǒng)為星形拓?fù)浣Y(jié)構(gòu);物理聯(lián)結(jié)用專用電話線實(shí)現(xiàn);根據(jù)ATM站號和分行代碼,區(qū)分由每個(gè)ATM站和每臺分行計(jì)算機(jī)聯(lián)向中央計(jì)算機(jī)的電話線。

在面向?qū)ο蠓治鲞^程中已經(jīng)對ATM系統(tǒng)做了相當(dāng)仔細(xì)的分析,而且假設(shè)所使用的實(shí)現(xiàn)環(huán)境能完全支持模型的實(shí)現(xiàn)。

因此,在設(shè)計(jì)階段無須對已有的問題域模型作實(shí)質(zhì)性的修改或擴(kuò)充。11.5設(shè)計(jì)問題域子系統(tǒng)6.ATM系統(tǒng)實(shí)例ATM三個(gè)子系統(tǒng)為星形拓?fù)?6

11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則11.2啟發(fā)規(guī)則11.3軟件重用11.4系統(tǒng)分解11.5設(shè)計(jì)問題域子系統(tǒng)11.6設(shè)計(jì)人機(jī)交互子系統(tǒng)

11.7設(shè)計(jì)任務(wù)管理子系統(tǒng)11.8設(shè)計(jì)數(shù)據(jù)管理子系統(tǒng)11.9設(shè)計(jì)類中的服務(wù)11.10設(shè)計(jì)關(guān)聯(lián)11.11設(shè)計(jì)優(yōu)化主要內(nèi)容11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則11.7設(shè)11.6設(shè)計(jì)人機(jī)交互子系統(tǒng)1.分類用戶2.描述用戶3.設(shè)計(jì)命令層次4.設(shè)計(jì)人機(jī)交互類11.6設(shè)計(jì)人機(jī)交互子系統(tǒng)1.分類用戶2.描述用戶3381.分類用戶

為了更好地了解用戶的需要與愛好,以便設(shè)計(jì)出符合用戶需要的界面,設(shè)計(jì)者首先應(yīng)該把將來可能與系統(tǒng)交互的用戶分類。按技能水平分類(新手、初級、中級、高級)。按職務(wù)分類(總經(jīng)理、經(jīng)理、職員)。按所屬集團(tuán)分類(職員、顧客)。11.6設(shè)計(jì)人機(jī)交互子系統(tǒng)1.分類用戶為了更好地了解用戶的需要與392.描述用戶用戶類型。使用系統(tǒng)欲達(dá)到的目的。特征(年齡、性別、受教育程度、限制因素等)。關(guān)鍵的成功因素(需求、愛好、習(xí)慣等)。技能水平。完成本職工作的腳本。了解將來使用系統(tǒng)的每類用戶的情況11.6設(shè)計(jì)人機(jī)交互子系統(tǒng)2.描述用戶用戶類型。了解將來使用系統(tǒng)的每類用戶的情況11403.設(shè)計(jì)命令層次(1)研究現(xiàn)有的人機(jī)交互含義和準(zhǔn)則基本外觀及給用戶的感受都是相同的每個(gè)程序至少有一個(gè)窗口,它由標(biāo)題欄標(biāo)識;程序中大多數(shù)功能可通過菜單選用;選中某些菜單項(xiàng)會(huì)彈出對話框,用戶可通過它輸入附加信息;……廣大用戶習(xí)以為常的許多約定File菜單的最后一個(gè)菜單項(xiàng)是Exit;在文件列表框中用鼠標(biāo)單擊某個(gè)表項(xiàng),則相應(yīng)的文件名變亮,若用鼠標(biāo)雙擊則會(huì)打開該文件;……Windows已經(jīng)成了微機(jī)上圖形用戶界面事實(shí)上的工業(yè)標(biāo)準(zhǔn)11.6設(shè)計(jì)人機(jī)交互子系統(tǒng)3.設(shè)計(jì)命令層次(1)研究現(xiàn)有的人機(jī)交互含義和準(zhǔn)則基本外413.設(shè)計(jì)命令層次(2)確定初始的命令層次(3)精化命令層次所謂命令層次,實(shí)質(zhì)上是用過程抽象機(jī)制組織起來的、可供選用的服務(wù)的表示形式。設(shè)計(jì)命令層次時(shí),通常先從對服務(wù)的過程抽象著手,然后再進(jìn)一步修改它們,以適合具體應(yīng)用環(huán)境的需要。次序整體-部分關(guān)系寬度和深度操作步驟11.6設(shè)計(jì)人機(jī)交互子系統(tǒng)3.設(shè)計(jì)命令層次(2)確定初始的命令層次(3)精化命令424.設(shè)計(jì)人機(jī)交互類人機(jī)交互類與所使用的操作系統(tǒng)及編程語言密切相關(guān)

例如,在Windows環(huán)境下運(yùn)行的VisualC++語言提供了MFC類庫,設(shè)計(jì)人機(jī)交互類時(shí),往往僅需從MFC類庫中選出一些適用的類,然后從這些類派生出符合自己需要的類就可以了。11.6設(shè)計(jì)人機(jī)交互子系統(tǒng)4.設(shè)計(jì)人機(jī)交互類人機(jī)交互類與所使用的操作系統(tǒng)及編程語言密43

11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則11.2啟發(fā)規(guī)則11.3軟件重用11.4系統(tǒng)分解11.5設(shè)計(jì)問題域子系統(tǒng)11.6設(shè)計(jì)人機(jī)交互子系統(tǒng)11.7設(shè)計(jì)任務(wù)管理子系統(tǒng)11.8設(shè)計(jì)數(shù)據(jù)管理子系統(tǒng)11.9設(shè)計(jì)類中的服務(wù)11.10設(shè)計(jì)關(guān)聯(lián)11.11設(shè)計(jì)優(yōu)化主要內(nèi)容11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則11.7設(shè)11.7設(shè)計(jì)任務(wù)管理子系統(tǒng)1.分析并發(fā)性

設(shè)計(jì)工作的一項(xiàng)重要內(nèi)容就是,確定哪些是必須同時(shí)動(dòng)作的對象,哪些是相互排斥的對象。然后進(jìn)一步設(shè)計(jì)任務(wù)管理子系統(tǒng)。如果兩個(gè)對象彼此間不存在交互,或者它們同時(shí)接受事件,則這兩個(gè)對象在本質(zhì)上是并發(fā)的。通過檢查各個(gè)對象的狀態(tài)圖及它們之間交換的事件,能夠把若干個(gè)非并發(fā)的對象歸并到一條控制線中。在計(jì)算機(jī)系統(tǒng)中用任務(wù)(task)實(shí)現(xiàn)控制線,一般認(rèn)為任務(wù)是進(jìn)程(process)的別名。通常把多個(gè)任務(wù)的并發(fā)執(zhí)行稱為多任務(wù)。劃分任務(wù),可以簡化系統(tǒng)的設(shè)計(jì)及編碼工作。這種并發(fā)行為既可以在不同的處理器上實(shí)現(xiàn),也可以在單個(gè)處理器上利用多任務(wù)操作系統(tǒng)仿真實(shí)現(xiàn)。11.7設(shè)計(jì)任務(wù)管理子系統(tǒng)1.分析并發(fā)性設(shè)452.設(shè)計(jì)任務(wù)管理子系統(tǒng)(1)

確定事件驅(qū)動(dòng)型任務(wù)(2)確定時(shí)鐘驅(qū)動(dòng)型任務(wù)(3)確定優(yōu)先任務(wù)(4)確定關(guān)鍵任務(wù)(5)確定協(xié)調(diào)任務(wù)(6)盡量減少任務(wù)數(shù)(7)確定資源需求11.7設(shè)計(jì)任務(wù)管理子系統(tǒng)2.設(shè)計(jì)任務(wù)管理子系統(tǒng)(1)確定事件驅(qū)動(dòng)型任務(wù)(2)確462.設(shè)計(jì)任務(wù)管理子系統(tǒng)(1)

確定事件驅(qū)動(dòng)型任務(wù)事件驅(qū)動(dòng)任務(wù)可能主要完成通信工作工作過程如下:任務(wù)處于睡眠狀態(tài)(不消耗處理器時(shí)間),等待來自數(shù)據(jù)線或其他數(shù)據(jù)源的中斷;接收到中斷喚醒該任務(wù),接收數(shù)據(jù)并放入內(nèi)存緩沖區(qū)或其他目的地,通知需要知道這件事的對象;該任務(wù)又回到睡眠狀態(tài)。11.7設(shè)計(jì)任務(wù)管理子系統(tǒng)2.設(shè)計(jì)任務(wù)管理子系統(tǒng)(1)確定事件驅(qū)動(dòng)型任務(wù)事件驅(qū)動(dòng)任472.設(shè)計(jì)任務(wù)管理子系統(tǒng)(2)確定時(shí)鐘驅(qū)動(dòng)型任務(wù)任務(wù)每隔一定時(shí)間間隔就被觸發(fā)以執(zhí)行某些處理工作過程如下:任務(wù)設(shè)置了喚醒時(shí)間后進(jìn)入睡眠狀態(tài);任務(wù)睡眠(不消耗處理器時(shí)間),等待來自系統(tǒng)的中斷;一旦接收到這種中斷,任務(wù)就被喚醒并做它的工作,通知有關(guān)的對象,然后該任務(wù)又回到睡眠狀態(tài)。11.7設(shè)計(jì)任務(wù)管理子系統(tǒng)2.設(shè)計(jì)任務(wù)管理子系統(tǒng)(2)確定時(shí)鐘驅(qū)動(dòng)型任務(wù)任務(wù)每隔一482.設(shè)計(jì)任務(wù)管理子系統(tǒng)(3)確定優(yōu)先任務(wù)優(yōu)先任務(wù)可以滿足高優(yōu)先級或低優(yōu)先級的處理需求高優(yōu)先級:某些服務(wù)具有很高的優(yōu)先級,為了在嚴(yán)格限定的時(shí)間內(nèi)完成這種服務(wù),可能需要把這類服務(wù)分離成獨(dú)立的任務(wù)。低優(yōu)先級:與高優(yōu)先級相反,有些服務(wù)是低優(yōu)先級的,屬于低優(yōu)先級處理(通常指那些背景處理)。設(shè)計(jì)時(shí)可能用額外的任務(wù)把這樣的處理分離出來。11.7設(shè)計(jì)任務(wù)管理子系統(tǒng)2.設(shè)計(jì)任務(wù)管理子系統(tǒng)(3)確定優(yōu)先任務(wù)優(yōu)先任務(wù)可以滿足492.設(shè)計(jì)任務(wù)管理子系統(tǒng)(4)確定關(guān)鍵任務(wù)關(guān)鍵任務(wù)是有關(guān)系統(tǒng)成功或失敗的關(guān)鍵處理,這類處理通常都有嚴(yán)格的可靠性要求。在設(shè)計(jì)過程中可能用額外的任務(wù)把這樣的關(guān)鍵處理分離出來,以滿足高可靠性處理的要求。對高可靠性處理應(yīng)該精心設(shè)計(jì)和編碼,并且應(yīng)該嚴(yán)格測試。11.7設(shè)計(jì)任務(wù)管理子系統(tǒng)2.設(shè)計(jì)任務(wù)管理子系統(tǒng)(4)確定關(guān)鍵任務(wù)關(guān)鍵任務(wù)是有關(guān)系502.設(shè)計(jì)任務(wù)管理子系統(tǒng)(5)確定協(xié)調(diào)任務(wù)當(dāng)系統(tǒng)中存在3個(gè)以上任務(wù)時(shí),就應(yīng)該增加一個(gè)任務(wù),用它作為協(xié)調(diào)任務(wù)。引入?yún)f(xié)調(diào)任務(wù)會(huì)增加系統(tǒng)的總開銷(增加從一個(gè)任務(wù)到另一個(gè)任務(wù)的轉(zhuǎn)換時(shí)間),但是引入?yún)f(xié)調(diào)任務(wù)有助于把不同任務(wù)之間的協(xié)調(diào)控制封裝起來。使用狀態(tài)轉(zhuǎn)換矩陣可以比較方便地描述該任務(wù)的行為。這類任務(wù)應(yīng)該僅做協(xié)調(diào)工作,不要讓它再承擔(dān)其他服務(wù)工作。11.7設(shè)計(jì)任務(wù)管理子系統(tǒng)2.設(shè)計(jì)任務(wù)管理子系統(tǒng)(5)確定協(xié)調(diào)任務(wù)當(dāng)系統(tǒng)中存在3個(gè)512.設(shè)計(jì)任務(wù)管理子系統(tǒng)(6)盡量減少任務(wù)數(shù)(7)確定資源需求

必須仔細(xì)分析和選擇每個(gè)確實(shí)需要的任務(wù),使系統(tǒng)中包含的任務(wù)數(shù)盡量少。

使用多處理器或固件,主要是為了滿足高性能的需求。設(shè)計(jì)者必須通過計(jì)算系統(tǒng)載荷(即每秒處理的業(yè)務(wù)數(shù)及處理一個(gè)業(yè)務(wù)所花費(fèi)的時(shí)間),來估算所需要的CPU(或其他固件)的處理能力。11.7設(shè)計(jì)任務(wù)管理子系統(tǒng)2.設(shè)計(jì)任務(wù)管理子系統(tǒng)(6)盡量減少任務(wù)數(shù)(7)確定資522.設(shè)計(jì)任務(wù)管理子系統(tǒng)使用硬件實(shí)現(xiàn)某些子系統(tǒng)的主要原因可能是:現(xiàn)有的硬件完全能滿足某些方面的需求,例如,買一塊浮點(diǎn)運(yùn)算卡比用軟件實(shí)現(xiàn)浮點(diǎn)運(yùn)算要容易得多。專用硬件比通用的CPU性能更高。例如,目前在信號處理系統(tǒng)中廣泛使用固件實(shí)現(xiàn)快速傅里葉變換。

設(shè)計(jì)者應(yīng)該綜合考慮各種因素,以決定哪些子系統(tǒng)用硬件實(shí)現(xiàn),哪些子系統(tǒng)用軟件實(shí)現(xiàn)。

設(shè)計(jì)者在決定到底采用軟件還是硬件的時(shí)候,必須綜合權(quán)衡一致性、成本、性能等多種因素,還要考慮未來的可擴(kuò)充性和可修改性。11.7設(shè)計(jì)任務(wù)管理子系統(tǒng)2.設(shè)計(jì)任務(wù)管理子系統(tǒng)使用硬件實(shí)現(xiàn)某些子系統(tǒng)的主要原因可能53

11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則11.2啟發(fā)規(guī)則11.3軟件重用11.4系統(tǒng)分解11.5設(shè)計(jì)問題域子系統(tǒng)11.6設(shè)計(jì)人機(jī)交互子系統(tǒng)

11.7設(shè)計(jì)任務(wù)管理子系統(tǒng)11.8設(shè)計(jì)數(shù)據(jù)管理子系統(tǒng)11.9設(shè)計(jì)類中的服務(wù)11.10設(shè)計(jì)關(guān)聯(lián)11.11設(shè)計(jì)優(yōu)化主要內(nèi)容11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則11.7設(shè)11.8設(shè)計(jì)數(shù)據(jù)管理子系統(tǒng)11.8.1選擇數(shù)據(jù)存儲管理模式

數(shù)據(jù)管理子系統(tǒng)是系統(tǒng)存儲或檢索對象的基本設(shè)施,它建立在某種數(shù)據(jù)存儲管理系統(tǒng)之上,并且隔離了數(shù)據(jù)存儲管理模式(文件、關(guān)系數(shù)據(jù)庫或面向?qū)ο髷?shù)據(jù)庫)的影響。1.文件管理系統(tǒng)文件管理系統(tǒng)是操作系統(tǒng)的一個(gè)組成部分,使用它長期保存數(shù)據(jù)具有成本低和簡單等特點(diǎn),但是,文件操作的級別低,為提供適當(dāng)?shù)某橄蠹墑e還必須編寫額外的代碼。此外,不同操作系統(tǒng)的文件管理系統(tǒng)往往有明顯差異。11.8設(shè)計(jì)數(shù)據(jù)管理子系統(tǒng)11.8.1選擇數(shù)據(jù)存儲管理模552.關(guān)系數(shù)據(jù)庫管理系統(tǒng)關(guān)系數(shù)據(jù)庫管理系統(tǒng)的理論基礎(chǔ)是關(guān)系代數(shù),它不僅理論基礎(chǔ)堅(jiān)實(shí)而且有下列一些主要優(yōu)點(diǎn)提供了各種最基本的數(shù)據(jù)管理功能為多種應(yīng)用提供了一致的接口標(biāo)準(zhǔn)化的語言(SQL語言)為了做到通用與一致,關(guān)系數(shù)據(jù)庫管理系統(tǒng)通常都相當(dāng)復(fù)雜,且有下述一些具體缺點(diǎn)(1)運(yùn)行開銷大(2)不能滿足高級應(yīng)用的需求(3)與程序設(shè)計(jì)語言的連接不自然11.8設(shè)計(jì)數(shù)據(jù)管理子系統(tǒng)2.關(guān)系數(shù)據(jù)庫管理系統(tǒng)關(guān)系數(shù)據(jù)庫管理系統(tǒng)的理論基礎(chǔ)是關(guān)系代563.面向?qū)ο髷?shù)據(jù)庫管理系統(tǒng)面向?qū)ο髷?shù)據(jù)庫管理系統(tǒng)主要有兩種設(shè)計(jì)途徑擴(kuò)展的關(guān)系數(shù)據(jù)庫管理系統(tǒng)(1)在關(guān)系數(shù)據(jù)庫的基礎(chǔ)上,增加了抽象數(shù)據(jù)類型和繼承機(jī)制。(2)增加了創(chuàng)建及管理類和對象的通用服務(wù)。擴(kuò)展的面向?qū)ο蟪绦蛟O(shè)計(jì)語言

(1)擴(kuò)充了面向?qū)ο蟪绦蛟O(shè)計(jì)語言的語法和功能,增加了在數(shù)據(jù)

庫中存儲和管理對象的機(jī)制。(2)開發(fā)人員可以用統(tǒng)一的面向?qū)ο笥^點(diǎn)進(jìn)行設(shè)計(jì),不再需要區(qū)分存儲數(shù)據(jù)結(jié)構(gòu)和程序數(shù)據(jù)結(jié)構(gòu)(即生命期短暫的數(shù)據(jù))。11.8設(shè)計(jì)數(shù)據(jù)管理子系統(tǒng)3.面向?qū)ο髷?shù)據(jù)庫管理系統(tǒng)面向?qū)ο髷?shù)據(jù)庫管理系統(tǒng)主要有兩種57

11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則11.2啟發(fā)規(guī)則11.3軟件重用11.4系統(tǒng)分解11.5設(shè)計(jì)問題域子系統(tǒng)11.6設(shè)計(jì)人機(jī)交互子系統(tǒng)

11.7設(shè)計(jì)任務(wù)管理子系統(tǒng)11.8設(shè)計(jì)數(shù)據(jù)管理子系統(tǒng)11.9設(shè)計(jì)類中的服務(wù)11.10設(shè)計(jì)關(guān)聯(lián)11.11設(shè)計(jì)優(yōu)化主要內(nèi)容11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則11.7設(shè)11.9設(shè)計(jì)類中的服務(wù)11.9.1確定類中應(yīng)有的服務(wù)

面向?qū)ο蠓治龅贸龅膶ο竽P?,通常并不詳?xì)描述類中的服務(wù)。面向?qū)ο笤O(shè)計(jì)則是擴(kuò)充、完善和細(xì)化面向?qū)ο蠓治瞿P偷倪^程,設(shè)計(jì)類中的服務(wù)是它的一項(xiàng)重要工作內(nèi)容。確定類中應(yīng)有的服務(wù)需要綜合考慮對象模型、動(dòng)態(tài)模型和功能模型,才能正確確定類中應(yīng)有的服務(wù)。對象模型是進(jìn)行對象設(shè)計(jì)的基本框架。11.9設(shè)計(jì)類中的服務(wù)11.9.1確定類中應(yīng)有的服務(wù)59一張狀態(tài)圖描繪了一類對象的生命周期,圖中的狀態(tài)轉(zhuǎn)換是執(zhí)行對象服務(wù)的結(jié)果。功能模型指明了系統(tǒng)必須提供的服務(wù)。狀態(tài)圖中狀態(tài)轉(zhuǎn)換所觸發(fā)的動(dòng)作,在功能模型中有時(shí)可能擴(kuò)展成一張數(shù)據(jù)流圖。數(shù)據(jù)流圖中的某些處理可能與對象提供的服務(wù)相對應(yīng),有一些規(guī)則有助于確定操作的目標(biāo)對象(即應(yīng)該在該對象所屬的類中定義這個(gè)服務(wù))。當(dāng)一個(gè)處理涉及多個(gè)對象時(shí),通常在起主要作用的對象類中定義這個(gè)服務(wù)。11.9設(shè)計(jì)類中的服務(wù)一張狀態(tài)圖描繪了一類對象的生命周期,圖中的狀態(tài)轉(zhuǎn)換是執(zhí)行對象6011.9.2設(shè)計(jì)實(shí)現(xiàn)服務(wù)的方法1.設(shè)計(jì)實(shí)現(xiàn)服務(wù)的算法應(yīng)該考慮下列幾個(gè)因素:算法復(fù)雜度。

通常選用復(fù)雜度較低(即效率較高)的算法,但也不要過分追求高效率,應(yīng)以能滿足用戶需求為準(zhǔn)。(2)容易理解與容易實(shí)現(xiàn)。

容易理解與容易實(shí)現(xiàn)的要求往往與高效率有矛盾,設(shè)計(jì)者應(yīng)該對這兩個(gè)因素適當(dāng)折衷。(3)易修改。

應(yīng)該盡可能預(yù)測將來可能做的修改,并在設(shè)計(jì)時(shí)預(yù)先做些準(zhǔn)備。11.9設(shè)計(jì)類中的服務(wù)11.9.2設(shè)計(jì)實(shí)現(xiàn)服務(wù)的方法1.設(shè)計(jì)實(shí)現(xiàn)服務(wù)的算法應(yīng)612.選擇數(shù)據(jù)結(jié)構(gòu)在分析階段,僅需考慮系統(tǒng)中需要的信息的邏輯結(jié)構(gòu),在面向?qū)ο笤O(shè)計(jì)過程中,則需要選擇能夠方便、有效地實(shí)現(xiàn)算法的物理數(shù)據(jù)結(jié)構(gòu)。3.算法與數(shù)據(jù)結(jié)構(gòu)的關(guān)系

設(shè)計(jì)階段是解決“怎么做”的時(shí)候了,因此,確定實(shí)現(xiàn)服務(wù)方法中所需要的算法與數(shù)據(jù)結(jié)構(gòu)是非常關(guān)鍵的。主要考慮下列因素:(1)分析問題尋找數(shù)據(jù)特點(diǎn),提煉出所有可行有效的算法;(2)定義與所提煉算法相關(guān)聯(lián)的數(shù)據(jù)結(jié)構(gòu);(3)依據(jù)此數(shù)據(jù)結(jié)構(gòu)進(jìn)行算法的詳細(xì)設(shè)計(jì);(4)進(jìn)行一定規(guī)模的實(shí)驗(yàn)與評測;(5)確定最佳設(shè)計(jì)。11.9設(shè)計(jì)類中的服務(wù)2.選擇數(shù)據(jù)結(jié)構(gòu)在分析階段,僅需考慮系統(tǒng)中624.定義內(nèi)部類和內(nèi)部操作

在面向?qū)ο笤O(shè)計(jì)過程中,可能需要增添一些在需求陳述中沒有提到的類,這些新增加的類,主要用來存放在執(zhí)行算法過程中所得出的某些中間結(jié)果。

此外,復(fù)雜操作往往可以用簡單對象上的更低層操作來定義。因此,在分解高層操作時(shí)常常引入新的低層操作。在面向?qū)ο笤O(shè)計(jì)過程中應(yīng)該定義這些新增加的低層操作。11.9設(shè)計(jì)類中的服務(wù)4.定義內(nèi)部類和內(nèi)部操作在面向?qū)ο笤O(shè)計(jì)過程63

11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則11.2啟發(fā)規(guī)則11.3軟件重用11.4系統(tǒng)分解11.5設(shè)計(jì)問題域子系統(tǒng)11.6設(shè)計(jì)人機(jī)交互子系統(tǒng)

11.7設(shè)計(jì)任務(wù)管理子系統(tǒng)11.8設(shè)計(jì)數(shù)據(jù)管理子系統(tǒng)11.9設(shè)計(jì)類中的服務(wù)11.10設(shè)計(jì)關(guān)聯(lián)11.11設(shè)計(jì)優(yōu)化主要內(nèi)容11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則11.7設(shè)11.10設(shè)計(jì)關(guān)聯(lián)1.關(guān)聯(lián)的遍歷2.實(shí)現(xiàn)單向關(guān)聯(lián)3.實(shí)現(xiàn)雙向關(guān)聯(lián)4.關(guān)聯(lián)對象的實(shí)現(xiàn)

在對象模型中,關(guān)聯(lián)是聯(lián)結(jié)不同對象的紐帶,它指定了對象相互間的訪問路徑。在面向?qū)ο笤O(shè)計(jì)過程中,設(shè)計(jì)人員必須確定實(shí)現(xiàn)關(guān)聯(lián)的具體策略。既可以選定一個(gè)全局性的策略統(tǒng)一實(shí)現(xiàn)所有關(guān)聯(lián),也可以分別為每個(gè)關(guān)聯(lián)選擇具體的實(shí)現(xiàn)策略,以與它在應(yīng)用系統(tǒng)中的使用方式相適應(yīng)。11.10設(shè)計(jì)關(guān)聯(lián)1.關(guān)聯(lián)的遍歷2.實(shí)現(xiàn)單向關(guān)聯(lián)36511.10設(shè)計(jì)關(guān)聯(lián)1.關(guān)聯(lián)的遍歷2.實(shí)現(xiàn)單向關(guān)聯(lián)在應(yīng)用系統(tǒng)中,使用關(guān)聯(lián)有兩種可能的方式:單向遍歷和雙向遍歷。在使用原型法開發(fā)軟件的時(shí)候,原型中所有關(guān)聯(lián)都應(yīng)該是雙向的,以便于增加新的行為,快速地?cái)U(kuò)充和修改原型。

用指針可以方便地實(shí)現(xiàn)單向關(guān)聯(lián)。如果關(guān)聯(lián)的重?cái)?shù)是一元的(如圖a所示),則實(shí)現(xiàn)關(guān)聯(lián)的指針是一個(gè)簡單指針;如果重?cái)?shù)是多元的,則需要用一個(gè)指針集合實(shí)現(xiàn)關(guān)聯(lián)(參見圖b)。11.10設(shè)計(jì)關(guān)聯(lián)1.關(guān)聯(lián)的遍歷2.實(shí)現(xiàn)單向關(guān)聯(lián)在6611.10設(shè)計(jì)關(guān)聯(lián)3.實(shí)現(xiàn)雙向關(guān)聯(lián)實(shí)現(xiàn)雙向關(guān)聯(lián)有下列3種方法:(1)只用屬性實(shí)現(xiàn)一個(gè)方向的關(guān)聯(lián)

當(dāng)需要反向遍歷時(shí)就執(zhí)行一次正向查找。如果兩個(gè)方向遍歷的頻度相差很大,而且需要盡量減少存儲開銷和修改時(shí)的開銷,則這是一種很有效的實(shí)現(xiàn)雙向關(guān)聯(lián)的方法。(2)兩個(gè)方向的關(guān)聯(lián)都用屬性實(shí)現(xiàn)

這種方法能實(shí)現(xiàn)快速訪問,但是,如果修改了一個(gè)屬性,則相關(guān)的屬性也必須隨之修改,才能保持該關(guān)聯(lián)鏈的一致性。當(dāng)訪問次數(shù)遠(yuǎn)遠(yuǎn)多于修改次數(shù)時(shí),這種實(shí)現(xiàn)方法很有效。11.10設(shè)計(jì)關(guān)聯(lián)3.實(shí)現(xiàn)雙向關(guān)聯(lián)實(shí)現(xiàn)雙向關(guān)聯(lián)有下列36711.10設(shè)計(jì)關(guān)聯(lián)3.實(shí)現(xiàn)雙向關(guān)聯(lián)實(shí)現(xiàn)雙向關(guān)聯(lián)有下列3種方法:(3)用獨(dú)立的關(guān)聯(lián)對象實(shí)現(xiàn)雙向關(guān)聯(lián)

關(guān)聯(lián)對象不屬于相互關(guān)聯(lián)的任何一個(gè)類,它是獨(dú)立的關(guān)聯(lián)類的實(shí)例。如右圖所示。11.10設(shè)計(jì)關(guān)聯(lián)3.實(shí)現(xiàn)雙向關(guān)聯(lián)實(shí)現(xiàn)雙向關(guān)聯(lián)有下列36811.10設(shè)計(jì)關(guān)聯(lián)4.關(guān)聯(lián)對象的實(shí)現(xiàn)對于一對一關(guān)聯(lián)來說,關(guān)聯(lián)對象可以與參與關(guān)聯(lián)的任一個(gè)對象合并。對于一對多關(guān)聯(lián)來說,關(guān)聯(lián)對象可以與“多”端對象合并如果是多對多關(guān)聯(lián),則關(guān)聯(lián)鏈的性質(zhì)不可能只與一個(gè)參與關(guān)聯(lián)的對象有關(guān),通常用一個(gè)獨(dú)立的關(guān)聯(lián)類來保存描述關(guān)聯(lián)性質(zhì)的信息,這個(gè)類的每個(gè)實(shí)例表示一條具體的關(guān)聯(lián)鏈及該鏈的屬性(參見上頁圖)。9.4.2節(jié)曾經(jīng)講過,可以引入一個(gè)關(guān)聯(lián)類來保存描述關(guān)聯(lián)性質(zhì)的信息,關(guān)聯(lián)中的每個(gè)連接對應(yīng)著關(guān)聯(lián)類的一個(gè)對象。實(shí)現(xiàn)關(guān)聯(lián)對象的方法取決于關(guān)聯(lián)的重?cái)?shù)。11.10設(shè)計(jì)關(guān)聯(lián)4.關(guān)聯(lián)對象的實(shí)現(xiàn)對于一對一關(guān)聯(lián)來說69

11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則11.2啟發(fā)規(guī)則11.3軟件重用11.4系統(tǒng)分解11.5設(shè)計(jì)問題域子系統(tǒng)11.6設(shè)計(jì)人機(jī)交互子系統(tǒng)

11.7設(shè)計(jì)任務(wù)管理子系統(tǒng)11.8設(shè)計(jì)數(shù)據(jù)管理子系統(tǒng)11.9設(shè)計(jì)類中的服務(wù)11.10設(shè)計(jì)關(guān)聯(lián)11.11設(shè)計(jì)優(yōu)化主要內(nèi)容11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則11.7設(shè)11.11設(shè)計(jì)優(yōu)化11.11.1確定優(yōu)先級11.11.2提高效率的幾項(xiàng)技術(shù)11.11.3調(diào)整繼承關(guān)系11.11設(shè)計(jì)優(yōu)化11.11.1確定優(yōu)先級11.11.7111.11.1確定優(yōu)先級

系統(tǒng)的各項(xiàng)質(zhì)量指標(biāo)并不是同等重要的,設(shè)計(jì)人員必須確定各項(xiàng)質(zhì)量指標(biāo)的相對重要性(即確定優(yōu)先級),以便在優(yōu)化設(shè)計(jì)時(shí)制定折衷方案。系統(tǒng)的整體質(zhì)量與設(shè)計(jì)人員所制定的折衷方案密切相關(guān)。最終產(chǎn)品成功與否,在很大程度上取決于是否選擇好了系統(tǒng)目標(biāo)。在折衷方案中設(shè)置的優(yōu)先級應(yīng)該是模糊的。事實(shí)上,不可能指定精確的優(yōu)先級數(shù)值(例如速度48%,內(nèi)存25%,費(fèi)用8%,可修改性19%)。最常見的情況,是在效率和清晰性之間尋求適當(dāng)?shù)恼壑苑桨浮?/p>

下面兩小節(jié)分別講述在優(yōu)化設(shè)計(jì)時(shí)提高效率的技術(shù),以及建立良好的繼承結(jié)構(gòu)的方法。11.11設(shè)計(jì)優(yōu)化11.11.1確定優(yōu)先級系統(tǒng)的各項(xiàng)質(zhì)量7211.11.2提高效率的幾項(xiàng)技術(shù)1.增加冗余關(guān)聯(lián)以提高訪問效率在面向?qū)ο蠓治鲞^程中,應(yīng)該避免在對象模型中存在冗余的關(guān)聯(lián),因?yàn)槿哂嚓P(guān)聯(lián)不僅沒有增添任何信息,反而會(huì)降低模型的清晰程度。但是,在面向?qū)ο笤O(shè)計(jì)過程中,當(dāng)考慮用戶的訪問模式,及不同類型的訪問彼此間的依賴關(guān)系時(shí),就會(huì)發(fā)現(xiàn),分析階段確定的關(guān)聯(lián)可能并沒有構(gòu)成效率最高的訪問路徑。下面用設(shè)計(jì)公司雇員技能數(shù)據(jù)庫的例子,說明分析訪問路徑及提高訪問效率的方法。11.11設(shè)計(jì)優(yōu)化11.11.2提高效率的幾項(xiàng)技術(shù)1.增加冗余關(guān)聯(lián)以提高73下圖是從面向?qū)ο蠓治瞿P椭姓〉囊徊糠?。公司類中的服?wù)find_skill返回具有指定技能的雇員集合。例如,用戶可能詢問公司中會(huì)講日語的雇員有哪些人。假設(shè)某公司共有2000名雇員,平均每名雇員會(huì)10種技能,則簡單的嵌套查詢將遍歷雇員對象2000次,針對每名雇員平均再遍歷技能對象10次。如果全公司僅有5名雇員精通日語,則查詢命中率僅有1/4000。提高訪問效率的一種方法是使用哈希(Hash)表:“具有技能”這個(gè)關(guān)聯(lián)不再利用無序表實(shí)現(xiàn),而是改用哈希表實(shí)現(xiàn)。只要“會(huì)講日語”是用唯一一個(gè)技能對象表示,這樣改進(jìn)后就會(huì)使查詢次數(shù)由20000次減少到2000次。下圖是從面向?qū)ο蠓治瞿P椭姓〉囊徊糠帧9绢愔?4

但是,當(dāng)僅有極少數(shù)對象滿足查詢條件時(shí),查詢命中率仍然很低。在這種情況下,更有效的提高查詢效率的改進(jìn)方法是,給那些需要經(jīng)常查詢的對象建立索引。

例如,針對上述例子,可以增加一個(gè)額外的限定關(guān)聯(lián)“精通語言”,用來聯(lián)系公司與雇員這兩類對象,如下圖所示。利用適當(dāng)?shù)娜哂嚓P(guān)聯(lián),可以立即查到精通某種具體語言的雇員,而無須多余的訪問。當(dāng)然,索引也必然帶來開銷:占用內(nèi)存空間,而且每當(dāng)修改基關(guān)聯(lián)時(shí)也必須相應(yīng)地修改索引。因此,應(yīng)該只給那些經(jīng)常執(zhí)行并且開銷大、命中率低的查詢建立索引。但是,當(dāng)僅有極少數(shù)對象滿足查詢條件時(shí),查詢752.調(diào)整查詢次序

優(yōu)化算法的一個(gè)途徑是盡量縮小查找范圍。

例如,假設(shè)用戶在使用上述的雇員技能數(shù)據(jù)庫的過程中,希望找出既會(huì)講日語又會(huì)講法語的所有雇員。如果某公司只有5位雇員會(huì)講日語,會(huì)講法語的雇員卻有200人,則應(yīng)該先查找會(huì)講日語的雇員,然后再從這些會(huì)講日語的雇員中查找同時(shí)又會(huì)講法語的人。

改進(jìn)了對象模型的結(jié)構(gòu),從而優(yōu)化了常用的遍歷之后,接下來就應(yīng)該優(yōu)化算法了。11.11設(shè)計(jì)優(yōu)化2.調(diào)整查詢次序優(yōu)化算法的一個(gè)途徑是盡763.保留派生屬性通過某種運(yùn)算而從其他數(shù)據(jù)派生出來的數(shù)據(jù),是一種冗余數(shù)據(jù)。通常把這類數(shù)據(jù)“存儲”(或稱為“隱藏”)在計(jì)算它的表達(dá)式中。如果希望避免重復(fù)計(jì)算復(fù)雜表達(dá)式所帶來的開銷,可以把這類冗余數(shù)據(jù)作為派生屬性保存起來。派生屬性既可以在原有類中定義,也可以定義新類,并用新類的對象保存它們。每當(dāng)修改了基本對象之后,所有依賴于它的、保存派生屬性的對象也必須相應(yīng)地修改。11.11設(shè)計(jì)優(yōu)化3.保留派生屬性通過某種運(yùn)算而從其他數(shù)據(jù)派生出來的數(shù)據(jù),是一7711.11.3調(diào)整繼承關(guān)系抽象與具體為提高繼承程度而修改類定義利用委托實(shí)現(xiàn)行為共享在面向?qū)ο笤O(shè)計(jì)過程中,建立良好的繼承關(guān)系是優(yōu)化設(shè)計(jì)的一項(xiàng)重要內(nèi)容。繼承關(guān)系能夠?yàn)橐粋€(gè)類族定義一個(gè)協(xié)議,并能在類之間實(shí)現(xiàn)代碼共享以減少冗余。一個(gè)基類和它的子孫類在一起稱為一個(gè)類繼承。在面向?qū)ο笤O(shè)計(jì)中,建立良好的類繼承是非常重要的。利用類繼承能夠把若干個(gè)類組織成一個(gè)邏輯結(jié)構(gòu)。下面討論與建立類繼承有關(guān)的問題。11.11設(shè)計(jì)優(yōu)化11.11.3調(diào)整繼承關(guān)系抽象與具體在面向?qū)ο笤O(shè)計(jì)過程中,78抽象與具體在設(shè)計(jì)類繼承時(shí),很少使用純粹自頂向下的方法。通常的作法是,首先創(chuàng)建一些滿足具體用途的類,然后對它們進(jìn)行歸納,一旦歸納出一些通用的類以后,往往可以根據(jù)需要再派生出具體類。在進(jìn)行了一些具體化(即專門化)的工作之后,也許就應(yīng)該再次歸納了。對于某些類繼承來說,這是一個(gè)持續(xù)不斷的演化過程。11.11設(shè)計(jì)優(yōu)化抽象與具體在設(shè)計(jì)類繼承時(shí),很少使用純粹自頂向下的方法。11.79右圖為一個(gè)人們在日常生活中熟悉的設(shè)計(jì)類繼承的例子,說明上述從具體到抽象,再到具體的過程。先創(chuàng)建一些具體類;歸納出抽象類;

進(jìn)一步具體化;再次歸納右圖為一個(gè)人們在日常生活中熟悉的設(shè)計(jì)類繼承的802.為提高繼承程度而修改類定義如果在一組相似的類中存在公共的屬性和公共的行為,則可以把這些公共的屬性和行為抽取出來放在一個(gè)共同的祖先類中,供其子類繼承,如上圖(a)和(b)所示。在對現(xiàn)有類進(jìn)行歸納的時(shí)候,要注意下述兩點(diǎn):

(1)不能違背領(lǐng)域知識和常識;(2)應(yīng)該確?,F(xiàn)有類的協(xié)議(即同外部世界的接口)不變。更常見的情況是,各個(gè)現(xiàn)有類中的屬性和行為(操作),雖然相似卻并不完全相同,在這種情況下需要對類的定義稍加修改,才能定義一個(gè)基類供其子類從中繼承需要的屬性或行為。

有時(shí)抽象出一個(gè)基類之后,在系統(tǒng)中暫時(shí)只有一個(gè)子類能從它繼承屬性和行為,顯然,在當(dāng)前情況下抽象出這個(gè)基類并沒有獲得共享的好處。但是,這樣做通常仍然是值得的,因?yàn)閷砜赡苤赜眠@個(gè)基類。11.11設(shè)計(jì)優(yōu)化2.為提高繼承程度而修改類定義如果在一組相似的類中存在公共813.利用委托實(shí)現(xiàn)行為共享

僅當(dāng)存在真實(shí)的一般-特殊關(guān)系(即子類確實(shí)是父類的一種特殊形式)時(shí),利用繼承機(jī)制實(shí)現(xiàn)行為共享才是合理的。

有時(shí)程序員只想用繼承作為實(shí)現(xiàn)操作共享的一種手段,并不打算確?;惡团缮惥哂邢嗤男袨椤T谶@種情況下,如果從基類繼承的操作中包含了子類不應(yīng)有的行為,則可能引起麻煩。11.11設(shè)計(jì)優(yōu)化3.利用委托實(shí)現(xiàn)行為共享僅當(dāng)存在真實(shí)的一般823.利用委托實(shí)現(xiàn)行為共享例如,假設(shè)程序員正在實(shí)現(xiàn)一個(gè)Stack(后進(jìn)先出棧)類,類庫中已經(jīng)有一個(gè)List(表)類。如果程序員從List類派生出Stack類,則如右圖(a)所示:把一個(gè)元素壓入棧,等價(jià)于在表尾加入一個(gè)元素;把一個(gè)元素彈出棧,相當(dāng)于從表尾移走一個(gè)元素。但是,與此同時(shí),也繼承了一些不需要的表操作。例如,從表頭移走一個(gè)元素或在表頭增加一個(gè)元素。萬一用戶錯(cuò)誤地使用了這類操作,Stack類將不能正常工作。11.11設(shè)計(jì)優(yōu)化3.利用委托實(shí)現(xiàn)行為共享例如,假設(shè)程序員正在實(shí)現(xiàn)一個(gè)Sta833.利用委托實(shí)現(xiàn)行為共享

如果只想把繼承作為實(shí)現(xiàn)操作共享的一種手段,則利用委托(即把一類對象作為另一類對象的屬性,從而在兩類對象間建立組合關(guān)系)也可以達(dá)到同樣目的,而且這種方法更安全。

使用委托機(jī)制時(shí),只有有意義的操作才委托另一類對象實(shí)現(xiàn),因此,不會(huì)發(fā)生不慎繼承了無意義(甚至有害)操作的問題。右圖(b)描繪了委托List類實(shí)現(xiàn)Stack類操作的方法。Stack類的每個(gè)實(shí)例都包含一個(gè)私有的List類實(shí)例(或指向List類實(shí)例的指針)。Stack對象的操作push(壓棧),委托List類對象通過調(diào)用last(定位到表尾)和add(加入一個(gè)元素)操作實(shí)現(xiàn),而pop(出棧)操作則通過List的last和remove(移走一個(gè)元素)操作實(shí)現(xiàn)。11.11設(shè)計(jì)優(yōu)化3.利用委托實(shí)現(xiàn)行為共享如果只想把繼承作為84第11章面向?qū)ο笤O(shè)計(jì)分析是提取和整理用戶需求,并建立問題域精確模型的過程。設(shè)計(jì)則是把分析階段得到的需求轉(zhuǎn)變成符合成本和質(zhì)量要求的、抽象的系統(tǒng)實(shí)現(xiàn)方案的過程。本章首先講述為獲得優(yōu)秀設(shè)計(jì)結(jié)果應(yīng)該遵循的準(zhǔn)則,然后具體講述面向?qū)ο笤O(shè)計(jì)的任務(wù)和方法。從面向?qū)ο蠓治龅矫嫦驅(qū)ο笤O(shè)計(jì)(OOD),是一個(gè)逐漸擴(kuò)充模型的過程?;蛘哒f,面向?qū)ο笤O(shè)計(jì)就是用面向?qū)ο笥^點(diǎn)建立求解域模型的過程。第11章面向?qū)ο笤O(shè)計(jì)分析是提取和整理用戶85

11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則11.2啟發(fā)規(guī)則11.3軟件重用11.4系統(tǒng)分解11.5設(shè)計(jì)問題域子系統(tǒng)11.6設(shè)計(jì)人機(jī)交互子系統(tǒng)

11.7設(shè)計(jì)任務(wù)管理子系統(tǒng)11.8設(shè)計(jì)數(shù)據(jù)管理子系統(tǒng)11.9設(shè)計(jì)類中的服務(wù)11.10設(shè)計(jì)關(guān)聯(lián)11.11設(shè)計(jì)優(yōu)化主要內(nèi)容11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則11.7設(shè)

11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則1.模塊化2.抽象3.信息隱藏4.弱耦合5.強(qiáng)內(nèi)聚6.可重用11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則1.模塊化2.抽象3.信871.模塊化對象就是模塊把數(shù)據(jù)結(jié)構(gòu)和操作這些數(shù)據(jù)的方法

緊密地結(jié)合在一起2.抽象過程抽象數(shù)據(jù)抽象:類參數(shù)化抽象:C++的“模板”

11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則1.模塊化對象就是模塊2.抽象過程抽象11.1面向?qū)?83.信息隱藏4.弱耦合通過對象的封裝性實(shí)現(xiàn)類分離了接口與實(shí)現(xiàn),支持信息隱藏耦合:一個(gè)軟件結(jié)構(gòu)內(nèi)不同模塊之間互連的緊密程度弱耦合:系統(tǒng)中某一部分的變化對其他部分的影響降到最低程度對象之間的耦合:交互耦合&繼承耦合

11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則3.信息隱藏4.弱耦合通過對象的封裝性實(shí)現(xiàn)耦合:一個(gè)軟件895.強(qiáng)內(nèi)聚6.可重用內(nèi)聚衡量一個(gè)模塊內(nèi)各個(gè)元素彼此結(jié)合的緊密程度在設(shè)計(jì)時(shí)應(yīng)該力求做到高內(nèi)聚面向?qū)ο笤O(shè)計(jì)的3種內(nèi)聚:

服務(wù)內(nèi)聚、類內(nèi)聚、一般\特殊內(nèi)聚盡量使用已有的類如果確實(shí)需要?jiǎng)?chuàng)建新類,則在設(shè)計(jì)這些新類的協(xié)議時(shí),應(yīng)該考慮將來的可重復(fù)使用性

11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則5.強(qiáng)內(nèi)聚6.可重用內(nèi)聚衡量一個(gè)模塊內(nèi)各個(gè)元素彼此結(jié)合的90

11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則11.2啟發(fā)規(guī)則11.3軟件重用11.4系統(tǒng)分解11.5設(shè)計(jì)問題域子系統(tǒng)11.6設(shè)計(jì)人機(jī)交互子系統(tǒng)

11.7設(shè)計(jì)任務(wù)管理子系統(tǒng)11.8設(shè)計(jì)數(shù)據(jù)管理子系統(tǒng)11.9設(shè)計(jì)類中的服務(wù)11.10設(shè)計(jì)關(guān)聯(lián)11.11設(shè)計(jì)優(yōu)化主要內(nèi)容11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則11.7設(shè)

11.2啟發(fā)規(guī)則1.設(shè)計(jì)結(jié)果應(yīng)該清晰易懂2.一般-特殊結(jié)構(gòu)的深度應(yīng)適當(dāng)3.設(shè)計(jì)簡單的類4.使用簡單的協(xié)議5.使用簡單的服務(wù)6.把設(shè)計(jì)變動(dòng)減至最小11.2啟發(fā)規(guī)則1.設(shè)計(jì)結(jié)果應(yīng)該清晰易懂2.一般-特921.設(shè)計(jì)結(jié)果應(yīng)該清晰易懂提高軟件可維護(hù)性和可重用性的重要措施保證設(shè)計(jì)結(jié)果清晰易懂的主要因素:

(1)用詞一致

(2)使用已有的協(xié)議

(3)減少消息模式的數(shù)目(4)避免模糊的定義2.一般-特殊結(jié)構(gòu)的深度應(yīng)適當(dāng)類等級中包含的層次數(shù)適當(dāng)一個(gè)中等規(guī)模(大約包含100個(gè)類)的系統(tǒng)中,類等級層次數(shù)應(yīng)保持為7±2。

11.2啟發(fā)規(guī)則1.設(shè)計(jì)結(jié)果應(yīng)該清晰易懂提高軟件可維護(hù)性和可重用性的重要措933.設(shè)計(jì)簡單的類4.使用簡單的協(xié)議盡量設(shè)計(jì)小而簡單的類注意以下幾點(diǎn):

(1)避免包含過多的屬性

(2)有明確的定義

(3)盡量簡化對象之間的合作關(guān)系(4)不要提供太多服務(wù)消息中的參數(shù)不要超過3個(gè)

11.2啟發(fā)規(guī)則3.設(shè)計(jì)簡單的類4.使用簡單的協(xié)議盡量設(shè)計(jì)小而簡單的類消945.使用簡單的服務(wù)6.把設(shè)計(jì)變動(dòng)減至最小類中的服務(wù)通常都很小盡量避免使用復(fù)雜的服務(wù)理想的設(shè)計(jì)變動(dòng)曲線如右圖所示在設(shè)計(jì)的早期階段,變動(dòng)較大,隨著時(shí)間推移,設(shè)計(jì)方案日趨成熟,改動(dòng)也越來越小了

11.2啟發(fā)規(guī)則5.使用簡單的服務(wù)6.把設(shè)計(jì)變動(dòng)減至最小類中的服務(wù)通常都95

11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則11.2啟發(fā)規(guī)則11.3軟件重用11.4系統(tǒng)分解11.5設(shè)計(jì)問題域子系統(tǒng)11.6設(shè)計(jì)人機(jī)交互子系統(tǒng)

11.7設(shè)計(jì)任務(wù)管理子系統(tǒng)11.8設(shè)計(jì)數(shù)據(jù)管理子系統(tǒng)11.9設(shè)計(jì)類中的服務(wù)11.10設(shè)計(jì)關(guān)聯(lián)11.11設(shè)計(jì)優(yōu)化主要內(nèi)容11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則11.7設(shè)

11.3軟件重用11.3.1概述11.3.2類構(gòu)建11.3.3設(shè)計(jì)簡單的類11.3軟件重用11.3.1概述11.3.2類構(gòu)9711.3.1軟件重用概述重用也叫再用或復(fù)用,是指同一事物不作修改或稍加改動(dòng)就多次重復(fù)使用。廣義地說,軟件重用可分為以下3個(gè)層次:知識重用方法和標(biāo)準(zhǔn)的重用軟件成分的重用上述前兩個(gè)重用層次屬于知識工程研究的范疇,本節(jié)僅討論軟件成分重用問題。1.重用

11.3軟件重用11.3.1軟件重用概述重用也叫再用或復(fù)用,是指同一事物不98代碼重用源代碼剪貼源代碼包含繼承設(shè)計(jì)結(jié)果重用

重用某個(gè)軟件系統(tǒng)的設(shè)計(jì)模型(即求解域模型)分許結(jié)果重用

更高級別的重用,即重用某個(gè)系統(tǒng)的分析模型2.軟件成分的重用級別

11.3軟件重用代碼重用2.軟件成分的重用級別11.3軟件重用99主要有以下10種:項(xiàng)目計(jì)劃成本估計(jì)體系結(jié)構(gòu)需求模型和規(guī)格說明設(shè)計(jì)源代碼用戶文檔和技術(shù)文檔用戶界面數(shù)據(jù)測試用例3.典型的可重用軟件成分

11.3軟件重用主要有以下10種:3.典型的可重用軟件成分11.310011.3.2類構(gòu)件1.可重用軟構(gòu)件應(yīng)具備的特點(diǎn)為使軟構(gòu)件也像硬件集成電路那樣,能在構(gòu)造各種各樣的軟件系統(tǒng)時(shí)方便地重復(fù)使用,就必須使它們滿足下列要求:模塊獨(dú)立性強(qiáng)成具有高度可塑性接口清晰、簡明、可靠需求模型和規(guī)格說明面向?qū)ο蠹夹g(shù)中的“類”,是比較理想的可重用軟構(gòu)件,不妨稱之為類構(gòu)件。

11.3軟件重用11.3.2類構(gòu)件1.可重用軟構(gòu)件應(yīng)具備的特點(diǎn)為使軟構(gòu)件1012.類構(gòu)件的重用方式實(shí)例重用使用適當(dāng)?shù)臉?gòu)造函數(shù),按照需要?jiǎng)?chuàng)建類的實(shí)例用幾個(gè)簡單的對象作為類的成員創(chuàng)建出一個(gè)更復(fù)雜的類繼承重用

繼承性提供了一種對已有的類構(gòu)件進(jìn)行裁剪的機(jī)制多態(tài)重用使對象的對外接口更加一般化,降低了消息連接的復(fù)雜程度提供一種簡便可靠的軟構(gòu)件組合機(jī)制

11.3軟件重用2.類構(gòu)件的重用方式實(shí)例重用11.3軟件重用10211.3.3軟件重用的效益1.質(zhì)量

理想情況下,為了重用而開發(fā)的軟件構(gòu)件已被證明是正確的,且沒有缺陷。

事實(shí)上,由于不能定期進(jìn)行形式化驗(yàn)證,錯(cuò)誤可能而且也確實(shí)存在。

但是,隨著每一次重用,都會(huì)有一些錯(cuò)誤被發(fā)現(xiàn)并被清除,構(gòu)件的質(zhì)量也會(huì)隨之改善。

隨著時(shí)間的推移,構(gòu)件將變成實(shí)質(zhì)上無錯(cuò)誤的。

11.3軟件重用11.3.3軟件重用的效益1.質(zhì)量理想1032.生產(chǎn)率

當(dāng)把可重用的軟件成分應(yīng)用于軟件開發(fā)的全過程時(shí),創(chuàng)建計(jì)劃、模型、文檔、代碼和數(shù)據(jù)所需花費(fèi)的時(shí)間將減少,從而將用較少的投入給客戶提供相同級別的產(chǎn)品,因此,生產(chǎn)率得到了提高。由于應(yīng)用領(lǐng)域、問題復(fù)雜程度、項(xiàng)目組的結(jié)構(gòu)和大小、項(xiàng)目期限、可應(yīng)用的技術(shù)等許多因素都對項(xiàng)目組的生產(chǎn)率有影響,因此,不同開發(fā)組織對軟件重用帶來生產(chǎn)率提高的數(shù)字的報(bào)告并不相同,但基本上30%~50%的重用大約可以導(dǎo)致生產(chǎn)率提高25%~40%。

11.3軟件重用2.生產(chǎn)率當(dāng)把可重用的軟件成分應(yīng)用于軟件1043.成本軟件重用帶來的凈成本節(jié)省可以用下式估算:

C=Cs-Cr-CdCr是與重用相關(guān)聯(lián)的成本領(lǐng)域分析與建模的成本設(shè)計(jì)領(lǐng)域體系結(jié)構(gòu)的成本為便于重用而增加的文檔的成本維護(hù)和完善可重用的軟件成分的成本為從外部獲取構(gòu)件所付出的版稅和許可證費(fèi)用創(chuàng)建(或購買)及運(yùn)行重用庫的費(fèi)用對設(shè)計(jì)和實(shí)現(xiàn)可重用構(gòu)件的人員的培訓(xùn)費(fèi)用Cd是交付給客戶的軟件的實(shí)際成本Cs使用本書第13章講述的技術(shù)來估算

11.3軟件重用3.成本軟件重用帶來的凈成本節(jié)省可以用下式估算:105

11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則11.2啟發(fā)規(guī)則11.3軟件重用11.4系統(tǒng)分解11.5設(shè)計(jì)問題域子系統(tǒng)11.6設(shè)計(jì)人機(jī)交互子系統(tǒng)

11.7設(shè)計(jì)任務(wù)管理子系統(tǒng)11.8設(shè)計(jì)數(shù)據(jù)管理子系統(tǒng)11.9設(shè)計(jì)類中的服務(wù)11.10設(shè)計(jì)關(guān)聯(lián)11.11設(shè)計(jì)優(yōu)化主要內(nèi)容11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則11.7設(shè)11.4系統(tǒng)分解分而治之,各個(gè)擊破系統(tǒng)的主要組成部分稱為子系統(tǒng)

軟件工程師在設(shè)計(jì)比較復(fù)雜的應(yīng)用系統(tǒng)時(shí)普遍采用的策略,也是首先把系統(tǒng)分解成若干個(gè)比較小的部分,然后再分別設(shè)計(jì)每個(gè)部分。

面向?qū)ο笤O(shè)計(jì)模型的4大組成部分可以想象成整個(gè)模型的4個(gè)垂直切片。11.4系統(tǒng)分解分而治之,各個(gè)擊破系統(tǒng)的主要組成部分稱為子1071.子系統(tǒng)之間的兩種交互方式(1)客戶-供應(yīng)商關(guān)系作為“客戶”的子系統(tǒng)調(diào)用作為“供應(yīng)商”的子系統(tǒng),后者完成某些服務(wù)工作并返回結(jié)果。前者必須了解后者的接口,然而后者卻無須了解前者的接口,因?yàn)槿魏谓换バ袨槎际怯汕罢唑?qū)動(dòng)的。(2)平等伙伴關(guān)系每個(gè)子系統(tǒng)都可能調(diào)用其他子系統(tǒng),每個(gè)子系統(tǒng)都必須了解其他子系統(tǒng)的接口。子系統(tǒng)之間的交互更復(fù)雜,這種交互方式還可能存在通信環(huán)路。

總地說來,單向交互比雙向交互更容易理解,也更容易設(shè)計(jì)和修改,因此應(yīng)該盡量使用客戶-供應(yīng)商關(guān)系11.4系統(tǒng)分解1.子系統(tǒng)之間的兩種交互方式(1)客戶-供應(yīng)商關(guān)系1082.組織系統(tǒng)的兩種方案(1)層次組織把軟件系統(tǒng)組織成一個(gè)層次系統(tǒng),每層是一個(gè)子系統(tǒng)。上層在下層的基礎(chǔ)上建立,下層為實(shí)現(xiàn)上層功能而提供必要的服務(wù)。每一層內(nèi)所包含的對象,彼此間相互獨(dú)立,而處于不同層次上的對象,彼此間往往有關(guān)聯(lián)。在上、下層之間存在客戶-供應(yīng)商關(guān)系。低層相當(dāng)于供應(yīng)商,上層相當(dāng)于客戶。層次結(jié)構(gòu)又可進(jìn)一步劃分成兩種模式:封閉式和開放式。11.4系統(tǒng)分解2.組織系統(tǒng)的兩種方案(1)層次組織11.4系統(tǒng)分解1092.組織系統(tǒng)的兩種方案(2)塊狀組織把軟件系統(tǒng)垂直地分解成若干個(gè)相對獨(dú)立的、弱耦合的子系統(tǒng)。一個(gè)子系統(tǒng)相當(dāng)于一塊,每塊提供一種類型的服務(wù)。

利用層次和塊的各種可能的組合,可以成功地把多個(gè)子系統(tǒng)組成一個(gè)完整的軟件系統(tǒng)。

右圖表示一個(gè)混合使用層次與塊狀的的應(yīng)用系統(tǒng)的組織結(jié)構(gòu)。11.4系統(tǒng)分解2.組織系統(tǒng)的兩種方案(2)塊狀組織利11011.4系統(tǒng)分解2.組織系統(tǒng)的兩種方案(3)設(shè)計(jì)系統(tǒng)的拓?fù)浣Y(jié)構(gòu)

由子系統(tǒng)組成完整的系統(tǒng)時(shí),典型的拓?fù)浣Y(jié)構(gòu)有管道形、樹形、星形等。

設(shè)計(jì)者應(yīng)該采用與問題結(jié)構(gòu)相適應(yīng)的、盡可能簡單的拓?fù)浣Y(jié)構(gòu),以減少子系統(tǒng)之間的交互數(shù)量。11.4系統(tǒng)分解2.組織系統(tǒng)的兩種方案(3)設(shè)計(jì)系統(tǒng)的111

11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則11.2啟發(fā)規(guī)則11.3軟件重用11.4系統(tǒng)分解11.5設(shè)計(jì)問題域子系統(tǒng)11.6設(shè)計(jì)人機(jī)交互子系統(tǒng)

11.7設(shè)計(jì)任務(wù)管理子系統(tǒng)11.8設(shè)計(jì)數(shù)據(jù)管理子系統(tǒng)11.9設(shè)計(jì)類中的服務(wù)11.10設(shè)計(jì)關(guān)聯(lián)11.11設(shè)計(jì)優(yōu)化主要內(nèi)容11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則11.7設(shè)11.5設(shè)計(jì)問題域子系統(tǒng)1.調(diào)整需求2.重用已有的類3.把問題域類組合在一起4.添加一般化類以建立協(xié)議5.調(diào)整繼承類層次6.ATM系統(tǒng)實(shí)例

在面向?qū)ο笤O(shè)計(jì)過程中,可能對面向?qū)ο蠓治鏊贸龅膯栴}域模型做補(bǔ)充或修改11.5設(shè)計(jì)問題域子系統(tǒng)1.調(diào)整需求2.重用已有的類11311.5設(shè)計(jì)問題域子系統(tǒng)1.調(diào)整需求用戶需求或外部環(huán)境發(fā)生了變化。分析員對問題域理解不透徹或缺乏領(lǐng)域?qū)<規(guī)椭?,以致面向?qū)ο蠓治瞿P筒荒芡暾?、?zhǔn)確地反映用戶的真實(shí)需求。

兩種情況會(huì)導(dǎo)致修改通過面向?qū)ο蠓治鏊_定的系統(tǒng)需求11.5設(shè)計(jì)問題域子系統(tǒng)1.調(diào)整需求用戶需求或外部環(huán)境1142.重用已有的類選擇有可能被重用的已有類,標(biāo)出這些候選類中對本問題無用的屬性和服務(wù),盡量重用那些能使無用的屬性和服務(wù)降到最低程度的類。在被重用的已有類和問題域類之間添加泛化關(guān)系(即從被重用的已有類派生出問題域類)。標(biāo)出問題域類中從已有類繼承來的屬性和服務(wù),現(xiàn)在已經(jīng)無須在問題域類內(nèi)定義它們了。修改與問題域類相關(guān)的關(guān)聯(lián),必要時(shí)改為與被重用的已有類相關(guān)的關(guān)聯(lián)。如果有可能重用已有的類,則重用已有類的典型過程如下11.5設(shè)計(jì)問題域子系統(tǒng)2.重用已有的類選擇有可能被重用的已有類,標(biāo)出這些候選類中1153.把問題域類組合在一起4.添加一般化類以建立協(xié)議在面向?qū)ο笤O(shè)計(jì)過程中,設(shè)計(jì)者往往通過引入一個(gè)根類而把問題域類組合在一起。

一些具體類需要有一個(gè)公共的協(xié)議,也就是說,它們都需要定義一組類似的服務(wù)(很可能還需要相應(yīng)的屬性)。在這種情況下可以引入一個(gè)附加類(例如根類),以便建立這個(gè)協(xié)議11.5設(shè)計(jì)問題域子系統(tǒng)3.把問題域類組合在一起4.添加一般化類以建立協(xié)議1165.調(diào)整繼承類層次(1)使用多重繼承機(jī)制

避免屬性及服務(wù)命名沖突窄菱形模式闊菱形模式11.5設(shè)計(jì)問題域子系統(tǒng)5.調(diào)整繼承類層次(1)使用多重繼承機(jī)制避1175.調(diào)整繼承類層次(1)使用多重繼承機(jī)制11.5設(shè)計(jì)問題域子系統(tǒng)

如果面向?qū)ο蠓治瞿P椭邪硕嘀乩^承關(guān)系,然而所使用的程序設(shè)計(jì)語言卻并不提供多重繼承機(jī)制,則必須修改面向?qū)ο蠓治龅慕Y(jié)果。即使使用支持多重繼承的語言,有時(shí)也會(huì)出于實(shí)現(xiàn)考慮而對面向?qū)ο蠓治鼋Y(jié)果作一些調(diào)整。下面分情況討論。窄菱形模式,出現(xiàn)屬性及服務(wù)命名沖突的可能性比較大;闊菱形模式,屬性及服務(wù)的名字發(fā)生沖突的可能性比較小,但是,它需要用更多的類才能表示同一個(gè)設(shè)計(jì)。5.調(diào)整繼承類層次(1)使用多重繼承機(jī)制11.5設(shè)計(jì)問1185.調(diào)整繼承類層次(2)使用單重繼承機(jī)制

如果打算使用僅提供單繼承機(jī)制的語言實(shí)現(xiàn)系統(tǒng),則必須把面向?qū)ο蠓治瞿P椭械亩嘀乩^承結(jié)構(gòu)轉(zhuǎn)換成單繼承結(jié)構(gòu)。顯然,在多重繼承結(jié)構(gòu)中的某些繼承關(guān)系,經(jīng)簡化后將不再存在,這表明需要在各個(gè)具體類中重復(fù)定義某些屬性和服務(wù)。11.5設(shè)計(jì)問題域子系統(tǒng)5.調(diào)整繼承類層次(2)使用單重繼承機(jī)制1196.ATM系統(tǒng)實(shí)例

ATM三個(gè)子系統(tǒng)為星形拓?fù)浣Y(jié)構(gòu);物理聯(lián)結(jié)用專用電話線實(shí)現(xiàn);根據(jù)ATM站號和分行代碼,區(qū)分由每個(gè)ATM站和每臺分行計(jì)算機(jī)聯(lián)向中央計(jì)算機(jī)的電話線。

在面向?qū)ο蠓治鲞^程中已經(jīng)對ATM系統(tǒng)做了相當(dāng)仔細(xì)的分析,而且假設(shè)所使用的實(shí)現(xiàn)環(huán)境能完全支持模型的實(shí)現(xiàn)。

因此,在設(shè)計(jì)階段無須對已有的問題域模型作實(shí)質(zhì)性的修改或擴(kuò)充。11.5設(shè)計(jì)問題域子系統(tǒng)6.ATM系統(tǒng)實(shí)例ATM三個(gè)子系統(tǒng)為星形拓?fù)?20

11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則11.2啟發(fā)規(guī)則11.3軟件重用11.4系統(tǒng)分解11.5設(shè)計(jì)問題域子系統(tǒng)11.6設(shè)計(jì)人機(jī)交互子系統(tǒng)

11.7設(shè)計(jì)任務(wù)管理子系統(tǒng)11.8設(shè)計(jì)數(shù)據(jù)管理子系統(tǒng)11.9設(shè)計(jì)類中的服務(wù)11.10設(shè)計(jì)關(guān)聯(lián)11.11設(shè)計(jì)優(yōu)化主要內(nèi)容11.1面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則11.7設(shè)11.6設(shè)計(jì)人機(jī)交互子系統(tǒng)1.分類用戶2.描述用戶3.設(shè)計(jì)命令層次4.設(shè)計(jì)人機(jī)交互類11.6設(shè)計(jì)人機(jī)交互子系統(tǒng)1.分類用戶2.描述用戶31221.分類用戶

為了更好地了解用戶的需要與愛好,以便設(shè)計(jì)出符合用戶需要的界面,設(shè)計(jì)者首先應(yīng)該把將來可能與系統(tǒng)交互的用戶分類。按技能水平分類(新手、初級、中級、高級)。按職務(wù)分類(總經(jīng)理、經(jīng)理、職員)。按所屬集團(tuán)分類(職員、顧客)。11.6設(shè)計(jì)人機(jī)交互子系統(tǒng)1.分類用戶

溫馨提示

  • 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)僅提供信息存儲空間,僅對用戶上傳內(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

提交評論