軟件工程技術(shù)與應(yīng)用案例面向?qū)ο蟮脑O(shè)計(jì)思想資料_第1頁
軟件工程技術(shù)與應(yīng)用案例面向?qū)ο蟮脑O(shè)計(jì)思想資料_第2頁
軟件工程技術(shù)與應(yīng)用案例面向?qū)ο蟮脑O(shè)計(jì)思想資料_第3頁
軟件工程技術(shù)與應(yīng)用案例面向?qū)ο蟮脑O(shè)計(jì)思想資料_第4頁
軟件工程技術(shù)與應(yīng)用案例面向?qū)ο蟮脑O(shè)計(jì)思想資料_第5頁
已閱讀5頁,還剩64頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、軟件工程技術(shù)與應(yīng)用案例面向?qū)ο蟮脑O(shè)計(jì)思想類圖類是面向?qū)ο蠹夹g(shù)的基礎(chǔ),是面向?qū)ο蟪绦蛟O(shè)計(jì)的基本單元。類圖描述軟件系統(tǒng)的靜態(tài)結(jié)構(gòu)。類圖不僅定義了系統(tǒng)中的類,表示了類與類之間的關(guān)系(關(guān)聯(lián)、依賴、繼承),而且也描述了類的內(nèi)部結(jié)構(gòu)(類的屬性和操作)。類圖描述的是系統(tǒng)的一種穩(wěn)定的靜態(tài)關(guān)系,在系統(tǒng)的整個(gè)生命期內(nèi)都是有效的。UML參考書:Grady Booch, James Rumbaugh, Ivar Jacobson著,The Unified Modeling Language User Guide,機(jī)械工業(yè)出版社。類圖類可以進(jìn)一步劃分為實(shí)體類、邊界類和控制類。實(shí)體類保存系統(tǒng)中的信息。一個(gè)實(shí)體類的對象對應(yīng)

2、關(guān)系數(shù)據(jù)庫中的一條記錄。邊界類是系統(tǒng)與用戶的接口。用戶通過邊界類與系統(tǒng)進(jìn)行交互??刂祁悈f(xié)調(diào)和控制其他類的對象以實(shí)現(xiàn)用例規(guī)定的行為,它封裝了實(shí)現(xiàn)用例行為所需要的事件流。在系統(tǒng)分析階段,主要考慮的是實(shí)體類。在設(shè)計(jì)和實(shí)現(xiàn)階段,除了對實(shí)體類進(jìn)一步細(xì)化之外,還要著重考慮邊界類和控制類。UML中類的基本表示方法類的封裝性及其表示封裝性表現(xiàn)為類成員的可見性??梢娦苑譃楣_的(public)、受保護(hù)的(protected)和私有的(private)三種。在UML中分別用“+”,“#”和“-”表示?!?”表示完全公開;“#”表示對同一個(gè)包中的類公開,對不同包中的類隱藏;“-”表示對外完全隱藏,僅僅對定義該成員的

3、類的內(nèi)部可見。封裝性的表示可見性也被分為:公開的,受保護(hù)的,默認(rèn)的,私有的四類。其中“受保護(hù)的”對同一個(gè)包的其它類及不在同一個(gè)包的子類可見;“默認(rèn)的”對同一個(gè)包的其它類可見。類之間的關(guān)系表示類之間的關(guān)系可以分為繼承和關(guān)聯(lián),關(guān)聯(lián)可以進(jìn)一步分為組合、聚集和依賴。UML中繼承關(guān)系表示如下:類之間關(guān)聯(lián)關(guān)系的表示關(guān)聯(lián)用于泛指兩個(gè)類之間概念上的聯(lián)系。例如公司類和雇員類之間就存在聯(lián)系,雇員為公司工作,公司雇傭雇員。在關(guān)聯(lián)關(guān)系的兩端,可以標(biāo)注關(guān)聯(lián)約束,還可以標(biāo)注關(guān)聯(lián)在數(shù)量上的對應(yīng)關(guān)系(關(guān)聯(lián)的多重性)。上圖說明Employee是因?yàn)楣ぷ鞫cCompany關(guān)聯(lián),任何一個(gè)雇員只為一個(gè)公司工作;Company因?yàn)楣蛡?/p>

4、而與Employee關(guān)聯(lián),一個(gè)公司可以雇傭一個(gè)以上(1.*)的雇員。關(guān)聯(lián)關(guān)系的細(xì)分關(guān)聯(lián)關(guān)系可以進(jìn)一步劃分為組合、聚集和依賴。組合關(guān)系是一種緊密而穩(wěn)定的關(guān)聯(lián)關(guān)系。如公司與部門是一種組合關(guān)聯(lián)關(guān)系,因?yàn)槿绻麤]有公司,部門也將不存在。有時(shí)組合關(guān)系也用于描述一個(gè)類的對象包含另一個(gè)類的確定個(gè)數(shù)的對象作為成員,例如:一輛汽車包含一臺發(fā)動(dòng)機(jī)、四個(gè)輪胎,則汽車類與發(fā)動(dòng)機(jī)類和輪胎類的關(guān)系是組合關(guān)聯(lián)關(guān)系。關(guān)聯(lián)關(guān)系的細(xì)分聚集(聚合)關(guān)系是一種較為松散的關(guān)系。例如:雇員與公司和部門之間的關(guān)系不是一種穩(wěn)定的關(guān)系,因?yàn)榧词构净蛘卟块T不在了,雇員仍然存在,而且公司中雇員的人數(shù)不是固定的,雇員可以在部門之間或者公司之間流動(dòng)。

5、所以雇員與公司和部門之間的關(guān)系是聚合關(guān)系。在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,聚合關(guān)系表現(xiàn)為一個(gè)類中聲明另一個(gè)類的集合變量作為類成員。組合與聚合關(guān)系的表示關(guān)聯(lián)關(guān)系的細(xì)分依賴關(guān)系是一種更為松散的關(guān)系。例如汽車和加油站的關(guān)系就是依賴關(guān)系。汽車類依賴加油站類,只有汽車加油時(shí)才會(huì)與加油站發(fā)生關(guān)聯(lián),而且在哪一個(gè)加油站加油也是不固定的。依賴關(guān)系中,被依賴的類的對象是依賴類的操作所要使用的一種工具。在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,依賴關(guān)系表現(xiàn)為依賴類的某個(gè)方法或者函數(shù)的參數(shù)類型是被依賴類的類型。 依賴關(guān)系的表示對象圖對象是類的實(shí)例,對象圖描述在某一瞬間系統(tǒng)中存在的對象及對象間的關(guān)系。UML中對象的表示對象圖對象圖示例設(shè)計(jì)過程中

6、的權(quán)衡正確性資源結(jié)構(gòu)工程用法解的完全性和正確性;安全性;容錯(cuò)性處理能力;保密性和魯棒性。執(zhí)行效率:時(shí)間復(fù)雜度、消息數(shù)、帶寬要求等;空間消耗:包括存儲單元、對象、線程、過程、通信通道。處理器等的使用情況;增加的資源,一些隨選信息;動(dòng)態(tài)策略,包括公正性、平衡性、穩(wěn)定性等。模塊性:封裝、耦合、獨(dú)立性;可延展性:包括子類、可協(xié)調(diào)性、可維護(hù)性等;可重用性、開放性、可組合性。便攜性、可插入性;前后依賴性;互用性;等等。可理解性、簡單、高雅;執(zhí)行中的容錯(cuò)性;與其他軟件的共存性;系統(tǒng)可維護(hù)性;對開發(fā)過程的影響;對開發(fā)隊(duì)伍結(jié)構(gòu)及動(dòng)態(tài)特性的影響;對用戶參與的影響; 對生產(chǎn)力、時(shí)間安排、成本的影響;等等。使用規(guī)范;

7、人為因素,如可學(xué)習(xí)性、恢復(fù)能力等;對不斷變化的環(huán)境的適應(yīng)性;藝術(shù)性;對醫(yī)學(xué)和環(huán)境的影響;對社會(huì)、經(jīng)濟(jì)、政治的影響;等等。設(shè)計(jì)過程中,針對設(shè)計(jì)目標(biāo)約束沖突給出的非功能性需求判斷準(zhǔn)則。設(shè)計(jì)模式核心思想核心思想原則:重點(diǎn)解決軟件系統(tǒng)的可維護(hù)性和復(fù)用性問題。普遍的問題基本的問題重現(xiàn)的問題可維護(hù)性可維護(hù)性好的系統(tǒng)應(yīng)有的性質(zhì):可擴(kuò)展性容易加入新的性能靈活性代碼修改盡量不波及其他模塊可插入性容易抽出和加入類傳統(tǒng)復(fù)用傳統(tǒng)的復(fù)用代碼的剪貼復(fù)用算法的復(fù)用數(shù)據(jù)結(jié)構(gòu)的復(fù)用程序程序程序程序代碼/算法/數(shù)據(jù)結(jié)構(gòu)可維護(hù)性和復(fù)用的矛盾傳統(tǒng)的復(fù)用的風(fēng)險(xiǎn):影響可擴(kuò)展性過于僵硬 修改多個(gè)軟件成分中的復(fù)用源代碼時(shí),需要獨(dú)立地修改檢測

8、每一拷貝。很難在一個(gè)軟件系統(tǒng)里加入一個(gè)新功能。影響靈活性過于脆弱 對一個(gè)地方的修改會(huì)導(dǎo)致另一個(gè)地方發(fā)生故障,難以跟蹤代碼的變異和使用。 模塊 A 和 B 同時(shí)使用模塊 C 的功能。那么當(dāng) A 需要 C 增加一個(gè)新的行為的時(shí)候, B 有可能不需要、甚至不允許 C 增加這個(gè)新行為。影響可插入性粘度過高 代碼、函數(shù)、模塊對系統(tǒng)相互依賴,改動(dòng)意味著破壞原始意圖和框架面向?qū)ο蟮目删S護(hù)性復(fù)用面向?qū)ο笤O(shè)計(jì)的重要語言特性數(shù)據(jù)抽象繼承封裝多態(tài)性實(shí)現(xiàn)了概念和定義的復(fù)用,提高系統(tǒng)的可維護(hù)性?;靖拍罱涌凇㈩惤涌冢ń涌冢╥nterface)interface):對象的操作特征的集合。操作指對象可以處理的所有請求操作的

9、特征包括操作的名稱、參數(shù)和返回值類:聲明對象的類型(Type)包括: 變量及其類型的聲明方法及其參數(shù)的類型聲明方法的返還類型聲明方法的實(shí)現(xiàn)等基本概念接口、類接口和類的區(qū)別:接口只描述方法的特征,而不給出方法的實(shí)現(xiàn),接口把方法的特征和實(shí)現(xiàn)分割開來。類不僅給出方法的特征,面且給出方法的實(shí)現(xiàn)。接口常常代表一個(gè)角色(接口常常代表一個(gè)角色(role) role) ,它包裝與該角色相關(guān)的操作,它包裝與該角色相關(guān)的操作和屬性,而實(shí)現(xiàn)這個(gè)接口的類使是扮演這個(gè)角色的演員。一個(gè)和屬性,而實(shí)現(xiàn)這個(gè)接口的類使是扮演這個(gè)角色的演員。一個(gè)角色可以由不同的演員來演而不同的演員之間除了扮演一個(gè)角色可以由不同的演員來演而不同的

10、演員之間除了扮演一個(gè)共同的角色之外,并不要求有任何其他的共同之處。共同的角色之外,并不要求有任何其他的共同之處?;靖拍罱涌?、類類、類型和對象之間的區(qū)別和聯(lián)系:類(class)定義了一類對象的共性實(shí)現(xiàn),即對象的內(nèi)部數(shù)據(jù)與其操作的實(shí)現(xiàn)。類型(type)只涉及接口(即對象能作出反應(yīng)的請求的集合)。類定義了一類對象可執(zhí)行的操作,也定義了對象的類型。一個(gè)對象是一個(gè)類的實(shí)例,這個(gè)對象支持該類定義的接口?;靖拍罱涌凇㈩愅环N類型的對象共享接口部分 同一類型接口的對象可以有不同實(shí)現(xiàn),即不同類的對象可以有相同的類型。一個(gè)角色可以由不同一個(gè)角色可以由不同的演員來演的演員來演一個(gè)對象可以有多種類型類型。一個(gè)類可

11、以同時(shí)實(shí)現(xiàn)幾個(gè)接口。一個(gè)演員可以演不同的角色一個(gè)演員可以演不同的角色子類型包含(繼承)了超類型的接口接口是實(shí)現(xiàn)構(gòu)件可插入性的關(guān)鍵接口是實(shí)現(xiàn)構(gòu)件可插入性的關(guān)鍵?;靖拍畛橄箢惓橄箢悶樽宇惗x通用接口定義通用接口。接口的實(shí)現(xiàn)由子類定義的操作完成??梢杂袑?shí)例變量,以及一個(gè)或多個(gè)構(gòu)造子(函數(shù)、方法)。構(gòu)造子不能被調(diào)用來創(chuàng)建實(shí)例,抽象類不可以實(shí)例化抽象類不可以實(shí)例化。構(gòu)造子可以被子類調(diào)用,所有子類都可以有共有的實(shí)現(xiàn)抽象類通常代表一個(gè)抽象概念提供一個(gè)繼承的出發(fā)點(diǎn)。由于抽象類不可以實(shí)例化,因此一個(gè)抽象類一定是用來繼承的。基本概念抽象類和接口抽象類和接口的區(qū)別抽象類允許實(shí)現(xiàn)所有派生類公共的狀態(tài)和行為。是一種相

12、關(guān)相關(guān)實(shí)體聚集的方式。關(guān)注如何設(shè)計(jì)實(shí)現(xiàn)并封裝這些具體實(shí)體(規(guī)定派生類的接口并提供公共的實(shí)現(xiàn)),而又可以避免與某些特定于實(shí)現(xiàn)的細(xì)節(jié)相耦合(抽象類的抽象部分)。接口關(guān)注實(shí)現(xiàn)類的對象的使用使用。實(shí)現(xiàn)類的對象為了完成其功能應(yīng)該有什么樣的接口。沒有實(shí)例變量和構(gòu)造子(函數(shù))基本概念抽象類的作用用較少的冗余實(shí)現(xiàn)一組具有公共狀態(tài)或行為的對象設(shè)計(jì)一個(gè)接口找出已定義對象的公共狀態(tài)或行為用一個(gè)抽象類實(shí)現(xiàn)該接口從這個(gè)抽象類派生具有公共狀態(tài)或行為的對象優(yōu)點(diǎn):使實(shí)現(xiàn)類更簡單,更容易維護(hù)?;靖拍畛橄箢惡途唧w類具體類非抽象的類稱為具體類,實(shí)現(xiàn)由自身完成。具體類可以實(shí)例化,給出了一個(gè)有邏輯實(shí)現(xiàn)的對象模版。具體類不是用來繼承的

13、。(可以繼承)基本概念抽象類和具體類假設(shè)蛋代表抽象,而雞代表具假設(shè)蛋代表抽象,而雞代表具體。蛋決定雞的性狀,雞是蛋體。蛋決定雞的性狀,雞是蛋的的“實(shí)現(xiàn)實(shí)現(xiàn)”,蛋的類型決定了,蛋的類型決定了雞的類型。從這個(gè)角度來講,雞的類型。從這個(gè)角度來講,先有蛋,后有雞。先有蛋,后有雞?;靖拍罾^承類繼承和接口繼承:繼承:一個(gè)類是另一個(gè)類的子類類繼承(實(shí)現(xiàn)繼承) :根據(jù)某個(gè)原有對象的實(shí)現(xiàn)來定義另一個(gè)新的對象的實(shí)現(xiàn)。從已有類繼承必要的需求。共享編碼和表示方法。共享編碼和表示方法。接口繼承:是一個(gè)類實(shí)現(xiàn)了另一個(gè)類的一個(gè)接口可用一個(gè)對象替換另一個(gè)對象可用一個(gè)對象替換另一個(gè)對象。共享類型。共享類型。只繼承抽象類。只繼

14、承抽象類。基本概念動(dòng)態(tài)插入問題:如何實(shí)現(xiàn)具體類的動(dòng)態(tài)插入?如:加入一個(gè)新的類,與現(xiàn)有具體類的行為有不同的實(shí)現(xiàn),希望系統(tǒng)能夠使用這個(gè)新類。1.使用超類繼承:在類結(jié)構(gòu)中增加一個(gè)超類,聲明出子類要提供的行為為這個(gè)抽象超類提供多個(gè)具體子類,以不同的方法實(shí)現(xiàn)了超類所聲明的行為??蛻舳藙?dòng)態(tài)地決定使用哪一個(gè)具體子類?;靖拍顒?dòng)態(tài)插入單繼承的語言,一個(gè)類只能有一個(gè)超類。當(dāng)具體類已經(jīng)有一個(gè)超類,則不可能加上新的超類。加新的超類到已有的超類上面,形成超超類?;蛘呃^續(xù)向上移動(dòng),直到類等級結(jié)構(gòu)的最頂端。具體類超類新超超類新具體類。與現(xiàn)有具體類行為有不同的實(shí)現(xiàn)基本概念動(dòng)態(tài)插入2.使用接口概念在一個(gè)類等級結(jié)構(gòu)中的任何類都

15、是實(shí)現(xiàn)一個(gè)接口這個(gè)接口會(huì)影響到此類的所有子類,但是不會(huì)影響到此類的任何超類。此類將實(shí)現(xiàn)這個(gè)接口所規(guī)定的方法,而其子類則可以從此類自動(dòng)繼承到這些方法,子類可以選擇置換其中的某一些子類可以選擇置換其中的某一些方法或所有方法方法或所有方法。這時(shí)候,子類就具有了可插入性。接口類具體類新具體類基本概念動(dòng)態(tài)插入關(guān)聯(lián)的可插入性關(guān)聯(lián):一個(gè)對象知道其他對象針對接口的關(guān)聯(lián):不是針對具體類任何實(shí)現(xiàn)這個(gè)接口的類都可以滿足關(guān)聯(lián)要求??梢詣?dòng)態(tài)地動(dòng)態(tài)地將關(guān)聯(lián)從一個(gè)具體類轉(zhuǎn)換到另一個(gè)具體類基本概念動(dòng)態(tài)插入調(diào)用的可插入性-對象調(diào)用其他對象的方法。針對接口的調(diào)用:不是針對具體類,而是一個(gè)接口。任何實(shí)現(xiàn)這個(gè)接口的類都可以被當(dāng)前對象

16、調(diào)用??梢詣?dòng)態(tài)地動(dòng)態(tài)地決定當(dāng)前對象調(diào)用哪一個(gè)具體類的實(shí)例接口提供了方法調(diào)用上的可插入性?;靖拍罱涌谲浖到y(tǒng)的規(guī)模越大,生命周期越長,接口的重要性就越大。接口使得軟件系統(tǒng)在靈活性、可擴(kuò)展性和可插入性上得到保證?;靖拍罨靖拍疃鄳B(tài)性(多形性)多態(tài)性(多形性) 多態(tài):相同接口具有不同的實(shí)現(xiàn),對象的行為具有多種形態(tài)的特性。簡化了客戶定義。使客戶對象除了支持特定接口外,不做其他設(shè)定。相同接口的對象具有了可替換性。復(fù)用對象的實(shí)現(xiàn)和應(yīng)用基本概念面向?qū)ο蟮膬煞N基本復(fù)用機(jī)制繼承繼承與對象合成對象合成繼承:n根據(jù)一個(gè)類定義另一個(gè)類。n在編譯時(shí)靜態(tài)定義,直接被程序設(shè)計(jì)語言支持,使用直接。n便于修改正在復(fù)用的實(shí)現(xiàn)

17、。 繼承是一種白盒復(fù)用繼承是一種白盒復(fù)用“白盒”指可見性,通過繼承,父類的內(nèi)部可被子類所見。基本概念面向?qū)ο蟮膬煞N基本復(fù)用機(jī)制繼承與對象合成繼承產(chǎn)生的問題:1)實(shí)際運(yùn)行時(shí)不能改變在編譯時(shí)所定義繼承的執(zhí)行過程2)子類依賴父類:繼承把父類執(zhí)行過程的細(xì)節(jié)暴露給子類,破壞了封裝。子類的物理表示、執(zhí)行過程與父類有密切關(guān)系父類執(zhí)行過程的任何改變都會(huì)強(qiáng)迫子類發(fā)生改變。這種依賴性限制了適應(yīng)性,最終也限制了可復(fù)用性?;靖拍蠲嫦?qū)ο蟮膬煞N基本復(fù)用機(jī)制繼承與對象合成對象合成:在一個(gè)對象中包含對其他對象的引用對象合成:在一個(gè)對象中包含對其他對象的引用引用是一種動(dòng)態(tài)連接:引用是一種動(dòng)態(tài)連接: 在運(yùn)行時(shí)將請求連接到一個(gè)

18、對象和該對象的一個(gè)操作上。意味著請求不需指定特定的實(shí)現(xiàn)。任何有適當(dāng)接意味著請求不需指定特定的實(shí)現(xiàn)。任何有適當(dāng)接口的對象都可以接收請求。相同接口的對象可以互口的對象都可以接收請求。相同接口的對象可以互相替換。相替換。對象合成:對象合成:通過組合對象得到新的更復(fù)雜的功能。但要求被組合對象有定義良好的接口。特點(diǎn):對象合成在運(yùn)行時(shí)動(dòng)態(tài)地通過對象請求訪問其他對象。組合要求對象考慮相互的接口,精心設(shè)計(jì)接口。任何一個(gè)對象都可在運(yùn)行時(shí)被另一個(gè)有相同的類型對象替代。對象組合是一種黑盒復(fù)用對象組合是一種黑盒復(fù)用對象的內(nèi)部細(xì)節(jié)不可見,對象像一個(gè)黑盒。 基本概念面向?qū)ο蟮膬煞N基本復(fù)用機(jī)制繼承與對象合成基本概念面向?qū)ο?/p>

19、的兩種基本復(fù)用機(jī)制繼承與對象合成對象合成的優(yōu)點(diǎn):對象合成的優(yōu)點(diǎn):對象只能由其接口訪問,不破壞封裝。對象的實(shí)現(xiàn)根據(jù)接口編寫,依賴性減少。有助于類的封裝,使每個(gè)類集中于一個(gè)任務(wù)。容易組合運(yùn)行時(shí)的行為,改變行為組合的方式。對象合成的缺點(diǎn):對象合成的缺點(diǎn):系統(tǒng)的行為不是在本類中定義,而依賴于對象的相互關(guān)系。更難理解、運(yùn)行效率降低。采用對象合成優(yōu)于采用類繼承(合成采用對象合成優(yōu)于采用類繼承(合成/ /聚合復(fù)用原則)。聚合復(fù)用原則)。委托(delegation):對象合成的特例。一個(gè)控制請求的執(zhí)行:繼承方法:繼承方法:子類將請求交給父類執(zhí)行。委托方法:委托方法:接收操作的對象把操作委托給它的代理對象。接收

20、操作的對象把自己本身也傳給委托者,以使被委托操作指向接收對象?;靖拍蠲嫦?qū)ο蟮膬煞N基本復(fù)用機(jī)制繼承與對象合成基本概念對象合成 例例 窗口類的實(shí)現(xiàn)窗口類的實(shí)現(xiàn)繼承方法:繼承方法:使窗口類成為矩形的子類,繼承其操作。窗口類將請求交給矩形父類矩形父類執(zhí)行執(zhí)行代理方法:代理方法:產(chǎn)生一個(gè)矩形實(shí)例,并代理復(fù)用矩形的行為窗口將請求傳給此矩形實(shí)例把操作委托給矩形實(shí)例把自己本身也傳給矩形實(shí)例,以使被委托操作指向接收對象讓窗口好像是一個(gè)矩形在運(yùn)行中用圓實(shí)例代替矩形實(shí)例就適用圓形窗口在運(yùn)行中用圓實(shí)例代替矩形實(shí)例就適用圓形窗口窗口矩形窗口矩形基本概念對象合成窗口類對矩型類實(shí)例的引用參數(shù)化類型。定義類時(shí)不規(guī)定它所用

21、的數(shù)據(jù)元素類型。這些類型在使用時(shí)作為參數(shù)提供。 例:列表類將元素的類型提供給列表的類型參數(shù),實(shí)現(xiàn)時(shí)為列表類建立每種元素的可定制形式。 整數(shù)列表把類型“整數(shù)”作為參數(shù)。 字符串列表類型“字符串” 作為參數(shù)?;靖拍顓?shù)化類型(泛型)設(shè)計(jì)模式面向?qū)ο蟮目删S護(hù)性復(fù)用設(shè)計(jì)模式:更高的層次上的可復(fù)用性(宏觀邏輯的抽象層次復(fù)用)可以幫助解決以下問題:1合適的對象(類)的尋找2對象(類)粒度的確定:如何分解粒度合適的類3. 對象(類)接口的確定:如何定義類接口和繼承體系4對象(類)實(shí)現(xiàn)的確定5. 復(fù)用機(jī)制的處理:如何建立類(類)的關(guān)鍵聯(lián)系6運(yùn)行結(jié)構(gòu)和編譯結(jié)構(gòu)的處理7設(shè)計(jì)中變動(dòng)的處理設(shè)計(jì)模式面向?qū)ο蟮目删S護(hù)性

22、復(fù)用1尋找合適的對象系統(tǒng)分解為對象的困難:需要兼顧多種矛盾因素:封裝、粒度、依賴關(guān)系、靈活性、性能、系統(tǒng)演化、可重用性。難以確定多種分解對象方法的優(yōu)劣。一些方法:(1)問題陳述找出名詞和動(dòng)詞構(gòu)造相應(yīng)的對象和操作;(2)集中考慮系統(tǒng)中的協(xié)作和職責(zé);(3)構(gòu)造現(xiàn)實(shí)世界模型,把分析得到的對象轉(zhuǎn)換到設(shè)計(jì)中。設(shè)計(jì)的結(jié)果并不能完全來自于現(xiàn)實(shí)世界通常是:現(xiàn)實(shí)世界的類+非現(xiàn)實(shí)世界的類(如數(shù)組、抽象類等)。設(shè)計(jì)模式可以幫助確定設(shè)計(jì)抽象的對象。(如strategy把算法抽象成類)設(shè)計(jì)模式面向?qū)ο蟮目删S護(hù)性復(fù)用 2確定對象的粒度 設(shè)計(jì)模式幫助按照需要確定對象的大小。 Faade模式:用一個(gè)對象描述完整的子系統(tǒng) Fl

23、yweight模式:支持大量最小粒度的對象設(shè)計(jì)模式面向?qū)ο蟮目删S護(hù)性復(fù)用3.確定對象的接口設(shè)計(jì)模式幫助確定:(1)接口定義。識別關(guān)鍵元素和由接口取得的數(shù)據(jù)的類型。(2)規(guī)定接口間的關(guān)系和接口限制。設(shè)計(jì)模式面向?qū)ο蟮目删S護(hù)性復(fù)用4確定對象實(shí)現(xiàn)對象的實(shí)現(xiàn)由它的類來定義。a.類的表示抽象類/具體類b.類的實(shí)現(xiàn)類繼承/接口繼承設(shè)計(jì)模式面向?qū)ο蟮目删S護(hù)性復(fù)用5.處理復(fù)用機(jī)制理想情況下,應(yīng)該只通過對象合成來得到所需的功能。但限于可用部件的集合不夠豐富。繼承和對象合成可以互相補(bǔ)充。設(shè)計(jì)模式面向?qū)ο蟮目删S護(hù)性復(fù)用三種復(fù)用技術(shù)的特點(diǎn):繼承繼承允許提供操作的缺省實(shí)現(xiàn)并允許子類覆蓋父類操作。對象合成對象合成允許運(yùn)行

24、時(shí)改變被組合的行為,但間接完成,效率不高。參數(shù)化類型參數(shù)化類型允許改變一個(gè)類可用的類型。但不能在運(yùn)行中改變(如:泛型是在編譯時(shí)確定的)。哪種方法最好取決于設(shè)計(jì)和實(shí)現(xiàn)約束。 6運(yùn)行結(jié)構(gòu)和編譯結(jié)構(gòu)編譯結(jié)構(gòu)(代碼結(jié)構(gòu))編譯時(shí)即被凍結(jié),由具有固定繼承關(guān)系的類組成。編譯結(jié)構(gòu)代碼不能顯示出一個(gè)系統(tǒng)工作的全部情況。運(yùn)行結(jié)構(gòu)由迅速變化的通信對象網(wǎng)組成。系統(tǒng)運(yùn)行結(jié)構(gòu)的優(yōu)劣主要由設(shè)計(jì)者設(shè)計(jì)的對象及其類型之間的關(guān)系來決定,而不是由語言來決定的。設(shè)計(jì)模式面向?qū)ο蟮目删S護(hù)性復(fù)用例:運(yùn)行結(jié)構(gòu)和編譯結(jié)構(gòu)聚集(aggregation)和關(guān)聯(lián)(acquaintance)關(guān)系。聚集:聚集:對象包含另一個(gè)對象或?qū)α硪粚ο筘?fù)責(zé),或?yàn)?/p>

25、另一個(gè)對象的一部分,具有相同生命期。關(guān)聯(lián):關(guān)聯(lián):一個(gè)對象只知道另一個(gè)對象。關(guān)聯(lián)對象之間可互相請求操作,但不對對方負(fù)責(zé)。是比聚集弱的聯(lián)系,提供了對象間的松耦合。聚集和關(guān)聯(lián)的運(yùn)行結(jié)構(gòu)不同運(yùn)行結(jié)構(gòu)不同 聚集和關(guān)聯(lián)常用相同的方法編譯實(shí)現(xiàn):聚集和關(guān)聯(lián)常用相同的方法編譯實(shí)現(xiàn):在Smalltalk中:都是其他對象的引用。聚集和關(guān)聯(lián)沒有區(qū)別。在C+中:都用指針和引用來實(shí)現(xiàn)。 聚集和關(guān)聯(lián)的編譯結(jié)構(gòu)相同編譯結(jié)構(gòu)相同由此可見:關(guān)聯(lián)和聚集關(guān)系主要由設(shè)計(jì)含義決定,而不是由語言機(jī)制決定。在編譯結(jié)構(gòu)中,關(guān)聯(lián)和聚集之間的差別小,在源代碼中難以辨認(rèn)。差別:聚集關(guān)系往往會(huì)比關(guān)聯(lián)關(guān)系少而更穩(wěn)定。關(guān)聯(lián)關(guān)系出現(xiàn)頻繁,有時(shí)只在一個(gè)操作持

26、續(xù)的時(shí)間中存在。動(dòng)態(tài)性更強(qiáng)。設(shè)計(jì)模式面向?qū)ο蟮目删S護(hù)性復(fù)用 7通過良好的設(shè)計(jì)支持變化達(dá)到最大復(fù)用程度的關(guān)鍵:在設(shè)計(jì)時(shí)預(yù)先考慮生命期內(nèi)新需求和現(xiàn)有需求的變化。包括:類的重定義和重新實(shí)現(xiàn)、客戶修改和重新測試。設(shè)計(jì)模式的作用:確保系統(tǒng)只用特定的方式發(fā)生改變。允許系統(tǒng)結(jié)構(gòu)的某些部分的變化獨(dú)立于另外部分,因此有較高的健壯性。(策略是封裝變化)封裝變化)設(shè)計(jì)模式面向?qū)ο蟮目删S護(hù)性復(fù)用應(yīng)用系統(tǒng)、工具包、框架設(shè)計(jì)難度設(shè)計(jì)難度: :應(yīng)用系統(tǒng)工具包框架三種使用設(shè)計(jì)模式的軟件三種使用設(shè)計(jì)模式的軟件(1)設(shè)計(jì)模式在應(yīng)用系統(tǒng)中的作用: 設(shè)計(jì)模式的松散耦合,封裝使操作、算法、和表示的依賴性減少,提高了對象類與其他類互操作的可能性增加了內(nèi)部復(fù)用可能。 減少對平臺依賴性系統(tǒng)的可維護(hù)性變強(qiáng)。 利用類繼承關(guān)系和對象合成,使類耦合減少,一個(gè)類不依賴于其他類提高可擴(kuò)展性。(2)設(shè)計(jì)模式在工具包中的作用:工具包類庫中預(yù)先定義的相關(guān)的可復(fù)用的類的集合,面向?qū)ο蟮淖映绦驇?。只為?yīng)用系統(tǒng)提供某些通用功能。如列表、聯(lián)合表、棧等,C+的I/O流庫等。強(qiáng)調(diào)代碼復(fù)用,沒有特定的設(shè)計(jì)要求。三種使用設(shè)計(jì)模式的軟件三種使用設(shè)計(jì)模式的軟件工具包的設(shè)計(jì)特點(diǎn):比應(yīng)用系統(tǒng)的設(shè)計(jì)難。要在多種應(yīng)用系統(tǒng)中工作。設(shè)計(jì)者不知應(yīng)用系統(tǒng)情況和特殊要求。要求:避免假設(shè)和依賴性,依賴性會(huì)限制工具包的適應(yīng)性,進(jìn)而限制可利用性和效率。

溫馨提示

  • 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

提交評論