軟件工程理論與實踐 課件 第11章 面向?qū)ο笤O(shè)計-1_第1頁
軟件工程理論與實踐 課件 第11章 面向?qū)ο笤O(shè)計-1_第2頁
軟件工程理論與實踐 課件 第11章 面向?qū)ο笤O(shè)計-1_第3頁
軟件工程理論與實踐 課件 第11章 面向?qū)ο笤O(shè)計-1_第4頁
軟件工程理論與實踐 課件 第11章 面向?qū)ο笤O(shè)計-1_第5頁
已閱讀5頁,還剩76頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第11章

面向?qū)ο笤O(shè)計本章概述2本章首先介紹面向?qū)ο笤O(shè)計與結(jié)構(gòu)化設(shè)計的不同點,以及面向?qū)ο笤O(shè)計與面向?qū)ο蠓治龅年P(guān)系。然后介紹面向?qū)ο笤O(shè)計的過程、原則和啟發(fā)規(guī)則。接著講述系統(tǒng)設(shè)計,包括系統(tǒng)分解以及對問題域子系統(tǒng)、人機交互子系統(tǒng)、任務(wù)管理子系統(tǒng)、和數(shù)據(jù)管理子系統(tǒng)的設(shè)計。最后,對對象設(shè)計進(jìn)行較為詳細(xì)的闡述,包括設(shè)計類中的服務(wù)、設(shè)計類的關(guān)聯(lián)和對象設(shè)計優(yōu)化。本章目標(biāo):了解面向?qū)ο笤O(shè)計與結(jié)構(gòu)化設(shè)計的不同理解面向?qū)ο笤O(shè)計與面向?qū)ο蠓治龅年P(guān)系理解面向?qū)ο笤O(shè)計的過程、原則和啟發(fā)規(guī)則熟悉面向?qū)ο笙到y(tǒng)分解方法熟悉面向?qū)ο髥栴}域、人機交互、任務(wù)管理和數(shù)據(jù)管理各子系統(tǒng)的設(shè)計方法掌握對象設(shè)計方法熟悉軟件設(shè)計模式。目錄3面向?qū)ο笤O(shè)計與結(jié)構(gòu)化設(shè)計面向?qū)ο笤O(shè)計與面向?qū)ο蠓治龅年P(guān)系面向?qū)ο笤O(shè)計的過程與原則面向?qū)ο笤O(shè)計的啟發(fā)規(guī)則系統(tǒng)設(shè)計對象設(shè)計第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)第六節(jié)第七節(jié)軟件設(shè)計模式第一節(jié)面向?qū)ο笤O(shè)計與結(jié)構(gòu)化設(shè)計11.1面向?qū)ο笤O(shè)計與結(jié)構(gòu)化設(shè)計與結(jié)構(gòu)化的設(shè)計相比,面向?qū)ο蟮脑O(shè)計更符合復(fù)雜的、隨機性較強和考慮并發(fā)性的系統(tǒng)軟件設(shè)計,而不適合邏輯性很強的系統(tǒng)軟件設(shè)計。結(jié)構(gòu)化軟件設(shè)計一般從系統(tǒng)功能入手,按照需求將系統(tǒng)功能分為若干個子功能模塊。但是,用戶的需求是在不斷變化的。需求的改變往往會對功能模塊產(chǎn)生影響,從而對整個系統(tǒng)產(chǎn)生影響,而面向?qū)ο蟮脑O(shè)計基于類、對象、封裝、繼承等概念,相比之下,需求的變化對系統(tǒng)的局部影響并不容易擴展到全局。因此,面向?qū)ο笤O(shè)計方法比結(jié)構(gòu)化設(shè)計方法更具有優(yōu)勢,使用范圍更廣。501020304GOAL11.1面向?qū)ο笤O(shè)計與結(jié)構(gòu)化設(shè)計由于在類中封裝了屬性和方法,因此在面向?qū)ο蟮念愒O(shè)計中已經(jīng)包含了面向過程中的過程設(shè)計。此外,與面向過程中的數(shù)據(jù)設(shè)計所不同的是,面向?qū)ο笤O(shè)計中的數(shù)據(jù)設(shè)計并不是獨立進(jìn)行的,面向?qū)ο笤O(shè)計中的類圖相當(dāng)于數(shù)據(jù)的邏輯模型,可以很容易地轉(zhuǎn)換成數(shù)據(jù)的物理模型。6第二節(jié)面向?qū)ο笤O(shè)計與面向?qū)ο蠓治龅年P(guān)系11.2面向?qū)ο笤O(shè)計與面向?qū)ο蠓治龅年P(guān)系與傳統(tǒng)的軟件工程方法不同的是,面向?qū)ο蟮姆椒ú粡娬{(diào)需求分析和軟件設(shè)計的嚴(yán)格區(qū)分。實際上,面向?qū)ο蠓治龅矫嫦驅(qū)ο笤O(shè)計是一個平滑的過渡,即沒有間斷沒有明確的分界線,需求分析和面向?qū)ο蟮脑O(shè)計活動是一個反復(fù)迭代的過程,從分析到設(shè)計的過渡,是一個逐漸擴充、細(xì)化和完善分析階段所得到的各種模型的過程。嚴(yán)格的意義上來講,從面向?qū)ο蠓治龅矫嫦驅(qū)ο笤O(shè)計不存在轉(zhuǎn)換問題,而是同一種表示方法在不同范圍的運用。面向?qū)ο笤O(shè)計也不僅僅是對面向?qū)ο蠓治瞿P瓦M(jìn)行細(xì)化。8面向?qū)ο笤O(shè)計把分析階段得到的需求轉(zhuǎn)變成符合各項要求的實現(xiàn)方案,考慮系統(tǒng)的具體實現(xiàn)環(huán)境的約束面向?qū)ο蠓治鼋⑾到y(tǒng)的問題域?qū)ο竽P?,脫離現(xiàn)實實現(xiàn)求解域問題域第三節(jié)面向?qū)ο笤O(shè)計的過程與規(guī)則11.3.1面向?qū)ο笤O(shè)計的過程10030102ThreeTwoOne建立軟件體系結(jié)構(gòu)環(huán)境圖軟件體系結(jié)構(gòu)設(shè)計對各個子系統(tǒng)進(jìn)行設(shè)計Four04對象設(shè)計及優(yōu)化11.3.1面向?qū)ο笤O(shè)計的過程建立軟件體系結(jié)構(gòu)環(huán)境圖在軟件體系結(jié)構(gòu)設(shè)計開始的時候,設(shè)計應(yīng)該定義與軟件進(jìn)行交互的外部實體(其他系統(tǒng)、設(shè)備和人員等)以及交互的特性。一般在分析建模階段可以獲得這些信息,并使用軟件體系結(jié)構(gòu)環(huán)境圖對環(huán)境進(jìn)行建模,描述系統(tǒng)的出人信息流、用戶界面和相關(guān)的支持處理。一旦建立了軟件體系結(jié)構(gòu)的環(huán)境圖,描述出所有的外部軟件接口,軟件架構(gòu)師就可以通過定義和求精實現(xiàn)軟件體系結(jié)構(gòu)的構(gòu)件來描述系統(tǒng)的結(jié)構(gòu)。這個過程可一直迭代,直到獲得一個完善的軟件體系結(jié)構(gòu)。在設(shè)計的初始階段,軟件架構(gòu)師用軟件體系結(jié)構(gòu)環(huán)境圖對軟件與外部實體交互的方式進(jìn)行建模。11定義交互環(huán)境建模描述接口求精實現(xiàn)11.3.1面向?qū)ο笤O(shè)計的過程12如圖所示,與目標(biāo)系統(tǒng)(即開發(fā)軟件體系結(jié)構(gòu)的系統(tǒng))交互的系統(tǒng)可以表示為:上級系統(tǒng):將目標(biāo)系統(tǒng)作為某些高層處理方案的一部分。下級系統(tǒng):被目標(biāo)系統(tǒng)所使用,并且為完成目標(biāo)系統(tǒng)的功能提供必要的數(shù)據(jù)和處理同級系統(tǒng):在對等的基礎(chǔ)上相互作用(例如,信息要么由目標(biāo)系統(tǒng)和同級系統(tǒng)產(chǎn)生,要么被目標(biāo)系統(tǒng)和同級系統(tǒng)使用)。參與者:指通過產(chǎn)生和使用所需的信息,實現(xiàn)與目標(biāo)系統(tǒng)交互的實體(人、設(shè)備)。每個外部實體都通過某一接口(帶陰影的小矩形)與目標(biāo)系統(tǒng)進(jìn)行通信。11.3.1面向?qū)ο笤O(shè)計的過程

軟件體系結(jié)構(gòu)設(shè)計軟件體系結(jié)構(gòu)環(huán)境圖建立之后,而且對所有的外部軟件接口進(jìn)行了描述,就可以進(jìn)行軟件體系結(jié)構(gòu)設(shè)計了。至于選擇哪一種方式,需要根據(jù)具體的情況來確定。當(dāng)沒有類似的軟件體系結(jié)構(gòu)作為參考時,常常會使用自底向上的方式進(jìn)行軟件體系結(jié)構(gòu)設(shè)計。多數(shù)情況下,使用自頂向下的方式進(jìn)行軟件體系結(jié)構(gòu)設(shè)計則更常見。01自底向上Scheme1先為系統(tǒng)中最底層細(xì)節(jié)編程,然后逐步在更高層累計細(xì)節(jié)直至最終滿足系統(tǒng)需求,如將關(guān)系緊密的對象組織成子系統(tǒng)或?qū)?2自頂向下Scheme2通過分解功能來解決問題,尤其是使用設(shè)計模式或遺產(chǎn)系統(tǒng)時,會從子系統(tǒng)的劃分人手03自中向上下Scheme3先開始做系統(tǒng)中看來容易做的,再向相應(yīng)的高層或底層擴展。11.3.1面向?qū)ο笤O(shè)計的過程14

軟件體系結(jié)構(gòu)設(shè)計在自頂向下這種方式下,首先要根據(jù)客戶的需求選擇軟件體系結(jié)構(gòu)風(fēng)格,然后對可選的軟件體系結(jié)構(gòu)風(fēng)格或模式進(jìn)行分析,以建立最適合客戶需求和質(zhì)量屬性的結(jié)構(gòu)。需要強調(diào)的是,軟件體系結(jié)構(gòu)設(shè)計這個過程可一直迭代,直到獲得一個完善的軟件體系結(jié)構(gòu)。有經(jīng)驗的軟件設(shè)計人員應(yīng)能按照項目所需的策略進(jìn)行軟件體系結(jié)構(gòu)設(shè)計。

11.3.1面向?qū)ο笤O(shè)計的過程對各個子系統(tǒng)進(jìn)行設(shè)計當(dāng)然,在不同的軟件系統(tǒng)中,這4個子系統(tǒng)的重要程度和規(guī)??赡芟嗖詈艽?,規(guī)模過大的在設(shè)計過程中應(yīng)該進(jìn)一步劃分成更小的子系統(tǒng),規(guī)模過小的可合并在其他子系統(tǒng)中。某些領(lǐng)域的應(yīng)用系統(tǒng)在邏輯上可能僅由3個(甚至少于3個)子系統(tǒng)組成。15問題域子系統(tǒng)任務(wù)管理子系統(tǒng)人—機交互子系統(tǒng)數(shù)據(jù)管理子系統(tǒng)問題域子系統(tǒng)人—機交互子系統(tǒng)任務(wù)管理子系統(tǒng)數(shù)據(jù)管理子系統(tǒng)11.3.1面向?qū)ο笤O(shè)計的過程對象設(shè)計及優(yōu)化對象設(shè)計是細(xì)化原有的分析對象,確定一些新的對象、對每一個子系統(tǒng)接口和類進(jìn)行準(zhǔn)確詳細(xì)的說明。系統(tǒng)的各項質(zhì)量指標(biāo)并不是同等重要的,設(shè)計人員必須確定各項質(zhì)量指標(biāo)的相對重要性(即確定優(yōu)先級),以便在優(yōu)化對象設(shè)計時制定折衷方案。常見的對象優(yōu)化設(shè)計方法有提高效率的技術(shù)和建立良好的繼承結(jié)構(gòu)。11.3.2面向?qū)ο笤O(shè)計的原則面向?qū)ο蟮脑O(shè)計原則基本遵循傳統(tǒng)軟件設(shè)計應(yīng)該遵循的基本原理,同時還要考慮面向?qū)ο蟮奶攸c。設(shè)計原則具體如下。17模塊化結(jié)構(gòu)化設(shè)計中,一個模塊通常為一個過程或一個函數(shù),它們封裝了一系列控制邏輯。而面向?qū)ο笤O(shè)計中,一個模塊通常為一個類或?qū)ο?,封裝了事物屬性和行為。01抽象化類是對一組具有相似特征的對象的抽象,而對象是對客觀事物的抽象。02信息隱藏對于類而言,其內(nèi)部信息如屬性的表示方法和操作的實現(xiàn)算法,對外界是隱藏的。外界通過有限的接口來訪問類的內(nèi)部信息。0311.3.2面向?qū)ο笤O(shè)計的原則18低耦合在面向?qū)ο笤O(shè)計中,耦合主要指對象之間相互關(guān)聯(lián)的緊密程度,低耦合有利于降低一個模塊改變對其他模塊的影響。高內(nèi)聚內(nèi)聚與耦合密切相關(guān),低耦合往往意味著高內(nèi)聚,高內(nèi)聚有助于提高系統(tǒng)獨立性。復(fù)用性盡量使用已有的類;構(gòu)造新類時,需要考慮該類將來被復(fù)用的可能。提高類的復(fù)用性以節(jié)約資源。面向?qū)ο笤O(shè)計的原則——開閉原則內(nèi)容:軟件實體應(yīng)當(dāng)對擴展開放,對修改關(guān)閉。通俗來講,開閉原則就是軟件系統(tǒng)中的各組件,應(yīng)該能夠在不修改現(xiàn)有內(nèi)容的基礎(chǔ)上,引入新功能。為了達(dá)到開閉原則,對于類圖的設(shè)計應(yīng)該盡可能地使用接口或泛化進(jìn)行封裝,并且通過使用多態(tài)機制進(jìn)行調(diào)用。接口和泛化的使用可以使操作的定義與實現(xiàn)分離,使得新添加的模塊依賴于原有模塊的接口。多態(tài)的使用使得在使用時可以通過創(chuàng)建父類的間接實例通過多態(tài)的支持進(jìn)行操作,從而避免對其他類的修改。面向?qū)ο笤O(shè)計的原則——開閉原則面向?qū)ο笤O(shè)計的原則——里氏替換原則內(nèi)容:子類對于父類應(yīng)該是完全可替換的。具體來說,如果S是T的子類,則T類的對象可以被S類的對象所替代而不會改變該程序的任何理想特性。我們都知道,子類的實例是父類的間接實例。根據(jù)多態(tài)原則,當(dāng)父類創(chuàng)建一個間接實例時并調(diào)用操作時,將根據(jù)實際類型調(diào)用子類的操作實現(xiàn)。面向?qū)ο笤O(shè)計的原則——里氏替換原則面向?qū)ο笤O(shè)計的原則——依賴倒置原則內(nèi)容:高層次模塊不應(yīng)該依賴于低層次模塊,二者都應(yīng)該依賴于抽象;抽象不應(yīng)該依賴于具體,具體應(yīng)該依賴于抽象。根據(jù)依賴倒置原則,從高層次到低層次之間設(shè)計類結(jié)構(gòu)的方式應(yīng)該是:高層次類

抽象層

低層次類。在設(shè)計時,可以使用接口作為抽象層。面向?qū)ο笤O(shè)計的原則——依賴倒置原則面向?qū)ο笤O(shè)計的原則——接口分離原則內(nèi)容:在系統(tǒng)中任何客戶類都不應(yīng)該依賴于他們不使用的接口。當(dāng)系統(tǒng)中需要接入許多個子模塊時,相比于只使用一個接口,將其分成許多規(guī)模更小的接口是一種更好的選擇,其中每一個接口服務(wù)于一個子模塊。應(yīng)用接口分離原則降低了系統(tǒng)的耦合度,從而使系統(tǒng)更容易重構(gòu),改變并重新部署。面向?qū)ο笤O(shè)計的原則——接口分離原則面向?qū)ο笤O(shè)計的原則——單一職責(zé)原則內(nèi)容:每個類都應(yīng)該只含有單一的職責(zé),并且該職責(zé)要由這個類完全封裝起來。一個類應(yīng)該只有一個可以引起它變化的原因。每個職責(zé)都是變化的一個中軸線,如果類有多個職責(zé)或職責(zé)被封裝在了多個類里,就會導(dǎo)致系統(tǒng)的高耦合,當(dāng)系統(tǒng)發(fā)生變化時,這種設(shè)計會產(chǎn)生破壞性的后果。面向?qū)ο笤O(shè)計的原則——單一職責(zé)原則將一個登錄類拆分成4個類第四節(jié)面向?qū)ο笤O(shè)計的啟發(fā)規(guī)則11.4面向?qū)ο笤O(shè)計的啟發(fā)規(guī)則類等級深度適當(dāng)02盡量設(shè)計簡單的類03設(shè)計結(jié)果清晰易懂可以為后續(xù)的軟件開發(fā)提供便利,同時還能夠提高軟件可維護(hù)性。要做到這一點首先應(yīng)該注意對類、屬性、操作的命名,確保含義清晰一致。其次開發(fā)過程中設(shè)計新類時應(yīng)盡量遵循已有的協(xié)議,遵守消息模式(如果已經(jīng)定義)。01不能隨意創(chuàng)建派生類,對于中等規(guī)模系統(tǒng),類的等級層數(shù)應(yīng)在5-9。便于開發(fā)和管理。過于龐大的類會造成維護(hù)困難、不靈活等問題。應(yīng)盡量簡化對象之間的合作關(guān)系,為每個類分配的任務(wù)盡量簡單,控制類中包含的屬性和操作的數(shù)量。面向?qū)ο笤O(shè)計的啟發(fā)規(guī)則是人們在長期的基于面向?qū)ο笏枷氲能浖_發(fā)實踐中總結(jié)出來的經(jīng)驗,有利于提高開發(fā)人員進(jìn)行軟件設(shè)計的質(zhì)量。11.4面向?qū)ο笤O(shè)計的啟發(fā)規(guī)則使用簡單的操作05設(shè)計變動減至最小06使用簡單的協(xié)議減少消息的參數(shù)個數(shù)時降低類之間耦合程度的有效手段。一般來說參數(shù)最好在3個以內(nèi),且數(shù)據(jù)類型應(yīng)該盡量簡單。04控制操作中源程序的語句行數(shù)或語句嵌套層數(shù),從而簡化操作。設(shè)計的變動會造成資源或時間上的消耗。雖然變動是正常情況,但開發(fā)人員設(shè)計時應(yīng)盡量降低變動的概率。第五節(jié)系統(tǒng)設(shè)計11.5系統(tǒng)設(shè)計33系統(tǒng)設(shè)計關(guān)注于確定實現(xiàn)系統(tǒng)的策略和目標(biāo)系統(tǒng)的高層結(jié)構(gòu)。設(shè)計人員將問題分解為若干個子系統(tǒng),子系統(tǒng)之間通過接口聯(lián)系。將系統(tǒng)分解為子系統(tǒng)要按照一定的拓?fù)潢P(guān)系。問題域指與應(yīng)用問題直接相關(guān)的類或?qū)ο?。在面向?qū)ο笮枨蠓治鰰r已經(jīng)定義了類與對象及其關(guān)系。但隨著需求理解的加深,以及對系統(tǒng)認(rèn)識程度的逐步提高,設(shè)計人員還要對模型進(jìn)行修正和完善。設(shè)計任務(wù)管理子系統(tǒng)包括確定任務(wù),分配任務(wù),還包括權(quán)衡一致性、成本、性能等因素以及未來可擴充性。設(shè)計數(shù)據(jù)管理子系統(tǒng),需要設(shè)計數(shù)據(jù)格式以及相應(yīng)的服務(wù),設(shè)計數(shù)據(jù)格式的方法與所用的數(shù)據(jù)存儲管理模式密切相關(guān),不同數(shù)據(jù)存儲管理模式時,屬性和服務(wù)的設(shè)計方法是不同的。11.5.1系統(tǒng)分解系統(tǒng)分解即建立系統(tǒng)的體系結(jié)構(gòu),是設(shè)計比較復(fù)雜的系統(tǒng)時廣泛采用的戰(zhàn)略。把系統(tǒng)分解成若干個比較小的部分,然后再分別設(shè)計每個部分,這樣做有利于降低設(shè)計的難度,有利于軟件開發(fā)人員的分工協(xié)作,也有利于維護(hù)人員對系統(tǒng)理解和維護(hù)。系統(tǒng)的主要組成部分稱為子系統(tǒng),通常根據(jù)所提供的功能來劃分子系統(tǒng)。子系統(tǒng)既不是一個對象也不是一個功能,而是類、關(guān)聯(lián)、操作、事件和約束的集合。3411.5.1系統(tǒng)分解各個子系統(tǒng)之間應(yīng)該具有盡可能簡單、明確的接口。接口確定了交互形式和通過子系統(tǒng)邊界的信息流,但是無須規(guī)定子系統(tǒng)內(nèi)部的實現(xiàn)算法。因此,可以相對獨立地設(shè)計各個子系統(tǒng)。35典型的面向?qū)ο笤O(shè)計模型在劃分和設(shè)計子系統(tǒng)時,應(yīng)該盡量減少子系統(tǒng)彼此間的依賴性。采用面向?qū)ο蠓椒ㄔO(shè)計軟件系統(tǒng)時,面向?qū)ο笤O(shè)計模型針對與實現(xiàn)有關(guān)的因素而開展面向?qū)ο蠓治瞿P偷?個活動(主題、類與對象、結(jié)構(gòu)、屬性和服務(wù)),它包括問題域、人機交互、任務(wù)管理和數(shù)據(jù)管理等4個部分的設(shè)計,即針對這4大部分對應(yīng)于組成目標(biāo)系統(tǒng)的4個子系統(tǒng)---問題域子系統(tǒng)、人—機交互子系統(tǒng)、任務(wù)管理子系統(tǒng)和數(shù)據(jù)管理子系統(tǒng)進(jìn)行設(shè)計。11.5.1系統(tǒng)分解(1)問題域子系統(tǒng)把面向?qū)ο蠓治瞿P椭苯幽脕?,針對實現(xiàn)的要求進(jìn)行必要的增補和調(diào)整,例如,需要對類、結(jié)構(gòu)、屬性及服務(wù)進(jìn)行分解和重組。這種分解是根據(jù)一定的過程標(biāo)準(zhǔn)來做的,標(biāo)準(zhǔn)包括可重用的設(shè)計與編碼類,把問題域?qū)S妙惤M合在一起,通過增加一般類來創(chuàng)立約定,提供一個繼承性的支撐層次改善界面,提供存儲管理,以及增加低層細(xì)節(jié)等。(2)人機交互子系統(tǒng)包括有效的人機交互所需的顯示和輸入,這些類在很大程度上依賴于所用的圖形用戶界面環(huán)境,例如Windows、Delphi、C++,而且可能包括“窗口”、“菜單”、“滾動條”、“按鈕”等針對項目的特殊類。3611.5.1系統(tǒng)分解(3)任務(wù)管理子系統(tǒng)包括任務(wù)的定義、通信和協(xié)調(diào),以及硬件分配、外部系統(tǒng)及設(shè)備約定,可能包括的類有“任務(wù)”類和“任務(wù)協(xié)調(diào)”類。(4)數(shù)據(jù)管理子系統(tǒng)包括永久數(shù)據(jù)的存取,它隔離了物理的數(shù)據(jù)管理方法,無論是普通文件、帶標(biāo)記語言的普通文件、關(guān)系型數(shù)據(jù)庫、面向?qū)ο髷?shù)據(jù)庫等??赡馨ǖ念愑小按鎯Ψ?wù)”,協(xié)調(diào)每個需永久保存的對象的存儲。只有問題域子系統(tǒng)將面向?qū)ο蠓治瞿P椭苯尤∮?,其他三個子系統(tǒng)則是面向?qū)ο蠓治鲭A段未曾考慮的,全部在面向?qū)ο笤O(shè)計階段建立。3711.5.2問題域子系統(tǒng)的設(shè)計問題域子系統(tǒng)也稱問題域部分。面向?qū)ο蠓椒ㄖ械囊粋€主要目標(biāo)是保持問題域組織框架的完整性、穩(wěn)定性,這樣可提高分析、設(shè)計到實現(xiàn)的追蹤性。因為系統(tǒng)的總體框架都是建立在問題域基礎(chǔ)上的,所以,在設(shè)計與實現(xiàn)過程中細(xì)節(jié)無論做怎樣的修改,例如增加具體類、屬性或服務(wù)等,都不會影響開發(fā)結(jié)果的穩(wěn)定性。穩(wěn)定性是在類似系統(tǒng)中重用分析、設(shè)計和編程結(jié)果的關(guān)鍵因素。為更好地支持系統(tǒng)的擴充,也同樣需要穩(wěn)定性。38完整性穩(wěn)定性11.5.2問題域子系統(tǒng)的設(shè)計39

問題域子系統(tǒng)可以直接引用面向?qū)ο蠓治鏊贸龅膯栴}域精確對象模型,該模型提供了完整的框架。精確模型為設(shè)計問題域子系統(tǒng)奠定了良好的基礎(chǔ),面向?qū)ο笤O(shè)計就應(yīng)該保持該框架結(jié)構(gòu)。只要可能,就應(yīng)該保持面向?qū)ο蠓治鏊⒌膯栴}域結(jié)構(gòu)。保持結(jié)構(gòu)通常,面向?qū)ο笤O(shè)計在分析模型的基礎(chǔ)上,從實現(xiàn)角度對問題域模型做一些補充或修改,修改包括增添、合并或分解類和對象、屬性及服務(wù)、調(diào)整繼承關(guān)系等。補充修改如果問題域子系統(tǒng)相當(dāng)復(fù)雜龐大時,則應(yīng)把它進(jìn)一步分解成若干更小的子系統(tǒng)。繼續(xù)分解11.5.2問題域子系統(tǒng)的設(shè)計40為何對問題域子系統(tǒng)進(jìn)行設(shè)計對描述系統(tǒng)時遇到的變動因素和穩(wěn)定因素進(jìn)行分析,是面向?qū)ο蠓治龇椒ǖ幕A(chǔ)。系統(tǒng)需求中最容易變動的就是加工和子加工,與外界的接口同樣容易變動。數(shù)據(jù)管理中類的屬性和服務(wù)有時也在發(fā)生變化,而一些變動往往作用于一種對象。系統(tǒng)中最不容易對變動感知的穩(wěn)定方面,一般是將問題空間當(dāng)作整體看待的對象?;趩栴}域的總體結(jié)構(gòu)框架是可以保持長期穩(wěn)定的。這種穩(wěn)定性是一個問題域的分析、設(shè)計及實現(xiàn)的結(jié)果,也是可以重用的關(guān)鍵。11.5.2問題域子系統(tǒng)的設(shè)計調(diào)整需求:當(dāng)用戶需求或外部環(huán)境出現(xiàn)變化,或分析人員對問題理解出現(xiàn)偏差,導(dǎo)致建立了不能完整、準(zhǔn)確反映用戶真實需求的面向?qū)ο蠓治瞿P蜁r,需要對系統(tǒng)需求進(jìn)行修改。41如何對問題域子系統(tǒng)進(jìn)行設(shè)計在面向?qū)ο笤O(shè)計過程中,可能對面向?qū)ο蠓治鏊贸龅膯栴}域模型做的補充或修改如下:11.5.2問題域子系統(tǒng)的設(shè)計②復(fù)用已有的類:設(shè)計時應(yīng)該在面向?qū)ο蠓治龌A(chǔ)上實現(xiàn)現(xiàn)有類的復(fù)用?,F(xiàn)有類時面向?qū)ο蟪绦蛟O(shè)計語言提供的類庫中的類。因此在設(shè)計階段就要開始考慮復(fù)用。復(fù)用已有類的過程如下:42如何對問題域子系統(tǒng)進(jìn)行設(shè)計選擇復(fù)用選擇可能被復(fù)用的現(xiàn)有類,標(biāo)出現(xiàn)有類中對設(shè)計無用的屬性和服務(wù),盡量復(fù)用那些使無用屬性和服務(wù)降到最低的類。問題派生從被復(fù)用的現(xiàn)有類中派生出問題域類。標(biāo)出屬性標(biāo)出問題域類中從現(xiàn)有類繼承來的屬性和服務(wù),在問題域類中無需定義它們。修改關(guān)聯(lián)修改與問題域類相關(guān)的關(guān)聯(lián),需要時改為與被復(fù)用的現(xiàn)有類相關(guān)的關(guān)聯(lián)。11.5.2問題域子系統(tǒng)的設(shè)計43④增添一般化類以建立協(xié)議在面向?qū)ο笤O(shè)計的過程中,一些具體類往往需要一個公共的協(xié)議,即這些類都需要定義一組類似的服務(wù),還可能定義相應(yīng)的屬性。在這種情況下可以引入一個附加類,以便建立這個公共的協(xié)議。③把問題域類組合在一起通常會引入一個根類將問題域類組合在一起。實際上這是在沒有更先進(jìn)的組合機制可用時才采用的一種組合方法,此外這個根類還可以用來建立協(xié)議。如何對問題域子系統(tǒng)進(jìn)行設(shè)計11.5.2問題域子系統(tǒng)的設(shè)計調(diào)整繼承層次:當(dāng)模型的繼承模式與語言有偏差時,需要修改繼承模式。多重繼承模式單繼承模式4411.5.3人機交互子系統(tǒng)的設(shè)計人機交互系統(tǒng)強調(diào)人如何命令系統(tǒng)以及系統(tǒng)如何向用戶提交信息,人們在使用計算機的過程中直觀感受到其對系統(tǒng)的接受程度。隨著計算機的普及,非專業(yè)人員開始使用計算機,人機交互系統(tǒng)更加關(guān)鍵。4511.5.3人機交互子系統(tǒng)的設(shè)計在現(xiàn)在的大型軟件系統(tǒng)中,人機交互對象(類)通常是窗口或報告。軟件設(shè)計者至少要考慮以下3種窗口:46登錄窗口這種窗口是用戶訪問系統(tǒng)的必經(jīng)之路。設(shè)置窗口這種窗口用來幫助完成那些由信息系統(tǒng)和其用戶所進(jìn)行的業(yè)務(wù)交互所必要的功能。①創(chuàng)建或初始化系統(tǒng)運行必需的對象。②系統(tǒng)管理功能③啟動或關(guān)閉設(shè)備業(yè)務(wù)功能窗口報告是另一種常用的形式,也屬于人機交互部件。報告對象(類)可以包括絕大多數(shù)用戶需要的信息,例如,登記、車輛維修、安全事故和繳費的報告。11.5.4任務(wù)管理子系統(tǒng)的設(shè)計通過面向?qū)ο蠓治鼋⒌膭討B(tài)模型,是分析并發(fā)性的主要依據(jù)。如果兩個對象之間不存在交互,或同時接收事件,則這兩個對象本質(zhì)上是并發(fā)的。通過檢查各個對象的狀態(tài)圖及他們之間交換的事件,能夠?qū)⑷舾蓚€并發(fā)的對象歸并到一條控制線中??刂凭€是指一條遍及狀態(tài)圖集合的路徑,在這條路徑上每次只有一個對象是活動的。在計算機中用任務(wù)來實現(xiàn)控制線。47對于某些任務(wù)來說,通過劃分任務(wù)可以簡化系統(tǒng)的總體設(shè)計和編碼工作,獨立任務(wù)可將必須并發(fā)執(zhí)行的行為分離開來。這種并發(fā)行為可以在多個處理機上實現(xiàn),也可以在運行多任務(wù)操作系統(tǒng)的單處理器上進(jìn)行模擬。設(shè)計工作的一項重要內(nèi)容,就是確定哪些是必須同時動作的對象,哪些是相互排斥的對象,從而進(jìn)一步設(shè)計任務(wù)管理子系統(tǒng)。11.5.4任務(wù)管理子系統(tǒng)的設(shè)計常見的任務(wù)有事件驅(qū)動型任務(wù)、時鐘驅(qū)動型任務(wù)、優(yōu)先任務(wù)、關(guān)鍵任務(wù)、協(xié)調(diào)任務(wù)等。設(shè)計任務(wù)管理子系統(tǒng),包括確定各類任務(wù)并把任務(wù)分配給適當(dāng)?shù)挠布蜍浖?zhí)行。48確定事件驅(qū)動型任務(wù)這類任務(wù)可能主要完成通信工作,如與設(shè)備、屏幕窗口、其他任務(wù)、子系統(tǒng)、另一個處理器或其他系統(tǒng)通信。例如,專門提供數(shù)據(jù)到達(dá)信號的任務(wù),數(shù)據(jù)可能來自于終端也可能來自于緩沖區(qū)。01確定時鐘驅(qū)動型任務(wù)某些任務(wù)每隔一定時間間隔就被觸發(fā)以執(zhí)行某些處理。例如,某些設(shè)備需要周期性地獲得數(shù)據(jù);某些人—機接口、子系統(tǒng)、任務(wù)、處理器或其他系統(tǒng)也可能需要周期性的通信。02確定優(yōu)先任務(wù)優(yōu)先任務(wù)可以滿足高優(yōu)先級或低優(yōu)先級的處理需求。0311.5.4任務(wù)管理子系統(tǒng)的設(shè)計49確定關(guān)鍵任務(wù)關(guān)鍵任務(wù)是有關(guān)系統(tǒng)成功或失敗的關(guān)鍵處理,這類處理通常都有嚴(yán)格的可靠性要求。04確定協(xié)調(diào)任務(wù)當(dāng)系統(tǒng)中存在3個以上任務(wù)時,就應(yīng)該增加一個任務(wù),用它作為協(xié)調(diào)任務(wù)。05審查每個任務(wù)對任務(wù)的性質(zhì)進(jìn)行仔細(xì)審查,去掉人為的、不必要的任務(wù),使系統(tǒng)中包含的任務(wù)數(shù)保持到最少。06確定資源需求設(shè)計者在決定到底采用軟件還是硬件的時候,必須綜合權(quán)衡一致性、成本、性能等多種因素,還要考慮未來的可擴充性和可修改性。07定義任務(wù)說明任務(wù)的名稱,描述任務(wù)的功能、優(yōu)先級,包含此任務(wù)的服務(wù)、任務(wù)與其他任務(wù)的協(xié)同方式以及任務(wù)的通信方式。0811.5.5數(shù)據(jù)管理子系統(tǒng)的設(shè)計數(shù)據(jù)管理子系統(tǒng)是系統(tǒng)存儲或檢索對象的基本設(shè)施,它建立在某種數(shù)據(jù)存儲管理系統(tǒng)之上,并且隔離了數(shù)據(jù)存儲管理模式(文件、關(guān)系數(shù)據(jù)庫或面向?qū)ο髷?shù)據(jù)庫)的影響,但實現(xiàn)細(xì)節(jié)集中在數(shù)據(jù)管理子系統(tǒng)中。這樣既有利于軟件的擴充、移植和維護(hù),又簡化了軟件設(shè)計、編碼和測試的過程。設(shè)計數(shù)據(jù)管理子系統(tǒng),既需要設(shè)計數(shù)據(jù)格式又需要設(shè)計相應(yīng)的服務(wù)。5011.5.5數(shù)據(jù)管理子系統(tǒng)的設(shè)計設(shè)計數(shù)據(jù)格式的方法與所使用的數(shù)據(jù)存儲管理模式密切相關(guān),下面分別介紹每種管理模式的數(shù)據(jù)格式設(shè)計方法。51

文件系統(tǒng)設(shè)計數(shù)據(jù)格式由以下步驟組成。定義第一范式表,列出每個類的屬性表并規(guī)范為第一范式。為每個第一范式表定義一個文件。測量性能和需要的存儲容量。修改原設(shè)計的第一范式,以滿足性能和存儲需求。(1)文件系統(tǒng)01020304GOAL11.5.5數(shù)據(jù)管理子系統(tǒng)的設(shè)計(2)關(guān)系數(shù)據(jù)庫管理系統(tǒng)。

關(guān)系數(shù)據(jù)庫管理系統(tǒng)設(shè)計數(shù)據(jù)格式由以下步驟組成。定義第三范式表為每個第三范式表定義一個數(shù)據(jù)庫表。測量性能和需要的存儲容量。修改先前設(shè)計的第三范式,以滿足性能和存儲需求。5201020304GOAL11.5.5數(shù)據(jù)管理子系統(tǒng)的設(shè)計(3)面向?qū)ο髷?shù)據(jù)庫管理系統(tǒng)。面向?qū)ο髷?shù)據(jù)庫管理系統(tǒng)設(shè)計數(shù)據(jù)格式由以下步驟組成。擴展的關(guān)系數(shù)據(jù)庫途徑:使用與關(guān)系數(shù)據(jù)庫管理系統(tǒng)相同的方法。擴展的面向?qū)ο蟪绦蛟O(shè)計語言途徑:不需要規(guī)范化屬性的步驟,因為數(shù)據(jù)庫管理系統(tǒng)本身具有把對象值映射成存儲值的功能。5301020304GOAL11.5.5數(shù)據(jù)管理子系統(tǒng)的設(shè)計設(shè)計相應(yīng)的服務(wù)

如果某個類的對象需要存儲起來,則在這個類中增加一個屬性和服務(wù),用于完成存儲對象自身的工作。應(yīng)該把為此目的增加的屬性和服務(wù)作為“隱含”的屬性和服務(wù),即無須在面向?qū)ο笤O(shè)計模型的屬性和服務(wù)層中顯式地表示它們,僅需在關(guān)于類與對象的文檔中描述它們。這樣設(shè)計之后,對象將知道怎樣存儲自己。用于“存儲自己”的屬性和服務(wù),在問題域子系統(tǒng)和數(shù)據(jù)管理子系統(tǒng)之間構(gòu)成一座必要的橋梁。利用多重繼承機制,可以在某個適當(dāng)?shù)幕愔卸x這樣的屬性和服務(wù),然后,如果某個類的對象需要長期存儲,該類就從基類中繼承這樣的屬性和服務(wù)。這樣設(shè)計后,對象將知道如何存儲自己。5411.5.5數(shù)據(jù)管理子系統(tǒng)的設(shè)計數(shù)據(jù)存放設(shè)計是按照文件、關(guān)系數(shù)據(jù)庫或面向?qū)ο髷?shù)據(jù)庫來設(shè)計數(shù)據(jù)的存放。1.采用文件進(jìn)行數(shù)據(jù)管理被存儲的對象需要知道打開哪些文件,怎樣把文件定位到正確的記錄上,怎樣檢索出舊值(如果有的話),以及怎樣用現(xiàn)有值更新它們。此外,還應(yīng)該定義一個對象服務(wù)器類,并創(chuàng)建它的實例。該類提供下列服務(wù):55通知對象保存自身檢索已存儲的對象查找,讀值,創(chuàng)建并初始化對象,以便把這些對象提供給其他子系統(tǒng)使用。

11.5.5數(shù)據(jù)管理子系統(tǒng)的設(shè)計2.采用關(guān)系數(shù)據(jù)庫進(jìn)行數(shù)據(jù)管理被存儲的對象應(yīng)該知道訪問哪些數(shù)據(jù)庫表,怎樣訪問所需要的行,怎樣檢索出舊值(如果有的話),以及怎樣用現(xiàn)有值更新它們。此外,還應(yīng)該定義一個ObjectServer類,并聲明它的對象。該類提供下列服務(wù):56通知對象保存自身檢索已存儲的對象查找,讀值,創(chuàng)建并初始化對象,以便把這些對象提供給其他子系統(tǒng)使用。

11.5.5數(shù)據(jù)管理子系統(tǒng)的設(shè)計3.采用面向?qū)ο髷?shù)據(jù)庫進(jìn)行數(shù)據(jù)管理57擴展的面向?qū)ο蟪绦蛟O(shè)計語言途徑0201擴展的關(guān)系數(shù)據(jù)庫途徑方法與使用關(guān)系數(shù)據(jù)庫管理系統(tǒng)時的方法相同。

這種數(shù)據(jù)庫管理系統(tǒng)已經(jīng)給每個對象提供了“存儲自己”的行為,無須增加服務(wù)。由于有面向?qū)ο髷?shù)據(jù)庫管理系統(tǒng)負(fù)責(zé)存儲和恢復(fù)這類對象,因此,只需給需要長期保存的對象加個標(biāo)記。

11.5.5數(shù)據(jù)管理子系統(tǒng)的設(shè)計數(shù)據(jù)管理子系統(tǒng)主要實現(xiàn)以下目標(biāo):

58查找和存儲機制數(shù)據(jù)管理子系統(tǒng)為問題域中所有的持久對象封裝了查找和存儲機制。存儲問題域的持久對象對于那些在系統(tǒng)中兩次調(diào)用之間需要保存的對象,數(shù)據(jù)管理子系統(tǒng)提供了與操作平臺數(shù)據(jù)管理存儲系統(tǒng)之間的接口。這樣做使數(shù)據(jù)管理子系統(tǒng)將系統(tǒng)中的數(shù)據(jù)存儲、恢復(fù)和更新與其他部分分離開來,提高可移植性與可維護(hù)性。需要數(shù)據(jù)管理子系統(tǒng)的主要原因是針對對象模型在多種硬件、軟件和數(shù)據(jù)管理平臺上的可維護(hù)性。從理論上說對象模型的運行方式就像“即插即用”11.6對象設(shè)計對象設(shè)計在系統(tǒng)設(shè)計完成之后進(jìn)行,對象設(shè)計以問題域的對象設(shè)計為核心,其結(jié)果是一個詳細(xì)的對象模型。經(jīng)過多次反復(fù)的分析和系統(tǒng)設(shè)計之后,設(shè)計者通常會發(fā)現(xiàn)有些內(nèi)容沒有考慮到。這些沒有考慮到的內(nèi)容,會在對象設(shè)計的過程中被發(fā)現(xiàn)。這個設(shè)計過程包括標(biāo)識新的解決方案對象、調(diào)整購買到的商業(yè)化構(gòu)件、對每個子系統(tǒng)接口的精確說明和類的詳細(xì)說明。5911.6對象設(shè)計面向?qū)ο蠓治龅贸龅膶ο竽P停ǔ2⒉辉敿?xì)描述類中的服務(wù)。面向?qū)ο笤O(shè)計則是擴充、完善和細(xì)化面向?qū)ο蠓治瞿P偷倪^程,設(shè)計類中的服務(wù)、實現(xiàn)服務(wù)的算法是面向?qū)ο笤O(shè)計的重要任務(wù),還要設(shè)計類的關(guān)聯(lián)、接口形式以及設(shè)計的優(yōu)化。對象設(shè)計的內(nèi)容包括:60對象中對屬性和操作的詳細(xì)描述對象之間發(fā)送消息的協(xié)議類之間的各種關(guān)系的定義對象之間的動態(tài)交互行為11.6.1設(shè)計類中的服務(wù)1. 確定類中應(yīng)有的服務(wù)(1)從對象模型中引入服務(wù)(2)從動態(tài)模型中確定服務(wù)(3)從功能模型中確定服務(wù)2. 設(shè)計實現(xiàn)服務(wù)的方法(1)設(shè)計實現(xiàn)服務(wù)的算法(2)選擇數(shù)據(jù)結(jié)構(gòu)(3)定義內(nèi)部類和內(nèi)部操作6111.6.2設(shè)計類的關(guān)聯(lián)在對象模型中,關(guān)聯(lián)是連接不同對象的紐帶,它指定了對象相互間的訪問路徑。在面向?qū)ο笤O(shè)計過程中,設(shè)計人員必須確定實現(xiàn)關(guān)聯(lián)的具體策略。既可以選定一個全局性的策略統(tǒng)一實現(xiàn)所有關(guān)聯(lián),也可以分別為每個關(guān)聯(lián)選擇具體的實現(xiàn)策略,以與它在應(yīng)用系統(tǒng)中的使用方式相適應(yīng)。關(guān)聯(lián)的遍歷:在系統(tǒng)中用單向遍歷和雙向遍歷來使用關(guān)聯(lián)。單向遍歷的關(guān)聯(lián)可以用指針來實現(xiàn)。如果關(guān)聯(lián)的階是一元的,則可以用一個簡單指針來實現(xiàn),多元關(guān)聯(lián)則用指針集合來實現(xiàn)。62指針實現(xiàn)單向關(guān)聯(lián)11.6.2設(shè)計類的關(guān)聯(lián)63指針實現(xiàn)雙向關(guān)聯(lián)64

雙向關(guān)聯(lián)有3種方法1.只用屬性實現(xiàn)一個方向的關(guān)聯(lián),需要反向遍歷時就執(zhí)行一次正向查找。適用于兩個方向遍歷的頻度相差較大,且需要盡量減少存儲和修改的開銷。2.雙向關(guān)聯(lián)都用屬性實現(xiàn),可以實現(xiàn)快速的訪問,適用于屬性修改很少的關(guān)聯(lián)。3.用獨立關(guān)聯(lián)對象實現(xiàn),關(guān)聯(lián)對象是獨立的關(guān)聯(lián)類的實例,不屬于任何相互關(guān)聯(lián)的類。11.6.2設(shè)計類的關(guān)聯(lián)11.6.2設(shè)計類的關(guān)聯(lián)65對象實現(xiàn)關(guān)聯(lián)學(xué)校與學(xué)生教師學(xué)生課程學(xué)校學(xué)生11.6.2設(shè)計類的關(guān)聯(lián)鏈屬性的實現(xiàn)

實現(xiàn)鏈屬性的方法取決于關(guān)聯(lián)的階數(shù)。一對一關(guān)聯(lián)的鏈屬性可作為其中一個對象的屬性存儲在該對象中;對于一對多關(guān)聯(lián)來說,鏈屬性可作為“多”端對象的一個屬性;如果是多對多關(guān)聯(lián),則通常使用一個獨立的類來實現(xiàn)鏈屬性,鏈屬性不可能只與一個關(guān)聯(lián)對象有關(guān),這個類的每個實例表示一條鏈及該鏈的屬性。6611.6.3對象設(shè)計優(yōu)化1.確定優(yōu)先級

系統(tǒng)的各項質(zhì)量指標(biāo)并不是同等重要的,設(shè)計人員必須確定各項質(zhì)量指標(biāo)的相對重要性(即確定優(yōu)先級),以便在優(yōu)化設(shè)計時制定折衷方案。2.提高效率的幾項技術(shù)(1)增加冗余關(guān)聯(lián)以提高訪問效率

在面向?qū)ο蠓治鲞^程中,應(yīng)該避免在對象模型中存在冗余的關(guān)聯(lián),因為冗余關(guān)聯(lián)不僅沒有增添關(guān)于問題域的任何信息,反而會降低模型的清晰程度。但是,在面向?qū)ο笤O(shè)計過程中,當(dāng)考慮用戶的訪問模式,及不同類型訪問之間彼此的依賴關(guān)系時,就會發(fā)現(xiàn),分析階段確定的關(guān)聯(lián)可能并沒有構(gòu)成效率最高的訪問路徑。為了提高訪問效率,需要適當(dāng)?shù)卦黾右恍┤哂嚓P(guān)聯(lián)。6711.6.3對象設(shè)計優(yōu)化如圖所示是面向?qū)ο蠓治瞿P偷囊徊糠?,公司類中的find_skill方法返回具有指定技能的雇員集合。

如果只有極少數(shù)對象滿足查詢條件,查詢命中率會很低(即便使用哈希表),這是提高查詢效率的方法是給需要經(jīng)常查詢的對象建立索引。例如,若要查詢精通某種編程語言,可以添加額外限定關(guān)聯(lián)“精通編程語言”。利用適當(dāng)?shù)娜哂嚓P(guān)聯(lián),可以立即查到所需結(jié)果。當(dāng)然,這會帶來占用空間的增加。6811.6.3對象設(shè)計優(yōu)化(2)調(diào)整查詢次序

改進(jìn)了對象模型的結(jié)構(gòu),從而優(yōu)化了常用的遍歷之后,接下來就應(yīng)該優(yōu)化算法了。優(yōu)化算法的一個途徑是盡量縮小查找范圍。(3)保留派生屬性

通過某種運算而從其他數(shù)據(jù)派生出來的數(shù)據(jù),是一種冗余數(shù)據(jù)。通常把這類數(shù)據(jù)“存儲”(或稱為“隱藏”)在計算它的表達(dá)式中。如果希望避免重復(fù)計算復(fù)雜表達(dá)式所帶來的開銷,可以把這類冗余數(shù)據(jù)作為派生屬性保存起來。6901020304GOAL11.6.3對象設(shè)計優(yōu)化3.調(diào)整繼承關(guān)系

在面向?qū)ο笤O(shè)計過程中,建立良好的繼承關(guān)系是優(yōu)化設(shè)計的一項重要內(nèi)容。繼承關(guān)系能夠為一個類族定義一個協(xié)議,并能在類之間實現(xiàn)代碼共享以減少冗余。一個基類和它的子孫類在一起稱為一個類繼承。在面向?qū)ο笤O(shè)計中,建立良好的類繼承是非常重要的。利用類繼承能夠把若干個類組織成一個邏輯結(jié)構(gòu)。(1)抽象與具體:設(shè)計類繼承的通常做法是:首先創(chuàng)建一些滿足具體用途的類,得出一些通用類之后,再進(jìn)行歸納和派生出具體類。進(jìn)行了進(jìn)一步具體化工作之后,應(yīng)當(dāng)繼續(xù)歸納,持續(xù)演化(2)為提高繼承程度而修改類定義:如果在一組相同的類中存在公共屬性和公共行為,則可以將這些公共的屬性和行為抽取出來存放在一個共同的祖先類中,由其子類繼承。7011.6.3對象設(shè)計優(yōu)化71如圖所示的例子中展示了設(shè)計類繼承具體——抽象——具體的過程,其中也有通過修改類定義來提高繼承度的步驟如(a)(b)圖所示。11.6.3對象設(shè)計優(yōu)化(3)利用委托實現(xiàn)行為共享:只有子類確實是父類的一種特殊形式時,利用繼承機制實現(xiàn)行為共享才是有意義的。如圖表示了用表實現(xiàn)隊列的兩種方法:繼承和委托,如果只想將繼承作為實現(xiàn)操作共享的一種手段,可以利用委托:將一類對象作為另一對象的屬性,從而建立組合關(guān)系。委托的方法會更為安全。72軟件設(shè)計模式

所謂模式,就是指解決某一類相似問題的方法論。某個模式描述了一個在我們的日常生活中不斷出現(xiàn)的問題,然后描述了該問題的解決方案的核心。在軟件系統(tǒng)的設(shè)計領(lǐng)域中,也出現(xiàn)了很多設(shè)計模式。如圖,每種設(shè)計模式都包含4個要素模式名稱相當(dāng)于模式的助記符問題描述了模式的使用場景,即模式可以解決的某種設(shè)計問題。解決方案描述了針對特定的設(shè)計問題,可以采用怎樣的設(shè)計方法,包括設(shè)計的組成成分、各

溫馨提示

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

最新文檔

評論

0/150

提交評論