軟件工程-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頁,還剩65頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第十一章面向?qū)ο笤O(shè)計(jì)面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則啟發(fā)規(guī)則軟件重用系統(tǒng)分解設(shè)計(jì)問題域子系統(tǒng)、人-機(jī)交互子系統(tǒng)任務(wù)管理子系統(tǒng)、數(shù)據(jù)管理子系統(tǒng)、類中的服務(wù)、關(guān)聯(lián)設(shè)計(jì)優(yōu)化第十一章面向?qū)ο笤O(shè)計(jì)面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則11.模塊化2.抽象3.信息隱藏4.弱耦合一般說來,對象之間的耦合可分為兩大類,下面分別討論這兩類耦合:(1)交互耦合(2)繼承耦合面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則1.模塊化面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則25.強(qiáng)內(nèi)聚內(nèi)聚衡量一個(gè)模塊內(nèi)各個(gè)元素彼此結(jié)合的緊密程度。也可以把內(nèi)聚定義為:設(shè)計(jì)中使用的一個(gè)構(gòu)件內(nèi)的各個(gè)元素,對完成一個(gè)定義明確的目的所做出的貢獻(xiàn)程度。在設(shè)計(jì)時(shí)應(yīng)該力求做到高內(nèi)聚。在面向?qū)ο笤O(shè)計(jì)中存在下述3種內(nèi)聚。(1)服務(wù)內(nèi)聚。一個(gè)服務(wù)應(yīng)該完成一個(gè)且僅完成一個(gè)功能。(2)類內(nèi)聚。設(shè)計(jì)類的原則是,一個(gè)類應(yīng)該只有一個(gè)用途,它的屬性和服務(wù)應(yīng)該是高內(nèi)聚的。(3)一般-特殊內(nèi)聚。設(shè)計(jì)出的一般-特殊結(jié)構(gòu),應(yīng)該符合多數(shù)人的概念,更準(zhǔn)確地說,這種結(jié)構(gòu)應(yīng)該是對相應(yīng)的領(lǐng)域知識(shí)的正確抽取。5.強(qiáng)內(nèi)聚36.可重用軟件重用是提高軟件開發(fā)生產(chǎn)率和目標(biāo)系統(tǒng)質(zhì)量的重要途徑。重用基本上從設(shè)計(jì)階段開始。重用有兩方面的含義:一是盡量使用已有的類(包括開發(fā)環(huán)境提供的類庫,及以往開發(fā)類似系統(tǒng)時(shí)創(chuàng)建的類),二是如果確實(shí)需要?jiǎng)?chuàng)建新類,則在設(shè)計(jì)這些新類的協(xié)議時(shí),應(yīng)該考慮將來的可重復(fù)使用性。6.可重用41.設(shè)計(jì)結(jié)果應(yīng)該清晰易懂使設(shè)計(jì)結(jié)果清晰、易讀、易懂,是提高軟件可維護(hù)性和可重用性的重要措施。顯然,人們不會(huì)重用那些他們不理解的設(shè)計(jì)。保證設(shè)計(jì)結(jié)果清晰易懂的主要因素如下:(1)用詞一致(2)使用已有的協(xié)議(3)減少消息模式的數(shù)目(4)避免模糊的定義啟發(fā)規(guī)則1.設(shè)計(jì)結(jié)果應(yīng)該清晰易懂啟發(fā)規(guī)則52.一般-特殊結(jié)構(gòu)的深度應(yīng)適當(dāng)應(yīng)該使類等級(jí)中包含的層次數(shù)適當(dāng)。一般說來,在一個(gè)中等規(guī)模(大約包含100個(gè)類)的系統(tǒng)中,類等級(jí)層次數(shù)應(yīng)保持為7±2。不應(yīng)該僅僅從方便編碼的角度出發(fā)隨意創(chuàng)建派生類,應(yīng)該使一般-特殊結(jié)構(gòu)與領(lǐng)域知識(shí)或常識(shí)保持一致。2.一般-特殊結(jié)構(gòu)的深度應(yīng)適當(dāng)63.設(shè)計(jì)簡單的類應(yīng)該盡量設(shè)計(jì)小而簡單的類,以便于開發(fā)和管理。當(dāng)類很大的時(shí)候,要記住它的所有服務(wù)是非常困難的。經(jīng)驗(yàn)表明,如果一個(gè)類的定義不超過一頁紙(或兩屏),則使用這個(gè)類是比較容易的。為使類保持簡單,應(yīng)該注意以下幾點(diǎn):(1)避免包含過多的屬性(2)有明確的定義(3)盡量簡化對象之間的合作關(guān)系

(4)不要提供太多服務(wù)3.設(shè)計(jì)簡單的類74.使用簡單的協(xié)議一般說來,消息中的參數(shù)不要超過3個(gè)。當(dāng)然,不超過3個(gè)的限制也不是絕對的,但是,經(jīng)驗(yàn)表明,通過復(fù)雜消息相互關(guān)聯(lián)的對象是緊耦合的,對一個(gè)對象的修改往往導(dǎo)致其他對象的修改。4.使用簡單的協(xié)議85.使用簡單的服務(wù)面向?qū)ο笤O(shè)計(jì)出來的類中的服務(wù)通常都很小,一般只有3~5行源程序語句,可以用僅含一個(gè)動(dòng)詞和一個(gè)賓語的簡單句子描述它的功能。如果一個(gè)服務(wù)中包含了過多的源程序語句,或者語句嵌套層次太多,或者使用了復(fù)雜的CASE語句,則應(yīng)該仔細(xì)檢查這個(gè)服務(wù),設(shè)法分解或簡化它。一般說來,應(yīng)該盡量避免使用復(fù)雜的服務(wù)。如果需要在服務(wù)中使用CASE語句,通常應(yīng)該考慮用一般-特殊結(jié)構(gòu)代替這個(gè)類的可能性。5.使用簡單的服務(wù)96.把設(shè)計(jì)變動(dòng)減至最小通常,設(shè)計(jì)的質(zhì)量越高,設(shè)計(jì)結(jié)果保持不變的時(shí)間也越長。即使出現(xiàn)必須修改設(shè)計(jì)的情況,也應(yīng)該使修改的范圍盡可能小。理想的設(shè)計(jì)變動(dòng)曲線如下圖所示:6.把設(shè)計(jì)變動(dòng)減至最小101.概念1)重用重用也叫再用或復(fù)用,是指同一事物不作修改或稍加改動(dòng)就多次重復(fù)使用。廣義地說,軟件重用可分為以下3個(gè)層次:(1)知識(shí)重用

(2)方法和標(biāo)準(zhǔn)的重用(3)軟件成分的重用2)軟件成分的重用級(jí)別軟件成分的重用可以進(jìn)一步劃分成以下3個(gè)級(jí)別:軟件重用1.概念軟件重用11(1)代碼重用通常把它理解為調(diào)用庫中的模塊。實(shí)際上,代碼重用也可以采用下列幾種形式中的任何一種:源代碼剪貼:這是最原始的重用形式。繼承:利用繼承機(jī)制重用類庫中的類時(shí),無須修改已有的代碼,就可以擴(kuò)充或具體化在庫中找出的類,因此,基本上不存在配置管理問題。(2)設(shè)計(jì)結(jié)果重用設(shè)計(jì)結(jié)果重用指的是,重用某個(gè)軟件系統(tǒng)的設(shè)計(jì)模型(即求解域模型)。(3)分析結(jié)果重用這是一種更高級(jí)別的重用,即重用某個(gè)系統(tǒng)的分析模型。(1)代碼重用123)典型的可重用軟件成分可能被重用的軟件成分主要有以下10種:(1)項(xiàng)目計(jì)劃(2)成本估計(jì)(3)體系結(jié)構(gòu)(4)需求模型和規(guī)格說明(5)設(shè)計(jì)(6)源代碼(7)用戶文檔和技術(shù)文檔(8)用戶界面(9)數(shù)據(jù)(10)測試用例3)典型的可重用軟件成分13利用面向?qū)ο蠹夹g(shù),可以更方便更有效地實(shí)現(xiàn)軟件重用。面向?qū)ο蠹夹g(shù)中的“類”,是比較理想的可重用軟構(gòu)件,不妨稱之為類構(gòu)件。類構(gòu)件有3種重用方式,分別是實(shí)例重用、繼承重用和多態(tài)重用。1)可重用軟構(gòu)件應(yīng)具備的特點(diǎn)為使軟構(gòu)件也像硬件集成電路那樣,能在構(gòu)造各種各樣的軟件系統(tǒng)時(shí)方便地重復(fù)使用,就必須使它們滿足下列要求。(1)模塊獨(dú)立性強(qiáng)(2)具有高度可塑性(3)接口清晰、簡明、可靠精心設(shè)計(jì)的“類”基本上能滿足上述要求,可以認(rèn)為它是可重用軟構(gòu)件的雛形。2.類構(gòu)件利用面向?qū)ο蠹夹g(shù),可以更方便更有效地實(shí)現(xiàn)軟件重用。面向?qū)ο蠹?42)類構(gòu)件的重用方式(1)實(shí)例重用(2)繼承重用(3)多態(tài)重用2)類構(gòu)件的重用方式151)質(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ò)誤的。3.軟件重用的效益1)質(zhì)量3.軟件重用的效益162)生產(chǎn)率當(dāng)把可重用的軟件成分應(yīng)用于軟件開發(fā)的全過程時(shí),創(chuàng)建計(jì)劃、模型、文檔、代碼和數(shù)據(jù)所需花費(fèi)的時(shí)間將減少,從而將用較少的投入給客戶提供相同級(jí)別的產(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%。2)生產(chǎn)率173)成本軟件重用帶來的凈成本節(jié)省可以用下式估算:C=Cs-Cr-Cd其中,Cs是項(xiàng)目從頭開發(fā)(沒有重用)時(shí)所需要的成本;Cr是與重用相關(guān)聯(lián)的成本;Cd是交付給客戶的軟件的實(shí)際成本。Cr主要包括下述成本:領(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)用。3)成本18人類解決復(fù)雜問題時(shí)普遍采用的策略是,“分而治之,各個(gè)擊破”。同樣,軟件工程師在設(shè)計(jì)比較復(fù)雜的應(yīng)用系統(tǒng)時(shí)普遍采用的策略,也是首先把系統(tǒng)分解成若干個(gè)比較小的部分,然后再分別設(shè)計(jì)每個(gè)部分。系統(tǒng)的主要組成部分稱為子系統(tǒng)。通常根據(jù)所提供的功能來劃分子系統(tǒng)。各個(gè)子系統(tǒng)之間應(yīng)該具有盡可能簡單、明確的接口。在劃分和設(shè)計(jì)子系統(tǒng)時(shí),應(yīng)該盡量減少子系統(tǒng)彼此間的依賴性。系統(tǒng)分解人類解決復(fù)雜問題時(shí)普遍采用的策略是,“分而治之,各個(gè)擊破”。19可以把面向?qū)ο笤O(shè)計(jì)模型的4大組成部分想象成整個(gè)模型的4個(gè)垂直切片。典型的面向?qū)ο笤O(shè)計(jì)模型可以用下圖表示:可以把面向?qū)ο笤O(shè)計(jì)模型的4大組成部分想象成整個(gè)模型的4個(gè)垂直201.子系統(tǒng)之間的兩種交互方式在軟件系統(tǒng)中,子系統(tǒng)之間的交互有兩種可能的方式,分別是客戶-供應(yīng)商(Client-supplier)關(guān)系和平等伙伴(peer-to-peer)關(guān)系。(1)客戶-供應(yīng)商關(guān)系在這種關(guān)系中,作為“客戶”的子系統(tǒng)調(diào)用作為“供應(yīng)商”的子系統(tǒng),后者完成某些服務(wù)工作并返回結(jié)果。(2)平等伙伴關(guān)系在這種關(guān)系中,每個(gè)子系統(tǒng)都可能調(diào)用其他子系統(tǒng),因此,每個(gè)子系統(tǒng)都必須了解其他子系統(tǒng)的接口。1.子系統(tǒng)之間的兩種交互方式212.組織系統(tǒng)的兩種方案(1)層次組織層次結(jié)構(gòu)又可進(jìn)一步劃分成兩種模式:封閉式和開放式。所謂封閉式,就是每層子系統(tǒng)僅僅使用其直接下層提供的服務(wù)。但是,開放模式的系統(tǒng)不符合信息隱藏原則,對任何一個(gè)子系統(tǒng)的修改都會(huì)影響處在更高層次的那些子系統(tǒng)。設(shè)計(jì)軟件系統(tǒng)時(shí)到底采用哪種結(jié)構(gòu)模式,需要權(quán)衡效率和模塊獨(dú)立性等多種因素,通盤考慮以后再做決定。(2)塊狀組織這種組織方案把軟件系統(tǒng)垂直地分解成若干個(gè)相對獨(dú)立的、弱耦合的子系統(tǒng),一個(gè)子系統(tǒng)相當(dāng)于一塊,每塊提供一種類型的服務(wù)。2.組織系統(tǒng)的兩種方案223.設(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ù)量。典型應(yīng)用系統(tǒng)的組織結(jié)構(gòu)3.設(shè)計(jì)系統(tǒng)的拓?fù)浣Y(jié)構(gòu)典型應(yīng)用系統(tǒng)的組織結(jié)構(gòu)23使用面向?qū)ο蠓椒ㄩ_發(fā)軟件時(shí),在分析與設(shè)計(jì)之間并沒有明確的分界線,對于問題域子系統(tǒng)來說,情況更是如此。但是,分析與設(shè)計(jì)畢竟是性質(zhì)不同的兩類開發(fā)工作,分析工作可以而且應(yīng)該與具體實(shí)現(xiàn)無關(guān),設(shè)計(jì)工作則在很大程度上受具體實(shí)現(xiàn)環(huán)境的約束。在開始進(jìn)行設(shè)計(jì)工作之前(至少在完成設(shè)計(jì)之前),設(shè)計(jì)者應(yīng)該了解本項(xiàng)目預(yù)計(jì)要使用的編程語言,可用的軟構(gòu)件庫(主要是類庫)以及程序員的編程經(jīng)驗(yàn)。設(shè)計(jì)問題域子系統(tǒng)使用面向?qū)ο蠓椒ㄩ_發(fā)軟件時(shí),在分析與設(shè)計(jì)之間并沒有明確的分界24通過面向?qū)ο蠓治鏊贸龅膯栴}域精確模型,為設(shè)計(jì)問題域子系統(tǒng)奠定了良好的基礎(chǔ),建立了完整的框架。使用面向?qū)ο蠓椒▽W(xué)開發(fā)軟件,能夠保持問題域組織框架的穩(wěn)定性,從而便于追蹤分析、設(shè)計(jì)和編程的結(jié)果。對于需求可能隨時(shí)間變化的系統(tǒng)來說,穩(wěn)定性是至關(guān)重要的。通過面向?qū)ο蠓治鏊贸龅膯栴}域精確模型,為設(shè)計(jì)問題域子系統(tǒng)奠251.調(diào)整需求有兩種情況會(huì)導(dǎo)致修改通過面向?qū)ο蠓治鏊_定的系統(tǒng)需求:一是用戶需求或外部環(huán)境發(fā)生了變化;二是分析員對問題域理解不透徹或缺乏領(lǐng)域?qū)<規(guī)椭灾旅嫦驅(qū)ο蠓治瞿P筒荒芡暾?、?zhǔn)確地反映用戶的真實(shí)需求。2.重用已有的類代碼重用從設(shè)計(jì)階段開始,在研究面向?qū)ο蠓治鼋Y(jié)果時(shí)就應(yīng)該尋找使用已有類的方法。若因?yàn)闆]有合適的類可以重用而確實(shí)需要?jiǎng)?chuàng)建新的類,則在設(shè)計(jì)這些新類的協(xié)議時(shí),必須考慮到將來的可重用性。如果有可能重用已有的類,則重用已有類的典型過程如下:1.調(diào)整需求26(1)選擇有可能被重用的已有類,標(biāo)出這些候選類中對本問題無用的屬性和服務(wù),盡量重用那些能使無用的屬性和服務(wù)降到最低程度的類。(2)在被重用的已有類和問題域類之間添加泛化關(guān)系(即從被重用的已有類派生出問題域類)。(3)標(biāo)出問題域類中從已有類繼承來的屬性和服務(wù),現(xiàn)在已經(jīng)無須在問題域類內(nèi)定義它們了。(4)修改與問題域類相關(guān)的關(guān)聯(lián),必要時(shí)改為與被重用的已有類相關(guān)的關(guān)聯(lián)。(1)選擇有可能被重用的已有類,標(biāo)出這些候選類中對本問題無273.把問題域類組合在一起在面向?qū)ο笤O(shè)計(jì)過程中,設(shè)計(jì)者往往通過引入一個(gè)根類而把問題域類組合在一起。事實(shí)上,這是在沒有更先進(jìn)的組合機(jī)制可用時(shí)才采用的一種組合方法。此外,這樣的根類還可以用來建立協(xié)議。4.增添一般化類以建立協(xié)議在設(shè)計(jì)過程中常常發(fā)現(xiàn),一些具體類需要有一個(gè)公共的協(xié)議,也就是說,它們都需要定義一組類似的服務(wù)。在這種情況下可以引入一個(gè)附加類(例如,根類),以便建立這個(gè)協(xié)議(即命名公共服務(wù)集合,這些服務(wù)在具體類中仔細(xì)定義)。3.把問題域類組合在一起285.調(diào)整繼承層次如果面向?qū)ο蠓治瞿P椭邪硕嘀乩^承關(guān)系,然而所使用的程序設(shè)計(jì)語言卻并不提供多重繼承機(jī)制,則必須修改面向?qū)ο蠓治龅慕Y(jié)果。即使使用支持多重繼承的語言,有時(shí)也會(huì)出于實(shí)現(xiàn)考慮而對面向?qū)ο蠓治鼋Y(jié)果作一些調(diào)整。下面分幾種情況討論:(1)使用多重繼承機(jī)制使用多重繼承機(jī)制時(shí),應(yīng)該避免出現(xiàn)屬性及服務(wù)的命名沖突。下面通過例子說明避免命名沖突的方法。5.調(diào)整繼承層次29下圖是一種多重繼承模式的例子,這種模式可以稱為窄菱形模式。下圖是一種多重繼承模式的例子,這種模式可以稱為窄菱形模式。30(2)使用單繼承機(jī)制如果打算使用僅提供單繼承機(jī)制的語言實(shí)現(xiàn)系統(tǒng),則必須把面向?qū)ο蠓治瞿P椭械亩嘀乩^承結(jié)構(gòu)轉(zhuǎn)換成單繼承結(jié)構(gòu)。示例如圖所示。(2)使用單繼承機(jī)制316.ATM系統(tǒng)實(shí)例ATM系統(tǒng)的問題域子系統(tǒng)的結(jié)構(gòu):6.ATM系統(tǒng)實(shí)例32在面向?qū)ο笤O(shè)計(jì)過程中,應(yīng)該對系統(tǒng)的人機(jī)交互子系統(tǒng)進(jìn)行詳細(xì)設(shè)計(jì),以確定人機(jī)交互的細(xì)節(jié)。人機(jī)交互部分的設(shè)計(jì)結(jié)果,將對用戶情緒和工作效率產(chǎn)生重要影響。由于對人機(jī)界面的評價(jià),在很大程度上由人的主觀因素決定,因此,使用由原型支持的系統(tǒng)化的設(shè)計(jì)策略,是成功地設(shè)計(jì)人機(jī)交互子系統(tǒng)的關(guān)鍵。設(shè)計(jì)人機(jī)交互子系統(tǒng)在面向?qū)ο笤O(shè)計(jì)過程中,應(yīng)該對系統(tǒng)的人機(jī)交互子系統(tǒng)進(jìn)行詳細(xì)設(shè)計(jì)331.分類用戶人機(jī)交互界面是給用戶使用的,顯然,為設(shè)計(jì)好人機(jī)交互子系統(tǒng),設(shè)計(jì)者應(yīng)該認(rèn)真研究使用它的用戶。應(yīng)該深入到用戶的工作現(xiàn)場,仔細(xì)觀察用戶是怎樣做他們的工作的,這對設(shè)計(jì)好人機(jī)交互界面是非常必要的。為了更好地了解用戶的需要與愛好,以便設(shè)計(jì)出符合用戶需要的界面,設(shè)計(jì)者首先應(yīng)該把將來可能與系統(tǒng)交互的用戶分類。通常從下列幾個(gè)不同角度進(jìn)行分類:按技能水平分類(新手、初級(jí)、中級(jí)、高級(jí))。按職務(wù)分類(總經(jīng)理、經(jīng)理、職員)。按所屬集團(tuán)分類(職員、顧客)。1.分類用戶342.描述用戶應(yīng)該仔細(xì)了解將來使用系統(tǒng)的每類用戶的情況,把獲得的下列各項(xiàng)信息記錄下來:用戶類型。使用系統(tǒng)欲達(dá)到的目的。特征(年齡、性別、受教育程度、限制因素等)。關(guān)鍵的成功因素(需求、愛好、習(xí)慣等)。技能水平。完成本職工作的腳本。2.描述用戶353.設(shè)計(jì)命令層次設(shè)計(jì)命令層次的工作通常包含以下幾項(xiàng)內(nèi)容:(1)研究現(xiàn)有的人機(jī)交互含義和準(zhǔn)則(2)確定初始的命令層次所謂命令層次,實(shí)質(zhì)上是用過程抽象機(jī)制組織起來的、可供選用的服務(wù)的表示形式。(3)精化命令層次應(yīng)該考慮下列一些因素:次序整體-部分關(guān)系寬度和深度操作步驟3.設(shè)計(jì)命令層次364.設(shè)計(jì)人機(jī)交互類人機(jī)交互類與所使用的操作系統(tǒng)及編程語言密切相關(guān)。例如,在Windows環(huán)境下運(yùn)行的VisualC++語言提供了MFC類庫,設(shè)計(jì)人機(jī)交互類時(shí),往往僅需從MFC類庫中選出一些適用的類,然后從這些類派生出符合自己需要的類就可以了。4.設(shè)計(jì)人機(jī)交互類37雖然從概念上說,不同對象可以并發(fā)地工作,但是,在實(shí)際系統(tǒng)中,許多對象之間往往存在相互依賴關(guān)系。此外,在實(shí)際使用的硬件中,可能僅由一個(gè)處理器支持多個(gè)對象。因此,設(shè)計(jì)工作的一項(xiàng)重要內(nèi)容就是,確定哪些是必須同時(shí)動(dòng)作的對象,哪些是相互排斥的對象。然后進(jìn)一步設(shè)計(jì)任務(wù)管理子系統(tǒng)。設(shè)計(jì)任務(wù)管理子系統(tǒng)雖然從概念上說,不同對象可以并發(fā)地工作,但是,在實(shí)際系統(tǒng)中,381.分析并發(fā)性通過面向?qū)ο蠓治鼋⑵饋淼膭?dòng)態(tài)模型,是分析并發(fā)性的主要依據(jù)。如果兩個(gè)對象彼此間不存在交互,或者它們同時(shí)接受事件,則這兩個(gè)對象在本質(zhì)上是并發(fā)的。通過檢查各個(gè)對象的狀態(tài)圖及它們之間交換的事件,能夠把若干個(gè)非并發(fā)的對象歸并到一條控制線中。所謂控制線,是一條遍及狀態(tài)圖集合的路徑,在這條路徑上每次只有一個(gè)對象是活動(dòng)的。在計(jì)算機(jī)系統(tǒng)中用任務(wù)(task)實(shí)現(xiàn)控制線,一般認(rèn)為任務(wù)是進(jìn)程(process)的別名。通常把多個(gè)任務(wù)的并發(fā)執(zhí)行稱為多任務(wù)。1.分析并發(fā)性392.設(shè)計(jì)任務(wù)管理子系統(tǒng)常見的任務(wù)有事件驅(qū)動(dòng)型任務(wù)、時(shí)鐘驅(qū)動(dòng)型任務(wù)、優(yōu)先任務(wù)、關(guān)鍵任務(wù)和協(xié)調(diào)任務(wù)等。設(shè)計(jì)任務(wù)管理子系統(tǒng),包括確定各類任務(wù)并把任務(wù)分配給適當(dāng)?shù)挠布蜍浖?zhí)行。(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)確定資源需求2.設(shè)計(jì)任務(wù)管理子系統(tǒng)40數(shù)據(jù)管理子系統(tǒng)是系統(tǒng)存儲(chǔ)或檢索對象的基本設(shè)施,它建立在某種數(shù)據(jù)存儲(chǔ)管理系統(tǒng)之上,并且隔離了數(shù)據(jù)存儲(chǔ)管理模式(文件、關(guān)系數(shù)據(jù)庫或面向?qū)ο髷?shù)據(jù)庫)的影響。設(shè)計(jì)數(shù)據(jù)管理子系統(tǒng)數(shù)據(jù)管理子系統(tǒng)是系統(tǒng)存儲(chǔ)或檢索對象的基本設(shè)施,它建立在某種數(shù)411)文件管理系統(tǒng)使用它長期保存數(shù)據(jù)具有成本低和簡單等特點(diǎn),但是,文件操作的級(jí)別低,為提供適當(dāng)?shù)某橄蠹?jí)別還必須編寫額外的代碼。此外,不同操作系統(tǒng)的文件管理系統(tǒng)往往有明顯差異。2)關(guān)系數(shù)據(jù)庫管理系統(tǒng)有下列一些主要優(yōu)點(diǎn):(1)提供了各種最基本的數(shù)據(jù)管理功能。(2)為多種應(yīng)用提供了一致的接口。(3)標(biāo)準(zhǔn)化的語言。1.選擇數(shù)據(jù)存儲(chǔ)管理模式1)文件管理系統(tǒng)1.選擇數(shù)據(jù)存儲(chǔ)管理模式42有下列一些主要缺點(diǎn):(1)運(yùn)行開銷大(2)不能滿足高級(jí)應(yīng)用的需求(3)與程序設(shè)計(jì)語言的連接不自然3)面向?qū)ο髷?shù)據(jù)庫管理系統(tǒng)面向?qū)ο髷?shù)據(jù)庫管理系統(tǒng)是一種新技術(shù),主要有兩種設(shè)計(jì)途徑:(1)擴(kuò)展的關(guān)系數(shù)據(jù)庫管理系統(tǒng)(2)擴(kuò)展的面向?qū)ο蟪绦蛟O(shè)計(jì)語言2.設(shè)計(jì)數(shù)據(jù)管理子系統(tǒng)設(shè)計(jì)數(shù)據(jù)管理子系統(tǒng),既需要設(shè)計(jì)數(shù)據(jù)格式又需要設(shè)計(jì)相應(yīng)的服務(wù)。有下列一些主要缺點(diǎn):2.設(shè)計(jì)數(shù)據(jù)管理子系統(tǒng)設(shè)計(jì)數(shù)據(jù)管理子系統(tǒng)431)設(shè)計(jì)數(shù)據(jù)格式設(shè)計(jì)數(shù)據(jù)格式的方法與所使用的數(shù)據(jù)存儲(chǔ)管理模式密切相關(guān),下面分別介紹適用于每種數(shù)據(jù)存儲(chǔ)管理模式的設(shè)計(jì)方法:(1)文件系統(tǒng)定義第一范式表為每個(gè)第一范式表定義一個(gè)文件。測量性能和需要的存儲(chǔ)容量。修改原設(shè)計(jì)的第一范式,以滿足性能和存儲(chǔ)需求。必要時(shí)把泛化結(jié)構(gòu)的屬性壓縮在單個(gè)文件中,以減少文件數(shù)量。1)設(shè)計(jì)數(shù)據(jù)格式44(2)關(guān)系數(shù)據(jù)庫管理系統(tǒng)定義第三范式表:列出每個(gè)類的屬性表;把屬性表規(guī)范成第三范式,從而得出第三范式表的定義。為每個(gè)第三范式表定義一個(gè)數(shù)據(jù)庫表。測量性能和需要的存儲(chǔ)容量。修改先前設(shè)計(jì)的第三范式,以滿足性能和存儲(chǔ)需求。(3)面向?qū)ο髷?shù)據(jù)庫管理系統(tǒng)擴(kuò)展的關(guān)系數(shù)據(jù)庫途徑:使用與關(guān)系數(shù)據(jù)庫管理系統(tǒng)相同的方法。擴(kuò)展的面向?qū)ο蟪绦蛟O(shè)計(jì)語言途徑:不需要規(guī)范化屬性的步驟,因?yàn)閿?shù)據(jù)庫管理系統(tǒng)本身具有把對象值映射成存儲(chǔ)值的功能。(2)關(guān)系數(shù)據(jù)庫管理系統(tǒng)452)設(shè)計(jì)相應(yīng)的服務(wù)如果某個(gè)類的對象需要存儲(chǔ)起來,則在這個(gè)類中增加一個(gè)屬性和服務(wù),用于完成存儲(chǔ)對象自身的工作。應(yīng)該把為此目的增加的屬性和服務(wù)作為“隱含”的屬性和服務(wù),即無須在面向?qū)ο笤O(shè)計(jì)模型的屬性和服務(wù)層中顯式地表示它們,僅需在關(guān)于類與對象的文檔中描述它們。下面介紹使用不同數(shù)據(jù)存儲(chǔ)管理模式時(shí)的設(shè)計(jì)要點(diǎn)。2)設(shè)計(jì)相應(yīng)的服務(wù)46(1)文件系統(tǒng)被存儲(chǔ)的對象需要知道打開哪個(gè)(些)文件,怎樣把文件定位到正確的記錄上,怎樣檢索出舊值(如果有的話),以及怎樣用現(xiàn)有值更新它們。此外,還應(yīng)該定義一個(gè)ObjectServer(對象服務(wù)器)類,并創(chuàng)建它的實(shí)例。該類提供下列服務(wù):通知對象保存自身;檢索已存儲(chǔ)的對象(查找,讀值,創(chuàng)建并初始化對象),以便把這些對象提供給其他子系統(tǒng)使用。注意,為提高性能應(yīng)該批量處理訪問文件的要求。(1)文件系統(tǒng)47(2)關(guān)系數(shù)據(jù)庫管理系統(tǒng)被存儲(chǔ)的對象,應(yīng)該知道訪問哪些數(shù)據(jù)庫表,怎樣訪問所需要的行,怎樣檢索出舊值(如果有的話),以及怎樣用現(xiàn)有值更新它們。此外,還應(yīng)該定義一個(gè)ObjectServer類,并聲明它的對象。該類提供下列服務(wù):通知對象保存自身;檢索已存儲(chǔ)的對象(查找,讀值,創(chuàng)建并初始化對象),以便由其他子系統(tǒng)使用這些對象。(2)關(guān)系數(shù)據(jù)庫管理系統(tǒng)48(3)面向?qū)ο髷?shù)據(jù)庫管理系統(tǒng)擴(kuò)展的關(guān)系數(shù)據(jù)庫途徑:與使用關(guān)系數(shù)據(jù)庫管理系統(tǒng)時(shí)方法相同。擴(kuò)展的面向?qū)ο蟪绦蛟O(shè)計(jì)語言途徑:無須增加服務(wù),這種數(shù)據(jù)庫管理系統(tǒng)已經(jīng)給每個(gè)對象提供了“存儲(chǔ)自己”的行為。只需給需要長期保存的對象加個(gè)標(biāo)記,然后由面向?qū)ο髷?shù)據(jù)庫管理系統(tǒng)負(fù)責(zé)存儲(chǔ)和恢復(fù)這類對象。(3)面向?qū)ο髷?shù)據(jù)庫管理系統(tǒng)49在ATM系統(tǒng)例子中,需要存儲(chǔ)的對象主要是賬戶類的對象。為了支持?jǐn)?shù)據(jù)管理子系統(tǒng)的實(shí)現(xiàn),賬戶類對象必須知道自己是怎樣存儲(chǔ)的,有兩種方法可以達(dá)到這個(gè)目的。(1)每個(gè)對象自己保存自己賬戶類對象在接到“存儲(chǔ)自己”的通知后,知道怎樣把自身存儲(chǔ)起來(需要增加一個(gè)屬性和一個(gè)服務(wù)來定義上述行為)。(2)由數(shù)據(jù)管理子系統(tǒng)負(fù)責(zé)存儲(chǔ)對象3.例子在ATM系統(tǒng)例子中,需要存儲(chǔ)的對象主要是賬戶類的對象。為了支50賬戶類對象在接到“存儲(chǔ)自己”的通知后,知道應(yīng)該向數(shù)據(jù)管理子系統(tǒng)發(fā)送什么消息,以便由數(shù)據(jù)管理子系統(tǒng)把它的狀態(tài)保存起來,為此也需要增加屬性和服務(wù)來定義上述行為。使用這種方法的優(yōu)點(diǎn),是無須修改問題域子系統(tǒng)。應(yīng)該定義一個(gè)數(shù)據(jù)管理類ObjectServer,并聲明它的對象。這個(gè)類提供下列服務(wù):通知對象保存自身或保存需長期存儲(chǔ)的對象的狀態(tài);檢索已存儲(chǔ)的對象并使之“復(fù)活”。賬戶類對象在接到“存儲(chǔ)自己”的通知后,知道應(yīng)該向數(shù)據(jù)管理子系51需要綜合考慮對象模型、動(dòng)態(tài)模型和功能模型,才能正確確定類中應(yīng)有的服務(wù)。狀態(tài)圖中狀態(tài)轉(zhuǎn)換所觸發(fā)的動(dòng)作,在功能模型中有時(shí)可能擴(kuò)展成一張數(shù)據(jù)流圖。數(shù)據(jù)流圖中的某些處理可能與對象提供的服務(wù)相對應(yīng),下列規(guī)則有助于確定操作的目標(biāo)對象:設(shè)計(jì)類中的服務(wù)1.確定設(shè)計(jì)類中應(yīng)有的服務(wù)需要綜合考慮對象模型、動(dòng)態(tài)模型和功能模型,才能正確確定類中應(yīng)52(1)如果某個(gè)處理的功能是從輸入流中抽取一個(gè)值,則該輸入流就是目標(biāo)對象。(2)如果某個(gè)處理具有類型相同的輸入流和輸出流,而且輸出流實(shí)質(zhì)上是輸入流的另一種形式,則該輸入輸出流就是目標(biāo)對象。(3)如果某個(gè)處理從多個(gè)輸入流得出輸出值,則該處理是輸出類中定義的一個(gè)服務(wù)。(4)如果某個(gè)處理把對輸入流處理的結(jié)果輸出給數(shù)據(jù)存儲(chǔ)或動(dòng)作對象,則該數(shù)據(jù)存儲(chǔ)或動(dòng)作對象就是目標(biāo)對象。(1)如果某個(gè)處理的功能是從輸入流中抽取一個(gè)值,則該輸入流53下面兩條規(guī)則有助于確定處理的歸屬:(1)如果處理影響或修改了一個(gè)對象,則最好把該處理與處理的目標(biāo)(而不是觸發(fā)者)聯(lián)系在一起。(2)考察處理涉及的對象類及這些類之間的關(guān)聯(lián),從中找出處于中心地位的類。如果其他類和關(guān)聯(lián)圍繞這個(gè)中心類構(gòu)成星形,則這個(gè)中心類就是處理的目標(biāo)。下面兩條規(guī)則有助于確定處理的歸屬:54在面向?qū)ο笤O(shè)計(jì)過程中還應(yīng)該進(jìn)一步設(shè)計(jì)實(shí)現(xiàn)服務(wù)的方法,主要應(yīng)該完成以下幾項(xiàng)工作。1)設(shè)計(jì)實(shí)現(xiàn)服務(wù)的算法設(shè)計(jì)實(shí)現(xiàn)服務(wù)的算法時(shí),應(yīng)該考慮下列幾個(gè)因素:(1)算法復(fù)雜度。(2)容易理解與容易實(shí)現(xiàn)。(3)易修改。2)選擇數(shù)據(jù)結(jié)構(gòu)在分析階段,僅需考慮系統(tǒng)中需要的信息的邏輯結(jié)構(gòu),在面向?qū)ο笤O(shè)計(jì)過程中,則需要選擇能夠方便、有效地實(shí)現(xiàn)算法的物理數(shù)據(jù)結(jié)構(gòu)。2.設(shè)計(jì)實(shí)現(xiàn)服務(wù)的方法在面向?qū)ο笤O(shè)計(jì)過程中還應(yīng)該進(jìn)一步設(shè)計(jì)實(shí)現(xiàn)服務(wù)的方法,主要應(yīng)該553)定義內(nèi)部類和內(nèi)部操作在面向?qū)ο笤O(shè)計(jì)過程中,可能需要增添一些在需求陳述中沒有提到的類,這些新增加的類,主要用來存放在執(zhí)行算法過程中所得出的某些中間結(jié)果。此外,復(fù)雜操作往往可以用簡單對象上的更低層操作來定義。因此,在分解高層操作時(shí)常常引入新的低層操作。在面向?qū)ο笤O(shè)計(jì)過程中應(yīng)該定義這些新增加的低層操作。3)定義內(nèi)部類和內(nèi)部操作56在對象模型中,關(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)。為了更好地設(shè)計(jì)實(shí)現(xiàn)關(guān)聯(lián)的途徑,首先應(yīng)該分析使用關(guān)聯(lián)的方式。設(shè)計(jì)關(guān)聯(lián)在對象模型中,關(guān)聯(lián)是聯(lián)結(jié)不同對象的紐帶,它指定了對象相互間的571.關(guān)聯(lián)的遍歷在應(yīng)用系統(tǒng)中,使用關(guān)聯(lián)有兩種可能的方式:單向遍歷和雙向遍歷。在應(yīng)用系統(tǒng)中,某些關(guān)聯(lián)只需要單向遍歷,這種單向關(guān)聯(lián)實(shí)現(xiàn)起來比較簡單,另外一些關(guān)聯(lián)可能需要雙向遍歷,雙向關(guān)聯(lián)實(shí)現(xiàn)起來稍微麻煩一些。在使用原型法開發(fā)軟件的時(shí)候,原型中所有關(guān)聯(lián)都應(yīng)該是雙向的,以便于增加新的行為,快速地?cái)U(kuò)充和修改原型。1.關(guān)聯(lián)的遍歷582.實(shí)現(xiàn)單向關(guān)聯(lián)用指針可以方便地實(shí)現(xiàn)單向關(guān)聯(lián)。3.實(shí)現(xiàn)雙向關(guān)聯(lián)許多關(guān)聯(lián)都需要雙向遍歷,當(dāng)然,兩個(gè)方向遍歷的頻度往往并不相同。實(shí)現(xiàn)雙向關(guān)聯(lián)有下列3種方法:2.實(shí)現(xiàn)單向關(guān)聯(lián)3.實(shí)現(xiàn)雙向關(guān)聯(lián)59(1)只用屬性實(shí)現(xiàn)一個(gè)方向的關(guān)聯(lián),當(dāng)需要反向遍歷時(shí)就執(zhí)行一次正向查找。(2)兩個(gè)方向的關(guān)聯(lián)都用屬性實(shí)現(xiàn)。

(1)只用屬性實(shí)現(xiàn)一個(gè)方向的關(guān)聯(lián),當(dāng)需要反向遍歷時(shí)就執(zhí)行一60(3)用獨(dú)立的關(guān)聯(lián)對象實(shí)現(xiàn)雙向關(guān)聯(lián)。(3)用獨(dú)立的關(guān)聯(lián)對象實(shí)現(xiàn)雙向關(guān)聯(lián)。614.關(guān)聯(lián)對象的實(shí)現(xiàn)可以引入一個(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ù)。對于一對一關(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)鏈及該鏈的屬性。4.關(guān)聯(lián)對象的實(shí)現(xiàn)可以引入一個(gè)關(guān)聯(lián)類來保存描述關(guān)聯(lián)性質(zhì)的信62系統(tǒng)的各項(xiàng)質(zhì)量指標(biāo)并不是同等重要的,設(shè)計(jì)人員必須確定各項(xiàng)質(zhì)量指標(biāo)的相對重要性(即確定優(yōu)先級(jí)),以便在優(yōu)化設(shè)計(jì)時(shí)制定折衷方案。系統(tǒng)的整體質(zhì)量與設(shè)計(jì)人員所制定的折衷方案密切相關(guān)。最終產(chǎn)品成功與否,在很大程度上取決于是否選擇好了系統(tǒng)目標(biāo)。在折衷方案中設(shè)置的優(yōu)先級(jí)應(yīng)該是模糊的。最常見的情況,是在效率和清晰性之間尋求適當(dāng)?shù)恼壑苑桨?。設(shè)計(jì)優(yōu)化1.確定優(yōu)先級(jí)系統(tǒng)的各項(xiàng)質(zhì)量指標(biāo)并不是同等重要的,設(shè)計(jì)人員必須確定各項(xiàng)質(zhì)量631)增加冗余關(guān)聯(lián)以提高訪問效率在面向?qū)ο蠓治鲞^程中,應(yīng)該避免在對象模型中存在冗余的關(guān)聯(lián)。但是,在面向?qū)ο笤O(shè)計(jì)過程中,應(yīng)當(dāng)考慮用戶的訪問模式,及不同

溫馨提示

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

評論

0/150

提交評論