大學(xué)課程《軟件工程》課件 第8章_第1頁(yè)
大學(xué)課程《軟件工程》課件 第8章_第2頁(yè)
大學(xué)課程《軟件工程》課件 第8章_第3頁(yè)
大學(xué)課程《軟件工程》課件 第8章_第4頁(yè)
大學(xué)課程《軟件工程》課件 第8章_第5頁(yè)
已閱讀5頁(yè),還剩121頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第8章 面向?qū)ο笤O(shè)計(jì) 從面向?qū)ο蠓治龅矫嫦驅(qū)ο笤O(shè)計(jì)(通??s寫為OOD),是一個(gè)逐漸擴(kuò)充模型的過程?;蛘哒f,面向?qū)ο笤O(shè)計(jì)就是用面向?qū)ο笥^點(diǎn)建立求解域模型的過程。 盡管分析和設(shè)計(jì)的定義有明顯區(qū)別,但是在實(shí)際的軟件開發(fā)過程中二者的界限是模糊的。 許多分析結(jié)果可以直接映射成設(shè)計(jì)結(jié)果,而在設(shè)計(jì)過程中又往往會(huì)加深和補(bǔ)充對(duì)系統(tǒng)需求的理解,從而進(jìn)一步完善分析結(jié)果。因此,分析和設(shè)計(jì)活動(dòng)是一個(gè)多次反復(fù)迭代的過程。 面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則8.1啟發(fā)規(guī)則8.2設(shè)計(jì)人_機(jī)交互子系統(tǒng)8.5設(shè)計(jì)問題域子系統(tǒng)8.4系統(tǒng)分解8.3設(shè)計(jì)任務(wù)管理子系統(tǒng)8.6小 結(jié)8.12設(shè)計(jì)優(yōu)化8.10面向?qū)ο蠓治雠c設(shè)計(jì)實(shí)例8.11設(shè)計(jì)關(guān)聯(lián)8.9設(shè)計(jì)

2、類中的服務(wù)8.8設(shè)計(jì)數(shù)據(jù)管理子系統(tǒng)8.78.1 面向?qū)ο笤O(shè)計(jì)的準(zhǔn)則 所謂優(yōu)秀設(shè)計(jì),就是權(quán)衡了各種因素,從而使得系統(tǒng)在其整個(gè)生命周期中的總開銷最小的設(shè)計(jì)。 8.1.1 模塊化 對(duì)象就是模塊。它是把數(shù)據(jù)結(jié)構(gòu)和操作這些數(shù)據(jù)的方法緊密地結(jié)合在一起所構(gòu)成的模塊。 8.1.2 抽象 面向?qū)ο蠓椒ú粌H支持過程抽象,而且支持?jǐn)?shù)據(jù)抽象。類實(shí)際上是一種抽象數(shù)據(jù)類型。 8.1.3 信息隱藏 在面向?qū)ο蠓椒ㄖ校畔㈦[藏通過對(duì)象的封裝性實(shí)現(xiàn)。 8.1.4 弱耦合 耦合主要指不同對(duì)象之間相互關(guān)聯(lián)的緊密程度。一般來說,對(duì)象之間的耦合可分為兩大類,下面分別討論這兩類耦合。 1.交互耦合 如果對(duì)象之間的耦合通過消息連接來實(shí)現(xiàn),

3、則這種耦合就是交互耦合。為使交互耦合盡可能松散,應(yīng)該遵守下述準(zhǔn)則。 盡量降低消息連接的復(fù)雜程度。 減少對(duì)象發(fā)送(或接收)的消息數(shù)。 2.繼承耦合 與交互耦合相反,應(yīng)該提高繼承耦合程度。為獲得緊密的繼承耦合,特殊類應(yīng)該確實(shí)是對(duì)它的一般化類的一種具體化。 8.1.5 強(qiáng)內(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)該是對(duì)相應(yīng)的領(lǐng)域知識(shí)的正確抽取。 8.1.6 可重用 一是盡量使用已有的類(包括開發(fā)環(huán)境提供的類庫(kù),及以往

4、開發(fā)類似系統(tǒng)時(shí)創(chuàng)建的類),二是如果確實(shí)需要?jiǎng)?chuàng)建新類,則在設(shè)計(jì)這些新類的協(xié)議時(shí),應(yīng)該考慮將來的可重復(fù)使用性。8.2 啟發(fā)規(guī)則 8.2.1 設(shè)計(jì)結(jié)果應(yīng)該清晰易懂 使設(shè)計(jì)結(jié)果清晰、易讀、易懂,是提高軟件可維護(hù)性和可重用性的重要措施。保證設(shè)計(jì)結(jié)果清晰易懂的主要因素有以下幾點(diǎn): 1. 用詞一致 2. 使用已有的協(xié)議 3. 減少消息模式的數(shù)目 4. 避免模糊的定義 8.2.2 一般特殊結(jié)構(gòu)的深度應(yīng)適當(dāng) 應(yīng)該使類等級(jí)中包含的層次數(shù)適當(dāng)。 8.2.3 設(shè)計(jì)簡(jiǎn)單的類 應(yīng)該盡量設(shè)計(jì)小而簡(jiǎn)單的類,以便于開發(fā)和管理。 1. 避免包含過多的屬性 2. 有明確的定義 3. 盡量簡(jiǎn)化對(duì)象之間的合作關(guān)系 4. 不要提供太多服

5、務(wù) 8.2.4 使用簡(jiǎn)單的協(xié)議 一般來說,消息中的參數(shù)不要超過3個(gè)。 8.2.5 使用簡(jiǎn)單的服務(wù) 面向?qū)ο笤O(shè)計(jì)出來的類中的服務(wù)通常都很小,一般只有35行源程序語(yǔ)句,可以用僅含一個(gè)動(dòng)詞和一個(gè)賓語(yǔ)的簡(jiǎn)單句子描述它的功能。 8.2.6 把設(shè)計(jì)變動(dòng)減至最小 通常,設(shè)計(jì)的質(zhì)量越高,設(shè)計(jì)結(jié)果保持不變的時(shí)間也越長(zhǎng)。圖8.1 理想的設(shè)計(jì)變動(dòng)情況8.3 系統(tǒng)分解 大多數(shù)系統(tǒng)的面向?qū)ο笤O(shè)計(jì)模型,在邏輯上都由四大部分組成。這四大部分對(duì)應(yīng)于組成目標(biāo)系統(tǒng)的四個(gè)子系統(tǒng),它們分別是問題域子系統(tǒng)、人-機(jī)交互子系統(tǒng)、任務(wù)管理子系統(tǒng)和數(shù)據(jù)管理子系統(tǒng)。 在不同的軟件系統(tǒng)中,這四個(gè)子系統(tǒng)的重要程度和規(guī)模可能相差很大,規(guī)模過大的在設(shè)計(jì)

6、過程中應(yīng)該進(jìn)一步劃分成更小的子系統(tǒng),規(guī)模過小的可合并在其他子系統(tǒng)中。圖8.2 典型的面向?qū)ο笤O(shè)計(jì)模型 8.3.1 子系統(tǒng)之間的兩種交互方式 在軟件系統(tǒng)中,子系統(tǒng)之間的交互有兩種可能的方式,分別是客戶供應(yīng)商關(guān)系和平等伙伴關(guān)系。 1. 客戶供應(yīng)商關(guān)系 2. 平等伙伴關(guān)系 總的說來,單向交互比雙向交互更容易理解,也更容易設(shè)計(jì)和修改,因此應(yīng)該盡量使用客戶供應(yīng)商關(guān)系。 8.3.2 組織系統(tǒng)的兩種方案 把子系統(tǒng)組織成完整的系統(tǒng)時(shí),有水平層次組織和垂直塊組織兩種方案可供選擇。 1. 層次組織 這種組織方案把軟件系統(tǒng)組織成一個(gè)層次系統(tǒng),每層是一個(gè)子系統(tǒng)。上層在下層的基礎(chǔ)上建立,下層為實(shí)現(xiàn)上層功能而提供必要的服

7、務(wù)。 每一層內(nèi)所包含的對(duì)象,彼此間相互獨(dú)立,而處于不同層次上的對(duì)象,彼此間往往有關(guān)聯(lián)。 實(shí)際上,在上、下層之間存在客戶供應(yīng)商關(guān)系。低層子系統(tǒng)提供服務(wù),相當(dāng)于供應(yīng)商,上層子系統(tǒng)使用下層提供的服務(wù),相當(dāng)于客戶。 2. 塊狀組織 這種組織方案把軟件系統(tǒng)垂直地分解成若干個(gè)相對(duì)獨(dú)立的、弱耦合的子系統(tǒng),一個(gè)子系統(tǒng)相當(dāng)于一塊,每塊提供一種類型的服務(wù)。 8.3.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)的、盡可能簡(jiǎn)單的拓?fù)浣Y(jié)構(gòu),以減少子系統(tǒng)之間的交互數(shù)量。8.4 設(shè)計(jì)問題域子系統(tǒng) 通過面向?qū)ο蠓治鏊贸龅膯栴}域精確模型,為設(shè)計(jì)問題域子

8、系統(tǒng)奠定了良好的基礎(chǔ),建立了完整的框架。 只要可能,就應(yīng)該保持面向?qū)ο蠓治鏊⒌膯栴}域結(jié)構(gòu)。通常,面向?qū)ο笤O(shè)計(jì)僅需從實(shí)現(xiàn)角度對(duì)問題域模型作一些補(bǔ)充或修改,主要是增添、合并或分解類對(duì)象、屬性及服務(wù),調(diào)整繼承關(guān)系等。 當(dāng)問題域子系統(tǒng)過分復(fù)雜龐大時(shí),應(yīng)該把它進(jìn)一步分解成若干個(gè)更小的子系統(tǒng)。 對(duì)面向?qū)ο蠓治鏊贸龅膯栴}域模型作的補(bǔ)充或修改所涉及的問題如下: 1.調(diào)整需求 2.重用已有的類 3.把問題域類組合在一起 在面向?qū)ο笤O(shè)計(jì)過程中,設(shè)計(jì)者往往通過引入一個(gè)根類而把問題域類組合在一起。 4.增添一般化類以建立協(xié)議 5.ATM系統(tǒng)之例 圖8.4描繪了上章給出的ATM系統(tǒng)的問題域子系統(tǒng)的結(jié)構(gòu)。8.5 設(shè)

9、計(jì)人-機(jī)交互子系統(tǒng) 8.5.1 設(shè)計(jì)人-機(jī)交互界面的準(zhǔn)則 遵循下列準(zhǔn)則有助于設(shè)計(jì)出讓用戶滿意的人-機(jī)交互界面。 1. 一致性 使用一致的術(shù)語(yǔ),一致的步驟,一致的動(dòng)作。 2. 減少步驟 應(yīng)使用戶為做某件事情盡量減少操作步驟。 還應(yīng)使得技術(shù)水平不同的用戶,為獲得有意義的結(jié)果所需使用的時(shí)間都減至最少。特別應(yīng)該為熟練用戶提供簡(jiǎn)捷的操作方法(例如,熱鍵)。 3. 及時(shí)提供反饋信息 每當(dāng)用戶等待系統(tǒng)完成一項(xiàng)工作時(shí),系統(tǒng)都應(yīng)該向用戶提供有意義的、及時(shí)的反饋信息,以便用戶能夠知道系統(tǒng)目前已經(jīng)完成該項(xiàng)工作的多大比例。 4. 提供撤消命令 人在與系統(tǒng)交互的過程中難免會(huì)犯錯(cuò)誤,因此,應(yīng)該提供“撤消(undo)”命令

10、,以便用戶及時(shí)撤消錯(cuò)誤動(dòng)作,消除錯(cuò)誤動(dòng)作造成的后果。 5. 無須記憶 不應(yīng)該要求用戶記住在某個(gè)窗口中顯示的信息,然后再用到另一個(gè)窗口中,這是軟件系統(tǒng)的責(zé)任而不是用戶的任務(wù)。 此外,在設(shè)計(jì)人-機(jī)交互部分時(shí)應(yīng)該力求達(dá)到下述目標(biāo):用戶在使用該系統(tǒng)時(shí)用于思考人-機(jī)交互方法所花費(fèi)的時(shí)間減至最少,而用于做他實(shí)際想做的工作所用的時(shí)間達(dá)到最大值。更理想的情況是,人-機(jī)交互界面能夠增強(qiáng)用戶的能力。 6. 易學(xué) 人-機(jī)交互界面應(yīng)該易學(xué)易用,應(yīng)該提供聯(lián)機(jī)參考資料,以便用戶在遇到困難時(shí)可隨時(shí)參閱。 7. 富有吸引力 人-機(jī)交互界面不僅應(yīng)該方便、高效,還應(yīng)該使人在使用時(shí)感到心情愉快,能夠從中獲得樂趣,從而吸引人去使用它

11、。 8.5.2 設(shè)計(jì)人-機(jī)交互子系統(tǒng)的策略 1. 分類用戶 為了更好地了解用戶的需要與愛好,以便設(shè)計(jì)出符合用戶需要的界面,設(shè)計(jì)者首先應(yīng)該把將來可能與系統(tǒng)交互的用戶分類。通常從下列幾個(gè)不同角度進(jìn)行分類。 按技能水平分類(新手/初級(jí)/中級(jí)/高級(jí))。 按職務(wù)分類(總經(jīng)理/經(jīng)理/職員)。 按所屬集團(tuán)分類(職員/顧客)。 2. 描述用戶 應(yīng)該仔細(xì)了解將來使用系統(tǒng)的每類用戶的情況,把獲得的下列各項(xiàng)信息記錄下來。 3. 設(shè)計(jì)命令層次 設(shè)計(jì)命令層次的工作通常包含以下幾項(xiàng)內(nèi)容。 (1) 研究現(xiàn)有的人-機(jī)交互含義和準(zhǔn)則 (2) 確定初始的命令層次 所謂命令層次,實(shí)質(zhì)上是用過程抽象機(jī)制組織起來的、可供選用的服務(wù)的表

12、示形式。設(shè)計(jì)命令層次時(shí),通常先從對(duì)服務(wù)的過程抽象著手,然后再進(jìn)一步修改它們,以適合具體應(yīng)用環(huán)境的需要。 (3) 精化命令層次 為進(jìn)一步修改完善初始的命令層次,應(yīng)該考慮下列一些因素。 次序:仔細(xì)選擇每個(gè)服務(wù)的名字,并在命令層的每一部分內(nèi)把服務(wù)排好次序。排序時(shí)或者把最常用的服務(wù)放在最前面,或者按照用戶習(xí)慣的工作步驟排序。 整體部分關(guān)系:尋找在這些服務(wù)中存在的整體部分模式,這樣做有助于在命令層中分組組織服務(wù)。 寬度和深度:由于人的短期記憶能力有限,命令層次的寬度和深度都不應(yīng)該過大。 操作步驟:應(yīng)該用盡量少的單擊、拖動(dòng)和擊鍵組合來表達(dá)命令,而且應(yīng)該為高級(jí)用戶提供簡(jiǎn)捷的操作方法。 4. 設(shè)計(jì)人-機(jī)交互類

13、 人-機(jī)交互類與所使用的操作系統(tǒng)及編程語(yǔ)言密切相關(guān)。8.6 設(shè)計(jì)任務(wù)管理子系統(tǒng) 8.6.1 分析并發(fā)性 通過面向?qū)ο蠓治鼋⑵饋淼膭?dòng)態(tài)模型,是分析并發(fā)性的主要依據(jù)。如果兩個(gè)對(duì)象彼此間不存在交互,或者它們同時(shí)接受事件,則這兩個(gè)對(duì)象在本質(zhì)上是并發(fā)的。 8.6.2 設(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ù) 某些任務(wù)是由事件驅(qū)動(dòng)的,這類任務(wù)可能主要完成通信工作。 2. 確定時(shí)鐘驅(qū)動(dòng)型任務(wù) 某些任務(wù)每隔一定時(shí)間間隔就被觸發(fā)以執(zhí)行某些處理,例如,某些設(shè)

14、備需要周期性地獲得數(shù)據(jù);在這些場(chǎng)合往往需要使用時(shí)鐘驅(qū)動(dòng)型任務(wù)。 3. 確定優(yōu)先任務(wù) 優(yōu)先任務(wù)可以滿足高優(yōu)先級(jí)或低優(yōu)先級(jí)的處理需求。 高優(yōu)先級(jí):某些服務(wù)具有很高的優(yōu)先級(jí),為了在嚴(yán)格限定的時(shí)間內(nèi)完成這種服務(wù),可能需要把這類服務(wù)分離成獨(dú)立的任務(wù)。 低優(yōu)先級(jí):與高優(yōu)先級(jí)相反,有些服務(wù)是低優(yōu)先級(jí)的,屬于低優(yōu)先級(jí)處理。設(shè)計(jì)時(shí)可能用額外的任務(wù)把這樣的處理分離出來。 4. 確定關(guān)鍵任務(wù) 關(guān)鍵任務(wù)是有關(guān)系統(tǒng)成功或失敗的關(guān)鍵處理,這類處理通常都有嚴(yán)格的可靠性要求。在設(shè)計(jì)過程中可能用額外的任務(wù)把這樣的關(guān)鍵處理分離出來,以滿足高可靠性處理的要求。對(duì)高可靠性處理應(yīng)該精心設(shè)計(jì)和編碼,并且應(yīng)該嚴(yán)格測(cè)試。 5. 確定協(xié)調(diào)任務(wù)

15、 當(dāng)系統(tǒng)中存在三個(gè)以上任務(wù)時(shí),就應(yīng)該增加一個(gè)任務(wù),用它作為協(xié)調(diào)任務(wù)。 6. 盡量減少任務(wù)數(shù) 必須仔細(xì)分析和選擇每個(gè)確實(shí)需要的任務(wù)。應(yīng)該使系統(tǒng)中包含的任務(wù)數(shù)盡量少。 7. 確定資源需求 使用多處理器或固件,主要是為了滿足高性能的需求。8.7 設(shè)計(jì)數(shù)據(jù)管理子系統(tǒng) 數(shù)據(jù)管理子系統(tǒng)是系統(tǒng)存儲(chǔ)或檢索對(duì)象的基本設(shè)施,它建立在某種數(shù)據(jù)存儲(chǔ)管理系統(tǒng)之上,并且隔離了數(shù)據(jù)存儲(chǔ)管理模式(文件、關(guān)系數(shù)據(jù)庫(kù)或面向?qū)ο髷?shù)據(jù)庫(kù))的影響。 8.7.1 選擇數(shù)據(jù)存儲(chǔ)管理模式 不同的數(shù)據(jù)存儲(chǔ)管理模式有不同的特點(diǎn),適用范圍也不相同,設(shè)計(jì)者應(yīng)該根據(jù)應(yīng)用系統(tǒng)的特點(diǎn)選擇適用的模式。 1. 文件管理系統(tǒng) 2. 關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng) 3. 面

16、向?qū)ο髷?shù)據(jù)庫(kù)管理系統(tǒng) 面向?qū)ο髷?shù)據(jù)庫(kù)管理系統(tǒng)是一種新技術(shù),主要有兩種設(shè)計(jì)途徑:擴(kuò)展的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)和擴(kuò)展的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言。 8.7.2 設(shè)計(jì)數(shù)據(jù)管理子系統(tǒng) 設(shè)計(jì)數(shù)據(jù)管理子系統(tǒng),既需要設(shè)計(jì)數(shù)據(jù)格式又需要設(shè)計(jì)相應(yīng)的服務(wù)。 1. 設(shè)計(jì)數(shù)據(jù)格式 設(shè)計(jì)數(shù)據(jù)格式的方法與所使用的數(shù)據(jù)存儲(chǔ)管理模式密切相關(guān),下面分別介紹適用于每種數(shù)據(jù)存儲(chǔ)管理模式的設(shè)計(jì)方法。 (1) 文件系統(tǒng) (2) 關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng) (3) 面向?qū)ο髷?shù)據(jù)庫(kù)管理系統(tǒng) 2. 設(shè)計(jì)相應(yīng)的服務(wù) 如果某個(gè)類的對(duì)象需要存儲(chǔ)起來,則在這個(gè)類中增加一個(gè)屬性和服務(wù),用于完成存儲(chǔ)對(duì)象自身的工作。 下面介紹使用不同數(shù)據(jù)存儲(chǔ)管理模式時(shí)的設(shè)計(jì)要點(diǎn)。 (1)

17、 文件系統(tǒng) 注意,為提高性能應(yīng)該批量處理訪問文件的要求。 (2) 關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng) (3) 面向?qū)ο髷?shù)據(jù)庫(kù)管理系統(tǒng) 8.8 設(shè)計(jì)類中的服務(wù) 8.8.1 確定類中應(yīng)有的服務(wù) 需要綜合考慮對(duì)象模型、動(dòng)態(tài)模型和功能模型,才能正確確定類中應(yīng)有的服務(wù)。對(duì)象模型是進(jìn)行對(duì)象設(shè)計(jì)的基本框架。 但是,面向?qū)ο蠓治龅贸龅膶?duì)象模型,通常只在每個(gè)類中列出很少幾個(gè)最核心的服務(wù)。設(shè)計(jì)者必須把動(dòng)態(tài)模型中對(duì)象的行為以及功能模型中的數(shù)據(jù)處理,轉(zhuǎn)換成由適當(dāng)?shù)念愃峁┑姆?wù)。 8.8.2 設(shè)計(jì)實(shí)現(xiàn)服務(wù)的方法 在面向?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ù)的算

18、法時(shí),應(yīng)該考慮下列幾個(gè)因素。 (1) 算法復(fù)雜度 (2) 容易理解與容易實(shí)現(xiàn) (3) 易修改 2. 選擇數(shù)據(jù)結(jié)構(gòu) 3. 定義內(nèi)部類和內(nèi)部操作8.9 設(shè)計(jì)關(guān)聯(lián) 在對(duì)象模型中,關(guān)聯(lián)是聯(lián)結(jié)不同對(duì)象的紐帶,它指定了對(duì)象相互間的訪問路徑。在面向?qū)ο笤O(shè)計(jì)過程中,設(shè)計(jì)人員必須確定實(shí)現(xiàn)關(guān)聯(lián)的具體策略。 8.9.1 關(guān)聯(lián)的遍歷 在應(yīng)用系統(tǒng)中,使用關(guān)聯(lián)有兩種可能的方式:?jiǎn)蜗虮闅v和雙向遍歷。 8.9.2 實(shí)現(xiàn)單向關(guān)聯(lián) 用指針可以方便地實(shí)現(xiàn)單向關(guān)聯(lián)。如果關(guān)聯(lián)的階是一元的(如圖8.5所示),則實(shí)現(xiàn)關(guān)聯(lián)的指針是一個(gè)簡(jiǎn)單指針;如果階是多元的,則需要用一個(gè)指針集合實(shí)現(xiàn)關(guān)聯(lián)(參見圖8.6)。 8.9.3 實(shí)現(xiàn)雙向關(guān)聯(lián) 許多關(guān)聯(lián)

19、都需要雙向遍歷,當(dāng)然,兩個(gè)方向遍歷的頻度往往并不相同。實(shí)現(xiàn)雙向關(guān)聯(lián)有下列三種方法。 只用屬性實(shí)現(xiàn)一個(gè)方向的關(guān)聯(lián),當(dāng)需要反向遍歷時(shí)就執(zhí)行一次正向查找。 兩個(gè)方向的關(guān)聯(lián)都用屬性實(shí)現(xiàn)。 用獨(dú)立的關(guān)聯(lián)對(duì)象實(shí)現(xiàn)雙向關(guān)聯(lián)。圖8.5 用指針實(shí)現(xiàn)單向關(guān)聯(lián)(a)關(guān)聯(lián);(b)實(shí)現(xiàn)圖8.6 用指針實(shí)現(xiàn)雙向關(guān)聯(lián)(a)關(guān)聯(lián);(b)實(shí)現(xiàn) 8.9.4 鏈屬性的實(shí)現(xiàn) 如果某個(gè)關(guān)聯(lián)具有鏈屬性,則實(shí)現(xiàn)它的方法取決于關(guān)聯(lián)的階數(shù)。對(duì)于一對(duì)一關(guān)聯(lián)來說,鏈屬性可作為其中一個(gè)對(duì)象的屬性而存儲(chǔ)在該對(duì)象中。 對(duì)于一對(duì)多關(guān)聯(lián)來說,鏈屬性可作為“多”端對(duì)象的一個(gè)屬性。如果是多對(duì)多關(guān)聯(lián),則鏈屬性不可能只與一個(gè)關(guān)聯(lián)對(duì)象有關(guān),通常使用一個(gè)獨(dú)立的類來實(shí)現(xiàn)

20、鏈屬性,這個(gè)類的每個(gè)實(shí)例表示一條鏈及該鏈的屬性(參見圖8.7)。圖8.7 用對(duì)象實(shí)現(xiàn)關(guān)聯(lián)8.10 設(shè)計(jì)優(yōu)化 8.10.1 確定優(yōu)先級(jí) 系統(tǒng)的各項(xiàng)質(zhì)量指標(biāo)并不是同等重要的,設(shè)計(jì)人員必須確定各項(xiàng)質(zhì)量指標(biāo)的相對(duì)重要性(即確定優(yōu)先級(jí)),以便在優(yōu)化設(shè)計(jì)時(shí)制定折衷方案。 8.10.2 提高效率的幾項(xiàng)技術(shù) 1. 增加冗余關(guān)聯(lián)以提高訪問效率 2調(diào)整查詢次序 3. 保留派生屬性圖8.8 公司、雇員及技能之間的關(guān)聯(lián)鏈圖8.9 為雇員技能數(shù)據(jù)庫(kù)建立索引 8.10.3 調(diào)整繼承關(guān)系 在面向?qū)ο笤O(shè)計(jì)過程中,建立良好的繼承關(guān)系是優(yōu)化設(shè)計(jì)的一項(xiàng)重要內(nèi)容。 下面討論與建立類繼承有關(guān)的問題。 1. 抽象與具體 在設(shè)計(jì)類繼承時(shí),

21、很少使用純粹自頂向下的方法。通常的作法是,首先創(chuàng)建一些滿足具體用途的類,然后對(duì)它們進(jìn)行歸納,一旦歸納出一些通用的類以后,往往可以根據(jù)需要再派生出具體類。 在進(jìn)行了一些具體化(即專門化)的工作之后,也許就應(yīng)該再次歸納了。對(duì)于某些類繼承來說,這是一個(gè)持續(xù)不斷的演化過程。先創(chuàng)建一些具體類; 歸納出抽象類; 進(jìn)一步具體化;再次歸納圖8.10設(shè)計(jì)類繼承的例子 2. 為提高繼承程度而修改類定義 如果在一組相似的類中存在公共的屬性和公共的行為,則可以把這些公共的屬性和行為抽取出來放在一個(gè)共同的祖先類中,供其子類繼承,如圖8.10(a)和(b)所示。 在對(duì)現(xiàn)有類進(jìn)行歸納的時(shí)候,要注意下述兩點(diǎn): (1)不能違背

22、領(lǐng)域知識(shí)和常識(shí); (2) 應(yīng)該確保現(xiàn)有類的協(xié)議(即同外部世界的接口)不變。 3. 利用委托實(shí)現(xiàn)行為共享 僅當(dāng)存在真實(shí)的一般特殊關(guān)系(即子類確實(shí)是父類的一種特殊形式)時(shí),利用繼承機(jī)制實(shí)現(xiàn)行為共享才是合理的。 如果你只想把繼承作為實(shí)現(xiàn)操作共享的一種手段,則利用委托(即把一類對(duì)象作為另一類對(duì)象的屬性,從而在兩類對(duì)象間建立組合關(guān)系)也可以達(dá)到同樣目的,而且這種方法更安全。 使用委托機(jī)制時(shí),只有有意義的操作才委托另一類對(duì)象實(shí)現(xiàn),因此,不會(huì)發(fā)生不慎繼承了無意義(甚至有害)操作的問題。(a) 用繼承實(shí)現(xiàn);(b) 用委托實(shí)現(xiàn)圖8.11用表實(shí)現(xiàn)棧的兩種方法8.11 面向?qū)ο蠓治雠c設(shè)計(jì)實(shí)例 8.11.1面向?qū)ο蠓治?1. 需求 這個(gè)類庫(kù)管理系統(tǒng)的主要用途,是管理用戶在用C+KG-*4/9+語(yǔ)言開發(fā)軟件的漫長(zhǎng)過程中逐漸積累起來的類,以便在今后的軟件開發(fā)過程中能夠從庫(kù)中方便地選取出可重用的類。 它應(yīng)該具有編輯(包括添加、修改和刪除)、儲(chǔ)存和瀏覽等基本功能, 2.建立對(duì)象模型 (1) 確定問題域中的類 從對(duì)這個(gè)類庫(kù)管理系統(tǒng)的需求不難看出,組成這個(gè)系統(tǒng)的基本對(duì)象是“類庫(kù)”和“類”。類是類庫(kù)中的“條目”,不妨把它稱為“類條目”(ClassEntry)。 (2) 分析類之間的關(guān)系 圖8.12是本問題域的對(duì)象模型。圖8.12 類庫(kù)管理系統(tǒng)的對(duì)象模型 8.11.2 面向?qū)ο笤O(shè)計(jì) 1.設(shè)計(jì)類庫(kù)結(jié)構(gòu) 當(dāng)用鏈表存儲(chǔ)類條

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論