第八章 面向?qū)ο笤O(shè)計(jì)_第1頁
第八章 面向?qū)ο笤O(shè)計(jì)_第2頁
第八章 面向?qū)ο笤O(shè)計(jì)_第3頁
第八章 面向?qū)ο笤O(shè)計(jì)_第4頁
第八章 面向?qū)ο笤O(shè)計(jì)_第5頁
已閱讀5頁,還剩67頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、內(nèi)容提綱n軟件體系結(jié)構(gòu)軟件體系結(jié)構(gòu) 基本概念與設(shè)計(jì)文檔基本概念與設(shè)計(jì)文檔n體系結(jié)構(gòu)風(fēng)格體系結(jié)構(gòu)風(fēng)格 倉庫體系結(jié)構(gòu)倉庫體系結(jié)構(gòu) 模型視圖控制器結(jié)構(gòu)模型視圖控制器結(jié)構(gòu) 控制結(jié)構(gòu)控制結(jié)構(gòu) 客戶機(jī)服務(wù)器結(jié)構(gòu)客戶機(jī)服務(wù)器結(jié)構(gòu) 分層體系結(jié)構(gòu)分層體系結(jié)構(gòu)n設(shè)計(jì)模式設(shè)計(jì)模式 抽象工廠(抽象工廠(Abstract Factory)模式)模式 狀態(tài)(狀態(tài)(State)模式)模式 外觀(外觀(Faade)模式)模式 觀察者(觀察者(Observer)模式)模式軟件體系結(jié)構(gòu) 軟件體系結(jié)構(gòu)包括一組軟件部件、軟件部件的外部的可見特性及其相互關(guān)系,其中軟件外部的可見特性是指軟件部件提供的服務(wù)、性能、特性、錯(cuò)誤處理、共享資源

2、使用等。系統(tǒng)的總體組織結(jié)構(gòu)和全局控制結(jié)構(gòu)通信、同步和數(shù)據(jù)訪問的協(xié)議設(shè)計(jì)元素的組成與功能分配非功能需求系統(tǒng)的物理部署備選設(shè)計(jì)方案的選擇軟件體系結(jié)構(gòu) 包依賴性 依賴性PackageA的一些成員引用PackageB的某些成員PackageB的變化可能會(huì)影響到PackageA循環(huán)依賴的消除 循環(huán)依賴的消除 體系結(jié)構(gòu)風(fēng)格軟件體系結(jié)構(gòu)風(fēng)格是描述某一特定應(yīng)用領(lǐng)域中系統(tǒng)軟件體系結(jié)構(gòu)風(fēng)格是描述某一特定應(yīng)用領(lǐng)域中系統(tǒng)組織方式的慣用模式,它反映了領(lǐng)域中眾多系統(tǒng)組織方式的慣用模式,它反映了領(lǐng)域中眾多系統(tǒng)所共有的結(jié)構(gòu)和語義特性,并指導(dǎo)如何將各個(gè)模所共有的結(jié)構(gòu)和語義特性,并指導(dǎo)如何將各個(gè)模塊和子系統(tǒng)有效地組織成一個(gè)完整系

3、統(tǒng)。塊和子系統(tǒng)有效地組織成一個(gè)完整系統(tǒng)。典型的軟件體系結(jié)構(gòu)風(fēng)格典型的軟件體系結(jié)構(gòu)風(fēng)格倉庫或知識(shí)庫結(jié)構(gòu)倉庫或知識(shí)庫結(jié)構(gòu)模型視圖控制器體系結(jié)構(gòu)模型視圖控制器體系結(jié)構(gòu)控制結(jié)構(gòu)控制結(jié)構(gòu)客戶機(jī)服務(wù)器結(jié)構(gòu)客戶機(jī)服務(wù)器結(jié)構(gòu)分層體系結(jié)構(gòu)分層體系結(jié)構(gòu)倉庫結(jié)構(gòu)倉庫或知識(shí)庫結(jié)構(gòu)(Repository architecture)倉庫結(jié)構(gòu) 倉庫結(jié)構(gòu)是一種以數(shù)據(jù)為中心的體系結(jié)構(gòu),它包倉庫結(jié)構(gòu)是一種以數(shù)據(jù)為中心的體系結(jié)構(gòu),它包含一個(gè)中心數(shù)據(jù)庫和一組相互獨(dú)立的處理中心數(shù)含一個(gè)中心數(shù)據(jù)庫和一組相互獨(dú)立的處理中心數(shù)據(jù)的子系統(tǒng),主要適合于數(shù)據(jù)由一個(gè)子系統(tǒng)產(chǎn)生據(jù)的子系統(tǒng),主要適合于數(shù)據(jù)由一個(gè)子系統(tǒng)產(chǎn)生而由其他子系統(tǒng)使用的情形。而由其

4、他子系統(tǒng)使用的情形。優(yōu)點(diǎn):在共享數(shù)據(jù)模型穩(wěn)定的情況下,擴(kuò)展新的子優(yōu)點(diǎn):在共享數(shù)據(jù)模型穩(wěn)定的情況下,擴(kuò)展新的子系統(tǒng)十分容易系統(tǒng)十分容易缺點(diǎn):子系統(tǒng)與共享數(shù)據(jù)之間的耦合度很高,共享缺點(diǎn):子系統(tǒng)與共享數(shù)據(jù)之間的耦合度很高,共享數(shù)據(jù)將對(duì)系統(tǒng)的性能和子系統(tǒng)的修改產(chǎn)生瓶頸。數(shù)據(jù)將對(duì)系統(tǒng)的性能和子系統(tǒng)的修改產(chǎn)生瓶頸。應(yīng)用:現(xiàn)代編譯器、管理信息系統(tǒng)、應(yīng)用:現(xiàn)代編譯器、管理信息系統(tǒng)、CAD 系統(tǒng)和系統(tǒng)和CASE工具集等。工具集等。倉庫結(jié)構(gòu)倉庫結(jié)構(gòu) 模型/視圖/控制器結(jié)構(gòu)(Model/View/Controller Architecture)該結(jié)構(gòu)是為同樣的數(shù)據(jù)提供多個(gè)視圖的應(yīng)用程序而設(shè)計(jì)的,它將交互系統(tǒng)的組成分

5、解成模型、視圖、控制器三種部件。 視圖是應(yīng)用程序中用戶界面相關(guān)的部分,即用戶看到視圖是應(yīng)用程序中用戶界面相關(guān)的部分,即用戶看到并與之交互的界面。并與之交互的界面。 控制器工作就是根據(jù)用戶的輸入,控制用戶界面數(shù)據(jù)控制器工作就是根據(jù)用戶的輸入,控制用戶界面數(shù)據(jù)顯示和更新模型對(duì)象的狀態(tài)。顯示和更新模型對(duì)象的狀態(tài)。 模型是應(yīng)用程序的主體部分,表示業(yè)務(wù)數(shù)據(jù)或者業(yè)務(wù)邏模型是應(yīng)用程序的主體部分,表示業(yè)務(wù)數(shù)據(jù)或者業(yè)務(wù)邏輯。輯。該結(jié)構(gòu)適合于交互式系統(tǒng),特別是同一個(gè)模型需要多個(gè)視圖的情況。 控制結(jié)構(gòu)該結(jié)構(gòu)關(guān)心的是子系統(tǒng)之間的控制流 集中式控制 一個(gè)子系統(tǒng)專門負(fù)責(zé)控制,控制其他子系統(tǒng)的啟動(dòng)和停一個(gè)子系統(tǒng)專門負(fù)責(zé)控制

6、,控制其他子系統(tǒng)的啟動(dòng)和停止。它也可能將控制交給一個(gè)子系統(tǒng),但在控制完成后控止。它也可能將控制交給一個(gè)子系統(tǒng),但在控制完成后控制權(quán)仍然要?dú)w還給它。制權(quán)仍然要?dú)w還給它。 基于事件的控制 控制信息不是集中于一個(gè)子系統(tǒng)中,而是每個(gè)子系統(tǒng)都控制信息不是集中于一個(gè)子系統(tǒng)中,而是每個(gè)子系統(tǒng)都能接收來自外部的事件并對(duì)此作出響應(yīng)。這些事件可能來能接收來自外部的事件并對(duì)此作出響應(yīng)。這些事件可能來自其他子系統(tǒng)或來自系統(tǒng)的環(huán)境。自其他子系統(tǒng)或來自系統(tǒng)的環(huán)境??刂平Y(jié)構(gòu)控制結(jié)構(gòu)客戶機(jī)服務(wù)器結(jié)構(gòu)客戶機(jī)服務(wù)器結(jié)構(gòu)(客戶機(jī)服務(wù)器結(jié)構(gòu)(Client/Server Architecture) 在客戶機(jī)服務(wù)器體系結(jié)構(gòu)中,作為服務(wù)器

7、的子系統(tǒng)為在客戶機(jī)服務(wù)器體系結(jié)構(gòu)中,作為服務(wù)器的子系統(tǒng)為其他客戶機(jī)的子系統(tǒng)提供服務(wù),作為客戶機(jī)的子系統(tǒng)負(fù)責(zé)其他客戶機(jī)的子系統(tǒng)提供服務(wù),作為客戶機(jī)的子系統(tǒng)負(fù)責(zé)與用戶的交互。與用戶的交互。瘦客戶機(jī)模型瘦客戶機(jī)模型 所有的應(yīng)用處理和數(shù)據(jù)管理都是在服務(wù)器上執(zhí)行,客戶所有的應(yīng)用處理和數(shù)據(jù)管理都是在服務(wù)器上執(zhí)行,客戶機(jī)只是負(fù)責(zé)數(shù)據(jù)表示部分。機(jī)只是負(fù)責(zé)數(shù)據(jù)表示部分。 由于繁重的處理負(fù)荷全部集中在服務(wù)器和網(wǎng)絡(luò)上,有可由于繁重的處理負(fù)荷全部集中在服務(wù)器和網(wǎng)絡(luò)上,有可能造成性能上的問題。能造成性能上的問題??蛻魴C(jī)服務(wù)器結(jié)構(gòu)胖客戶機(jī)模型胖客戶機(jī)模型服務(wù)器只負(fù)責(zé)對(duì)數(shù)據(jù)的管理,客戶機(jī)上的軟件實(shí)現(xiàn)應(yīng)用邏服務(wù)器只負(fù)責(zé)對(duì)數(shù)據(jù)

8、的管理,客戶機(jī)上的軟件實(shí)現(xiàn)應(yīng)用邏輯與用戶的交互。輯與用戶的交互。系統(tǒng)管理更加復(fù)雜,因?yàn)閼?yīng)用程序的改變必須在客戶機(jī)上系統(tǒng)管理更加復(fù)雜,因?yàn)閼?yīng)用程序的改變必須在客戶機(jī)上重新安裝。重新安裝。三層的客戶機(jī)服務(wù)器體系結(jié)構(gòu)三層的客戶機(jī)服務(wù)器體系結(jié)構(gòu)分層體系結(jié)構(gòu)分層體系結(jié)構(gòu)MiniLibrary:軟件體系結(jié)構(gòu)設(shè)計(jì)模式回顧學(xué)過的數(shù)據(jù)結(jié)構(gòu)回顧學(xué)過的數(shù)據(jù)結(jié)構(gòu)Trees, Stacks, Queues Trees, Stacks, Queues 它們給軟件開發(fā)帶來了什么?它們給軟件開發(fā)帶來了什么?問題問題在軟件體系結(jié)構(gòu)設(shè)計(jì)中是否存在一些可重用的解在軟件體系結(jié)構(gòu)設(shè)計(jì)中是否存在一些可重用的解決方案?決方案?答案是肯定的

9、答案是肯定的設(shè)計(jì)模式使我們可以重用已經(jīng)成功的經(jīng)驗(yàn)設(shè)計(jì)模式使我們可以重用已經(jīng)成功的經(jīng)驗(yàn)PatternPatternDocumented experienceDocumented experience設(shè)計(jì)模式設(shè)計(jì)模式設(shè)計(jì)模式描述了軟件系統(tǒng)設(shè)計(jì)過程中常見問題的解設(shè)計(jì)模式描述了軟件系統(tǒng)設(shè)計(jì)過程中常見問題的解決方案,它是從大量的成功實(shí)踐中總結(jié)出來的且決方案,它是從大量的成功實(shí)踐中總結(jié)出來的且被廣泛公認(rèn)的實(shí)踐和知識(shí)。被廣泛公認(rèn)的實(shí)踐和知識(shí)。設(shè)計(jì)模式的好處設(shè)計(jì)模式的好處使人們可以簡便地重用已有的良好設(shè)計(jì)使人們可以簡便地重用已有的良好設(shè)計(jì)提供了一套可供開發(fā)人員交流的語言提供了一套可供開發(fā)人員交流的語言提升了人

10、們看待問題的抽象程度提升了人們看待問題的抽象程度幫助設(shè)計(jì)人員更快更好地完成系統(tǒng)設(shè)計(jì)幫助設(shè)計(jì)人員更快更好地完成系統(tǒng)設(shè)計(jì)模式是經(jīng)過考驗(yàn)的思想,具有更好的可靠性和擴(kuò)展性模式是經(jīng)過考驗(yàn)的思想,具有更好的可靠性和擴(kuò)展性設(shè)計(jì)模式的風(fēng)險(xiǎn)設(shè)計(jì)模式不是萬能的設(shè)計(jì)模式不是萬能的模式可以解決大多數(shù)問題,但不可能解決遇到的所有問題模式可以解決大多數(shù)問題,但不可能解決遇到的所有問題應(yīng)用一種模式一般會(huì)應(yīng)用一種模式一般會(huì)“有得有失有得有失”,切記不可盲目應(yīng)用,切記不可盲目應(yīng)用濫用設(shè)計(jì)模式可能會(huì)造成過度設(shè)計(jì),反而得不償失濫用設(shè)計(jì)模式可能會(huì)造成過度設(shè)計(jì),反而得不償失設(shè)計(jì)模式是有難度和風(fēng)險(xiǎn)的設(shè)計(jì)模式是有難度和風(fēng)險(xiǎn)的一個(gè)好的設(shè)計(jì)模

11、式是眾多優(yōu)秀軟件設(shè)計(jì)師集體智慧的結(jié)晶一個(gè)好的設(shè)計(jì)模式是眾多優(yōu)秀軟件設(shè)計(jì)師集體智慧的結(jié)晶在設(shè)計(jì)過程中引入模式的成本是很高的在設(shè)計(jì)過程中引入模式的成本是很高的設(shè)計(jì)模式只適合于經(jīng)驗(yàn)豐富的開發(fā)人員使用設(shè)計(jì)模式只適合于經(jīng)驗(yàn)豐富的開發(fā)人員使用設(shè)計(jì)模式的基本要素模式名稱模式名稱一個(gè)助記名,便于交流和思考一個(gè)助記名,便于交流和思考問題問題描述應(yīng)該在何時(shí)使用模式,解釋了設(shè)計(jì)問題和問題存在的描述應(yīng)該在何時(shí)使用模式,解釋了設(shè)計(jì)問題和問題存在的前因后果前因后果解決方案解決方案描述設(shè)計(jì)的組成部分,它們之間的相互關(guān)系以及各自的職描述設(shè)計(jì)的組成部分,它們之間的相互關(guān)系以及各自的職責(zé)和協(xié)作方式責(zé)和協(xié)作方式效果效果描述模式應(yīng)用

12、的效果以及應(yīng)權(quán)衡的問題描述模式應(yīng)用的效果以及應(yīng)權(quán)衡的問題設(shè)計(jì)模式的類型創(chuàng)建型模式創(chuàng)建型模式創(chuàng)建型模式描述了實(shí)例化對(duì)象的相關(guān)技術(shù),解決了與創(chuàng)建創(chuàng)建型模式描述了實(shí)例化對(duì)象的相關(guān)技術(shù),解決了與創(chuàng)建對(duì)象有關(guān)的問題。對(duì)象有關(guān)的問題。創(chuàng)建型模式使用繼承來改變被實(shí)例化的類,而一個(gè)對(duì)象創(chuàng)創(chuàng)建型模式使用繼承來改變被實(shí)例化的類,而一個(gè)對(duì)象創(chuàng)建型模式將實(shí)例化委托給另一個(gè)對(duì)象。建型模式將實(shí)例化委托給另一個(gè)對(duì)象。典型的模式典型的模式工廠方法(工廠方法(Factory Method)、抽象工廠()、抽象工廠(Abstract Factory)生成器(生成器(Builder)、原型()、原型(Prototype)、單件)、

13、單件(Singleton)設(shè)計(jì)模式的類型 結(jié)構(gòu)型模式結(jié)構(gòu)型模式結(jié)構(gòu)型模式描述了在軟件系統(tǒng)中組織類和對(duì)象的結(jié)構(gòu)型模式描述了在軟件系統(tǒng)中組織類和對(duì)象的常用方法,避免了一個(gè)類被賦予過多職責(zé)而破壞常用方法,避免了一個(gè)類被賦予過多職責(zé)而破壞類的封裝性和信息的隱藏,和類之間功能重疊的類的封裝性和信息的隱藏,和類之間功能重疊的問題。問題。結(jié)構(gòu)型模式采用繼承機(jī)制來組合接口或?qū)崿F(xiàn)。結(jié)構(gòu)型模式采用繼承機(jī)制來組合接口或?qū)崿F(xiàn)。 典型的模式典型的模式適配器適配器AdapterAdapter、橋接、橋接BridgeBridge、組成、組成CompositeComposite裝飾裝飾DecoratorDecorator、外

14、觀、外觀FacadeFacade、享元、享元FlyweightFlyweight、代理代理ProxyProxy設(shè)計(jì)模式的類型行為模式行為模式行為模式負(fù)責(zé)分配對(duì)象的職責(zé),為對(duì)象間協(xié)作建模提供了行為模式負(fù)責(zé)分配對(duì)象的職責(zé),為對(duì)象間協(xié)作建模提供了有效的策略。有效的策略。行為模式使用繼承機(jī)制在類件分配行為。行為模式使用繼承機(jī)制在類件分配行為。典型的模式典型的模式職責(zé)鏈職責(zé)鏈Chain of ResponsibilityChain of Responsibility、命令、命令CommandCommand、解釋器解釋器InterpreterInterpreter、迭代器、迭代器IteratorItera

15、tor、中介者、中介者M(jìn)ediatorMediator備忘錄備忘錄MementoMemento、觀察者、觀察者ObserverObserver、狀態(tài)、狀態(tài)StateState 策略策略StrategyStrategy、模板方法、模板方法Template MethodTemplate Method、訪問者、訪問者VisitorVisitor設(shè)計(jì)模式示例抽象工廠(抽象工廠(Abstract Factory)模式)模式抽象工廠模式是用于封裝具體的平臺(tái),從而使應(yīng)用程序可以抽象工廠模式是用于封裝具體的平臺(tái),從而使應(yīng)用程序可以在不同的平臺(tái)上運(yùn)行。在不同的平臺(tái)上運(yùn)行。狀態(tài)(狀態(tài)(State)模式)模式狀態(tài)模

16、式允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變時(shí)改變自己行為。狀態(tài)模式允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變時(shí)改變自己行為。外觀(外觀(Faade)模式)模式外觀模式用簡單的統(tǒng)一接口封裝子系統(tǒng),從而降低類之間的外觀模式用簡單的統(tǒng)一接口封裝子系統(tǒng),從而降低類之間的相關(guān)性。相關(guān)性。觀察者(觀察者(Observer)模式)模式觀察者模式用于定義對(duì)象之間一對(duì)多的依賴關(guān)系,當(dāng)一個(gè)對(duì)觀察者模式用于定義對(duì)象之間一對(duì)多的依賴關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生變化時(shí),所有依賴于它的對(duì)象都將得到通知而象的狀態(tài)發(fā)生變化時(shí),所有依賴于它的對(duì)象都將得到通知而被自動(dòng)更新。被自動(dòng)更新。Abstract FactoryAbstract FactoryStat

17、eFaadeObserver面向?qū)ο笤O(shè)計(jì)的制品n設(shè)計(jì)類n用例實(shí)現(xiàn)(從設(shè)計(jì)角度)n設(shè)計(jì)子系統(tǒng)與接口n體系結(jié)構(gòu)描述(從設(shè)計(jì)角度)n部署圖n體系結(jié)構(gòu)描述(從部署角度)設(shè)計(jì)原則n模塊化(Modularity) 將一個(gè)復(fù)雜的大系統(tǒng)分解成若干個(gè)相對(duì)簡單的較小部分,將一個(gè)復(fù)雜的大系統(tǒng)分解成若干個(gè)相對(duì)簡單的較小部分,稱為子系統(tǒng)(稱為子系統(tǒng)(SubsystemSubsystem)。)。n耦合(Coupling) 耦合表示兩個(gè)子系統(tǒng)(或類)之間的關(guān)聯(lián)程度。耦合表示兩個(gè)子系統(tǒng)(或類)之間的關(guān)聯(lián)程度。 當(dāng)一個(gè)子系統(tǒng)(或類)發(fā)生變化時(shí)對(duì)另一個(gè)子系統(tǒng)(或當(dāng)一個(gè)子系統(tǒng)(或類)發(fā)生變化時(shí)對(duì)另一個(gè)子系統(tǒng)(或類)的影響很小,則稱

18、它們是松散耦合的;反之,如果變類)的影響很小,則稱它們是松散耦合的;反之,如果變化的影響很大時(shí),則稱它們是緊密耦合的化的影響很大時(shí),則稱它們是緊密耦合的設(shè)計(jì)原則n耦合(Coupling) 設(shè)計(jì)原則內(nèi)聚(Cohesion)內(nèi)聚性是子系統(tǒng)內(nèi)部的相關(guān)程度。當(dāng)子系統(tǒng)中彼此相關(guān)的多個(gè)對(duì)象執(zhí)行類似的任務(wù)時(shí),則認(rèn)為該子系統(tǒng)是高內(nèi)聚的;反之,當(dāng)子系統(tǒng)內(nèi)的多個(gè)對(duì)象彼此不相關(guān)時(shí),則認(rèn)為是低內(nèi)聚的。高內(nèi)聚的方法做且僅做一件事,這會(huì)很容易理解與維護(hù)。 舉例:如果使用一個(gè)方法changeItem( ) changeItem( ) 完成書目的讀取、增加、修改和刪除等若干方法的功能,有什么問題嗎?高內(nèi)聚的類表示且僅表示一種類型的對(duì)象。 舉例:在大學(xué)系統(tǒng)中使用Pr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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)論