




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、名詞解釋:設(shè)計(jì)的5個(gè)準(zhǔn)則設(shè)計(jì)復(fù)雜度=事物復(fù)雜度+載體與事物的適配復(fù)雜度設(shè)計(jì)重在內(nèi)部結(jié)構(gòu),不是外在表現(xiàn)內(nèi)部結(jié)構(gòu):為了實(shí)現(xiàn)外部的功能,進(jìn)行的內(nèi)部的安排,主要關(guān)注質(zhì)量外部表現(xiàn):對(duì)外的功能(能力),滿足職責(zé)(二玉答疑)外部表現(xiàn)是對(duì)外表現(xiàn)的能力,外部表現(xiàn)是為了滿足職責(zé);內(nèi)部結(jié)構(gòu)則是為了完成的質(zhì)量,通過羅列方式完成外部表現(xiàn)的內(nèi)部結(jié)構(gòu)不是好的內(nèi)部結(jié)構(gòu)。設(shè)計(jì)的目的就是為了保證質(zhì)量,因此其重在內(nèi)部結(jié)構(gòu)。只有高層設(shè)計(jì)良好,底層設(shè)計(jì)才可能良好The better early design, the easier detailed design will be高層設(shè)計(jì)的質(zhì)量要到最底層才能準(zhǔn)確驗(yàn)證層次間是迭代而非瀑布,
2、線性關(guān)系不要在完成高層設(shè)計(jì)之后再進(jìn)行底層設(shè)計(jì)要盡早有可驗(yàn)證的原型只有寫完測(cè)試代碼之后,才能算是完成了設(shè)計(jì)4+1 ViewLogical ViewEnd-user FunctionalityImplementation ViewProgrammers Configuration management Pocess ViewPerformanceScalabilityThroughput System integratorsDeployment ViewSystem topologyCommunication ProvisioningSystem engineeringConceptualPhys
3、icalUse Case ViewIBM提出的一種multi-point的體系結(jié)構(gòu)模型,共有5個(gè)viewpoint,關(guān)注點(diǎn)在設(shè)計(jì)上,特別適用于迭代設(shè)計(jì)過程,由4個(gè)View(邏輯、開發(fā)、進(jìn)程和物理)以及1個(gè)特殊viewpoint場(chǎng)景來描述體系結(jié)構(gòu),不同的涉眾可選取自己關(guān)系的view來理解。邏輯視圖為面向?qū)ο蟮姆纸?,由關(guān)鍵的抽象部件連接件以及配置組成,考慮功能需求,針對(duì)終端用戶;進(jìn)程視圖為進(jìn)程分解,有多個(gè)層次,包含一個(gè)進(jìn)程網(wǎng)絡(luò),軟件分解為一組可執(zhí)行的工作單元,考慮非功能需求,針對(duì)集成人員;開發(fā)視圖為子系統(tǒng)分解,是產(chǎn)品線的基礎(chǔ),有模塊和子系統(tǒng)圖組成,考慮軟件模塊的組織層次、管理、重用以及工具,層次式
4、風(fēng)格,針對(duì)編程人員和軟件管理者;物理視圖將軟件映射到硬件,包含網(wǎng)絡(luò)、task以及對(duì)象映射為節(jié)點(diǎn)時(shí)的拓?fù)浣Y(jié)構(gòu)和通信,考慮與硬件相關(guān)的肺功能呢個(gè)需求,針對(duì)系統(tǒng)工程師;場(chǎng)景將上面的視圖元素組織在一起,通過一小組重要的場(chǎng)景來表現(xiàn)各視圖的工作,考慮系統(tǒng)一致性和驗(yàn)證,針對(duì)其他視圖和評(píng)估者等所有用戶。邏輯視圖:面向?qū)ο蠓纸猓到y(tǒng)將問題域分解成一系列關(guān)鍵的抽象,以對(duì)象或類的形式表現(xiàn)。view:最終用戶consider:功能需求不僅是功能性分析,還可以識(shí)別系統(tǒng)不同部分之間共同的機(jī)制和設(shè)計(jì)元素。進(jìn)程視圖:進(jìn)程分解view:Integratorconsider:非功能需求(并發(fā)、性能、scalability)sty
5、le:幾個(gè)風(fēng)格都可以滿足這個(gè)視圖使用多層次的抽象,最高時(shí)進(jìn)程的邏輯網(wǎng);系統(tǒng)被分成幾個(gè)相互獨(dú)立的任務(wù):主要任務(wù)是體系結(jié)構(gòu)相關(guān)的任務(wù)、次要任務(wù)是幫助類的任務(wù)重點(diǎn)關(guān)注系統(tǒng)運(yùn)行起來之后的特征開發(fā)視圖:子系統(tǒng)分解viewer:程序員和軟件經(jīng)理consider:軟件模塊組織(層次結(jié)構(gòu)、軟件管理、復(fù)用、工具約束等)style:分層風(fēng)格物理視圖:將軟件映射到硬件上viewer:系統(tǒng)集成師consider:非功能需求(可用性、可靠性(容錯(cuò)性)、性能(吞吐量)、scalcbility)場(chǎng)景:將所有放在一起viewer:其他視圖所有人和評(píng)價(jià)者consider:四個(gè)視圖間的一致性、可驗(yàn)證性體系結(jié)構(gòu)設(shè)計(jì)階段幫助架構(gòu)師;
6、幫助解釋和驗(yàn)證文檔OO協(xié)作與協(xié)作設(shè)計(jì)Whats CollaborationAn application can be broken down into a set of many different behaviors.Each such behavior is implemented by a distinct collaboration between the objects of the applicationEvery collaboration, no matter how small or large, always implements a behavior of the app
7、licationImagine an object-oriented application as a network of objects connected by relationships. Collaborations are the patterns of messages that play through that network in pursuit of a particular behavior. The collaboration is distributed across the network of objects, and so does not exist in
8、any one placeCollaboration DesignIdentify collaboration:system behavior from use-casefrom software architecture design(Module interface and Process communication)Design collaboration(of system behaviors: control structures):two ways:DispersedandCentralizedDispersed: Logics of a system behavior is sp
9、read widely through the objects networkCentralized: One extra controller record all logics of a system behaviorControl Styles:Dispersed,Centralized,DelegatedCentralized Control:Easy to find where the decision are madeEasy to see how decision are made and to alter the decision-making processControlle
10、rs may become bloated (large, complex and hard to understand, maintain, test)Controller may treat other components as data repositoriesIncrease coupling destroys information hidingDelegated Control:Controller are coupled to fewer components, reducing couplingInformation is hidden bettereasier to div
11、ide into layersDelegated control is thepreferred controlstyleDispersed Control:having many components holding little data and having few responsibilitieshard to understand the flow of controlunable to do much on their own, increasing couplinghard to hide informationcohesion is usually poorfew modula
12、rity principles can be satisfiedHeuristics:Avoid interaction designs where most messages orginate from a single componentKeep component smallMake sure operational responsibilities are not all assigned to just a few componentsMake sure operational responsibilities are consistent with data responsibil
13、itiesAbstract tasks in multi-levelHave components delegate as many low-level tasks as possibleAvoid interactions that require each component to send many messagesOO職責(zé)與職責(zé)分配在面向?qū)ο蟮南到y(tǒng)中是由多個(gè)對(duì)象組成的,這些對(duì)象必需能夠向其它對(duì)象發(fā)送消息或操作,這就是對(duì)象的交互和職責(zé)分配職責(zé)是什么?職責(zé)是從需求來的,由體系結(jié)構(gòu)加工后,處理得到職責(zé)分配注意什么?職責(zé)分配是為了滿足需求,模塊化,信息隱藏,GRASPGRASP模式(或其中之一
14、)是General Responsibility Assignment Software Patterns的縮寫,這些模式不是設(shè)計(jì)模式,而是對(duì)象設(shè)計(jì)的基本原則,關(guān)注對(duì)象設(shè)計(jì)最重要的方面分配職責(zé)給類,并不強(qiáng)調(diào)體系結(jié)構(gòu)的設(shè)計(jì); HYPERLINK l _GRASP模式 詳見5.2軟件設(shè)計(jì)的審美標(biāo)準(zhǔn)有哪些?列舉已知的軟件設(shè)計(jì)方法與技術(shù)(至少5種: 模塊化(簡(jiǎn)潔性。),信息隱藏,設(shè)計(jì)模式,)并說明它們促進(jìn)了哪些審美標(biāo)準(zhǔn)的達(dá)成?審美標(biāo)準(zhǔn)是什么簡(jiǎn)潔性:模塊化一致性(概念完整性):體系結(jié)構(gòu)的風(fēng)格,模塊化堅(jiān)固性(高質(zhì)量):最重要的是體現(xiàn)在體系結(jié)構(gòu)上,設(shè)計(jì)模式所要解決的問題,模塊化易復(fù)用易修改易讀易理解易維護(hù)可
15、靠性 (availability 可以正常工作, reliability 故障和故障修復(fù))性能,質(zhì)量相關(guān)易開發(fā)列舉已知的設(shè)計(jì)方法與技術(shù)(至少5中),他們促進(jìn)了那些審美標(biāo)準(zhǔn)的達(dá)成模塊化:促進(jìn)了結(jié)構(gòu)一致性,堅(jiān)固性(易維護(hù),易復(fù)用等),促進(jìn)了簡(jiǎn)潔性信息隱藏:促進(jìn)了簡(jiǎn)潔性,堅(jiān)固性(易維護(hù),易復(fù)用),破壞了簡(jiǎn)潔性設(shè)計(jì)模式:促進(jìn)了堅(jiān)固性(易復(fù)用,易維護(hù)等等),一致性?體系結(jié)構(gòu)風(fēng)格:促進(jìn)了一致性,堅(jiān)固性職責(zé)分配(GRASP):促進(jìn)了堅(jiān)固性,一致性協(xié)作設(shè)計(jì):促進(jìn)了堅(jiān)固性,一致性?設(shè)計(jì)的層次性(2,3必有一個(gè))高層設(shè)計(jì)、中層設(shè)計(jì)和低層設(shè)計(jì)各自的出發(fā)點(diǎn)、主要關(guān)注因素(即哪些審美要素)、主要方法與技術(shù)和最終制品低層
16、設(shè)計(jì)(代碼設(shè)計(jì))出發(fā)點(diǎn):程序語(yǔ)言所提供的數(shù)據(jù)結(jié)構(gòu)等東西太少了為了解決類型的適配的問題將基本的語(yǔ)言單位(類型與語(yǔ)句),組織起來,建立高質(zhì)量的 數(shù)據(jù)結(jié)構(gòu)+算法 屏蔽程序中復(fù)雜數(shù)據(jù)結(jié)構(gòu)與算法的實(shí)現(xiàn)細(xì)節(jié)對(duì)一個(gè)方法/函數(shù)的內(nèi)部代碼進(jìn)行設(shè)計(jì) 關(guān)注點(diǎn):質(zhì)量:數(shù)據(jù)結(jié)構(gòu)合理易用,算法可靠、高效、易讀 評(píng)價(jià):易讀,易維護(hù)簡(jiǎn)潔性部分堅(jiān)固性,包括堅(jiān)固性的,易讀,易維護(hù),數(shù)據(jù)結(jié)構(gòu)易用,算法可靠、易讀主要技術(shù):防御式編程Defensive Programming斷言式編程Assertive programmingDesign-by-Contract測(cè)試驅(qū)動(dòng)開發(fā)Test-Driven programming異常處理Erro
17、r handling, exception handling配置式編程Configuring Programming表驅(qū)動(dòng)編程Table-driven Programming基于狀態(tài)機(jī)編程State-machine based Programming前面四個(gè)是關(guān)于可靠性的,后面三個(gè)是關(guān)于數(shù)據(jù)結(jié)構(gòu)帶來易讀性內(nèi)部結(jié)構(gòu)是算法和數(shù)據(jù)類型,外在表現(xiàn)是抽象數(shù)據(jù)類型最終制品:源程序,中層,底層共享了詳細(xì)設(shè)計(jì)文檔中層設(shè)計(jì)(模塊與類結(jié)構(gòu)設(shè)計(jì))出發(fā)點(diǎn):模塊劃分 將系統(tǒng)分成簡(jiǎn)單片段 片段有名字,可以被反復(fù)使用 名字和使用方法稱為模塊的抽象與接口 模塊內(nèi)部的程序片段為精華與實(shí)現(xiàn) 模塊劃分隱藏一些程序片段(數(shù)據(jù)結(jié)構(gòu)+算
18、法)的細(xì)節(jié),暴露接口于外界 關(guān)注點(diǎn):簡(jiǎn)潔性(易開發(fā),易修改,易復(fù)用)可觀察性看上去“顯然是正確的”(易開發(fā),易調(diào)試,易復(fù)用)目標(biāo)完全獨(dú)立理解 使用與復(fù)用 開發(fā) 修改 評(píng)價(jià)質(zhì)量標(biāo)準(zhǔn):模塊化信息隱藏OO設(shè)計(jì)原則 問題困難:程序片段不可能完全獨(dú)立方法:實(shí)現(xiàn)盡可能的獨(dú)立(低耦合,高內(nèi)聚)模塊化信息隱藏面向?qū)ο笞罱K制品:類和模塊高層設(shè)計(jì)(體系結(jié)構(gòu))出發(fā)點(diǎn):主要為了解決整體功能組織的問題組織的時(shí)候設(shè)計(jì)和功能大型軟件開發(fā)的一個(gè)根本不同是它更關(guān)注如何將大批獨(dú)立模塊組織形成一個(gè)“系統(tǒng)”,也就是說更重視系統(tǒng)的總體組織 關(guān)注點(diǎn):總體結(jié)構(gòu) 質(zhì)量屬性 方法:場(chǎng)景驅(qū)動(dòng)體系結(jié)構(gòu)風(fēng)格為什么要高層設(shè)計(jì):名稱匹配, 導(dǎo)入導(dǎo)出(問
19、題)Inside 接口(獨(dú)立,區(qū)別對(duì)待)詳細(xì)設(shè)計(jì)的不足載體適配(無法描述可靠性,性能)無法實(shí)現(xiàn)交互信息本地化(信息隱藏的局限性)無法有效抽象部件的整體特性接口定義缺乏結(jié)構(gòu)性(交互的規(guī)則,如果A調(diào)用是B必須調(diào)用)不能有效適應(yīng)大型軟件的特殊開發(fā)方法最終制品:體系結(jié)構(gòu)的設(shè)計(jì)軟件體系結(jié)構(gòu)風(fēng)格描述或比較相關(guān)風(fēng)格 對(duì)給定場(chǎng)景,判斷需要使用的風(fēng)格軟件體系結(jié)構(gòu)風(fēng)格定義:用結(jié)構(gòu)化組織的模式來定義一系列系統(tǒng),并定義組件和連接件的vocabulary以及其如何結(jié)合的限制;描述一類體系結(jié)構(gòu)或重要的體系結(jié)構(gòu)片段,實(shí)踐過程中被重復(fù)發(fā)現(xiàn),是一組緊密相關(guān)的設(shè)計(jì)決策,具有允許重用的已知屬性不同組件的風(fēng)格:對(duì)象(設(shè)計(jì)模式)、模塊
20、、進(jìn)程、物理單元模塊風(fēng)格:進(jìn)程風(fēng)格模塊風(fēng)格描述點(diǎn):簡(jiǎn)要規(guī)則流程敘述,組件連接件和限制是什么,優(yōu)缺點(diǎn),適用系統(tǒng);比較點(diǎn):算法變化,數(shù)據(jù)表示變化,附加特性(功能),性能空間時(shí)間,復(fù)用Call-and-ReturnMain-program-and-subroutine:層次式分解程序,單線程控制,子系統(tǒng)結(jié)構(gòu)隱藏,每個(gè)組件接受父組件的控制;組件是過程、函數(shù)或者模塊,連接件是他們之間的調(diào)用,限制是控制始于調(diào)用層次的頂層然后向下移動(dòng);過程清晰易于理解,正確性控制強(qiáng),變更和復(fù)用困難,可能是公共耦合,適用順行系統(tǒng)和正確性攸關(guān)系統(tǒng)Object-oriented(數(shù)據(jù)抽象):通過封裝數(shù)據(jù)表示和相關(guān)的操作幫助提高修
21、改性,對(duì)象保證自己數(shù)據(jù)表示的完整性,每個(gè)對(duì)象都是匿名的代理,只能通過固定格式的過程調(diào)用來使用對(duì)象;組件是對(duì)象或模塊,連接件是函數(shù)或調(diào)用;在不影響使用者的情況下可以修改實(shí)現(xiàn),系統(tǒng)分解為一系列匿名代理,但一個(gè)對(duì)象要與另一個(gè)對(duì)象交互必須知道對(duì)方的標(biāo)識(shí)符,并且會(huì)有副作用問題,從而產(chǎn)生不可預(yù)期的操作,適用于有一個(gè)中心問題并須保護(hù)相關(guān)信息(數(shù)據(jù))的應(yīng)用Pipe and Filter:每個(gè)過濾器處理數(shù)據(jù)然后傳遞給下一個(gè)過濾器,每當(dāng)有數(shù)據(jù)需要處理時(shí)過濾器都會(huì)運(yùn)行,數(shù)據(jù)共享嚴(yán)格控制在管道的傳遞上;組件是過濾器,連接件是管道,限制是過濾器之間不共享狀態(tài),過濾器不知道上下游的標(biāo)識(shí)符,輸出正確性不依賴于過濾器順序;適
22、易于理解,支持重用,維護(hù)和增強(qiáng)容易,允許特定種類的專門分析,支持并發(fā),交互不佳,需要額外空間,解析增加性能流失和過濾器編寫的復(fù)雜性,用于在有序數(shù)據(jù)上定義一系列獨(dú)立計(jì)算的應(yīng)用;特化形式Pipelines(線性拓?fù)洌┖虰atch Sequential(pipeline退化版)Implicit Invocation:組件發(fā)起一至多個(gè)事件,也可以注冊(cè)某個(gè)方法來響應(yīng)某個(gè)事件,當(dāng)時(shí)間發(fā)生時(shí),連接件調(diào)用所有注冊(cè)該事件的方法,封裝共享數(shù)據(jù),避免暴露存儲(chǔ)格式給計(jì)算模塊,數(shù)據(jù)更改時(shí)計(jì)算被隱式調(diào)用,典型應(yīng)用事件;組件是agent(對(duì)象,過程,進(jìn)程),連接件是廣播中介(事件處理器),限制是事件發(fā)起者不知道事件影響那些
23、組件,無法假設(shè)處理順序以及處理結(jié)果;復(fù)用支持極佳,系統(tǒng)演化容易,但難以保證正確性和完整性,且測(cè)試和診斷困難,適用于擁有松散耦合的組件集、每個(gè)都可能執(zhí)行一些使其他組件進(jìn)行處理的操作的應(yīng)用上面四種比較Main-program-and-subroutineObject-OrientedPipe and FilterImplicit InvocationChange in algorithmBadMediumGoodGoodChange in data representationBadGoodMediumMediumChang in functionsMediumMediumGoodMediumMa
24、ke system interactiveMediumMediumBadMediumSpace performanceGoodGoodBadGoodTime performanceBadBadMediumGoodReuse componentsBadMediumGoodGoodRepository(Blackboard):組件是一個(gè)表示系統(tǒng)正確狀態(tài)的中心數(shù)據(jù)結(jié)構(gòu),一組操作中心數(shù)據(jù)結(jié)構(gòu)的獨(dú)立組件(agent),連接件是過程調(diào)用和直接內(nèi)存存取,限制是所有agent應(yīng)當(dāng)獨(dú)立并且依賴共享數(shù)據(jù),檢查數(shù)據(jù)狀態(tài)并做出反應(yīng)(Pull vs. Push);存儲(chǔ)大量數(shù)據(jù)的方便方式,集中化管理,必須先對(duì)數(shù)據(jù)模型達(dá)成
25、一致,中心數(shù)據(jù)體會(huì)成為瓶頸,數(shù)據(jù)演化昂貴,適用于中心問題是建立擴(kuò)充和維護(hù)阻隔復(fù)雜中心信息體的應(yīng)用Repository vs. Blackboard:前者使用pull模型,易于實(shí)現(xiàn)但客戶端復(fù)雜并且需要輪詢數(shù)據(jù);后者使用push模型,客戶端編程簡(jiǎn)化但需要復(fù)雜的結(jié)構(gòu)Layered:組件是一組過程或?qū)ο?,連接件是過程調(diào)用和限制可見性的方法調(diào)用,限制是系統(tǒng)組織成層次結(jié)構(gòu),每層給上層提供服務(wù)并作為下層的client,躍層是不允許的;設(shè)計(jì)基于不同層次的抽象,更改一層最多再影響兩層,同層可互換提供服務(wù)增強(qiáng)復(fù)用,但不是所有系統(tǒng)都有明確的層次結(jié)構(gòu),并且性能可能會(huì)需要躍層訪問以及實(shí)現(xiàn)部分訪問,適用于擁有明確的服務(wù)種
26、類從而可層次式組織的應(yīng)用,例如層次式通信協(xié)議和操作系統(tǒng),特例是異常一般是無層次直接交互的Model-View-Controller:model子系統(tǒng)設(shè)計(jì)為不依賴任何view子系統(tǒng)和controller子系統(tǒng),其狀態(tài)的變化會(huì)傳遞給view子系統(tǒng);model組件負(fù)責(zé)維護(hù)領(lǐng)域知識(shí)和通知view變化,view組件負(fù)責(zé)顯示信息并傳遞用戶指示給controller,controller負(fù)責(zé)更改model狀態(tài)和選擇響應(yīng)view,連接件是過程調(diào)用、消息、事件、直接內(nèi)存存?。辉试S一個(gè)model上建立多個(gè)獨(dú)立view,view可同步,可“插拔”(易于修改)的view和controller,但增加了復(fù)雜性,view
27、獲取數(shù)據(jù)效率不高,與流行UI工具不十分兼容,適用于UI修改容易并且可以運(yùn)行時(shí)修改、UI的修改不應(yīng)該影響功能部分設(shè)計(jì)和代碼的應(yīng)用比較進(jìn)程風(fēng)格Point-to-point:消息被發(fā)送給一個(gè)唯一可確定的接收者,空間上雙方需要互相了解,時(shí)間上必須是同步激活Publish-Subscribe:多個(gè)應(yīng)用接受相同消息,發(fā)布者和訂閱者松散耦合,消息傳送基于事件發(fā)布,事件類型層次化組織;組件是發(fā)布者和訂閱者,連接件是事件Router復(fù)雜并且負(fù)責(zé)失??;物理單元風(fēng)格Client-Server:分布式系統(tǒng)的特例;組件是client,連接件是RPC-based interaction protocols;server不
28、知道client的數(shù)量或identities,而client知道server的identityThree-Tier(N-Tier):表示層(接口層或前端)、應(yīng)用業(yè)務(wù)邏輯層、數(shù)據(jù)層(存儲(chǔ)層或后端),像是在client/server間再加一層,提供了用戶接口和業(yè)務(wù)邏輯的分離Peer-to-Peer:client/server的泛化,更難實(shí)現(xiàn);組件是匿名的既作為client又作為server,連接件是同步或異步消息傳遞但一般不共享內(nèi)存,交互的拓?fù)浣Y(jié)構(gòu)差異性和動(dòng)態(tài)性較大Distributed SystemDistributed Objects(middleware)Distributed Resour
29、ces(http)Distributed Services(web service)比較詳解1以模塊為對(duì)象的體系結(jié)構(gòu)風(fēng)格Main Program and Subroutine Style結(jié)構(gòu):Components: 程序,功能,模塊Connectors: 函數(shù)間的調(diào)用特點(diǎn):控制從頂層開始,逐漸細(xì)化至最低層,不允許同級(jí)和向上調(diào)用層次化分解:先聲明后定義單線程控制隱含“子系統(tǒng)結(jié)構(gòu)“,分解結(jié)構(gòu),子路徑屬于上個(gè)模塊的聚合但又無法調(diào)用回去層次化推理:只要子過程正確,即可保證整個(gè)鍋程正確,串行調(diào)度,正確性極好優(yōu)點(diǎn):處理清晰,容易理解可強(qiáng)正確性控制,部分正確即可得整體正確缺點(diǎn):不利于修改復(fù)用;處理不好會(huì)變成
30、公共耦合使用情景:順序系統(tǒng),對(duì)系統(tǒng)正確性要求高的系統(tǒng)Object-Oriented Style結(jié)構(gòu):Components: 對(duì)象或模塊Connectors: 函數(shù)或調(diào)用特點(diǎn):所有數(shù)據(jù)信息封裝與隱藏每個(gè)對(duì)象都是自治的,互不干涉,彼此獨(dú)立對(duì)象有義務(wù)維護(hù)自己封裝信息的一致性和完整性所有component平等,可以任意調(diào)用,無層次限制優(yōu)點(diǎn):因?yàn)閷?duì)象對(duì)其它對(duì)象隱藏它的表示,所以可以改變一個(gè)對(duì)象的表示,而不影響其它的對(duì)象。只要不改變接口,相互修改性較好。數(shù)據(jù)表示和相關(guān)操作封裝為抽象數(shù)據(jù)類型設(shè)計(jì)者可將一些數(shù)據(jù)存取操作的問題分解成一些自治的交互代理程序的集合。 每部分獨(dú)立,每部分正確性易于確定,方法在對(duì)象中被
31、調(diào)用,可以將問題分解為交互的代理缺點(diǎn):為了使一個(gè)對(duì)象和另一個(gè)對(duì)象通過過程調(diào)用等進(jìn)行交互,必須知道對(duì)象的接口標(biāo)識(shí),有依賴性。只要一個(gè)對(duì)象的標(biāo)識(shí)改變了,就必須修改所有其他明確調(diào)用它的對(duì)象。必須修改所有顯式調(diào)用它的其它對(duì)象,并消除由此帶來的一些副作用。例如,如果A使用了對(duì)象B,C也使用了對(duì)象B,那么,C對(duì)B的使用所造成的對(duì)A的影響可能是料想不到的。有重入問題。使用情景:核心問題是識(shí)別并保護(hù)相關(guān)信息體的程序Pipe and Filter Architectural Style結(jié)構(gòu):Components: Filter,提供數(shù)據(jù)局部轉(zhuǎn)化,并且使用增量處理,已使得輸出數(shù)據(jù)再所有輸入數(shù)據(jù)完成之前產(chǎn)生Conn
32、ectors: Pipe,作為流傳輸?shù)耐ǖ?,把一個(gè)Filter的輸出傳到另一個(gè)的輸入特點(diǎn):Filter之間不共享狀態(tài)和數(shù)據(jù)Filter不知道它上下游Filter,只知道自己的功能單個(gè)filter不需依賴要知道其他filter才能構(gòu)建的假設(shè)整個(gè)網(wǎng)絡(luò)的正確性不應(yīng)該依賴于Filter的排列順序完全獨(dú)立,可以隨時(shí)增減filter,可以并行開發(fā)優(yōu)點(diǎn):使得軟構(gòu)件具有良好的隱蔽性和高內(nèi)聚、低耦合的特點(diǎn);易于理解,允許設(shè)計(jì)者將整個(gè)系統(tǒng)的輸入/輸出行為看成是多個(gè)過濾器的行為的簡(jiǎn)單合成;支持軟件重用。只要提供適合在兩個(gè)過濾器之間傳送的數(shù)據(jù),任何兩個(gè)過濾器都可被連接起來;系統(tǒng)維護(hù)和增強(qiáng)系統(tǒng)性能簡(jiǎn)單。對(duì)順序無依賴性,
33、新的過濾器可以添加到現(xiàn)有系統(tǒng)中來;舊的可以被改進(jìn)的過濾器替換掉;允許對(duì)一些如吞吐量、死鎖等屬性的特殊分析;支持并行執(zhí)行。每個(gè)過濾器是作為一個(gè)單獨(dú)的任務(wù)完成,因此可與其它任務(wù)并行執(zhí)行。缺點(diǎn):通常導(dǎo)致進(jìn)程成為批處理的結(jié)構(gòu)。這是因?yàn)殡m然過濾器可增量式地處理數(shù)據(jù),但它們是獨(dú)立的,所以設(shè)計(jì)者必須將每個(gè)過濾器看成一個(gè)完整的從輸入到輸出的轉(zhuǎn)換。傳輸數(shù)據(jù)需要額外的空間。不適合處理交互的應(yīng)用。當(dāng)需要增量地顯示改變時(shí),這個(gè)問題尤為嚴(yán)重。各部分獨(dú)立,難以全局控制。因?yàn)樵跀?shù)據(jù)傳輸處理的不一致性,每個(gè)過濾器都增加了打包,封裝和分解數(shù)據(jù)的工作,這樣就導(dǎo)致了系統(tǒng)性能下降,并增加了編寫過濾器的復(fù)雜性。使用情景:對(duì)有序數(shù)據(jù)進(jìn)行
34、一系列獨(dú)立運(yùn)算處理的程序,如Shell,Compiler特殊:流水線和批處理Implicit invocation (Event based ) Style結(jié)構(gòu):Components: agent代理程序(對(duì)象、程序、進(jìn)程)Connectors: broadcast mediums廣播媒介(事件處理器)特點(diǎn):一個(gè)組件可聲明事件,另一些組件以函數(shù)去注冊(cè)事件,當(dāng)事件觸發(fā)時(shí),廣播媒介根據(jù)注冊(cè)分發(fā)事件,Connector自動(dòng)觸發(fā)注冊(cè)的函數(shù)調(diào)用。一個(gè)或者多個(gè)事件拋出者不知道誰(shuí)接受事件,不需假設(shè)一定有處理和誰(shuí)處理不能假定事件是否被處理以及被處理的順序優(yōu)點(diǎn):為軟件重用提供了強(qiáng)大的支持。當(dāng)需要將一個(gè)構(gòu)件加入現(xiàn)
35、存系統(tǒng)中時(shí),只需將它注冊(cè)到系統(tǒng)的事件中。為改進(jìn)系統(tǒng)帶來了方便。當(dāng)用一個(gè)構(gòu)件代替另一個(gè)構(gòu)件時(shí),不會(huì)影響到其它構(gòu)件的接口。缺點(diǎn):正確性和完整性無法保證難以測(cè)試和調(diào)試構(gòu)件放棄了對(duì)系統(tǒng)計(jì)算的控制。一個(gè)構(gòu)件觸發(fā)一個(gè)事件時(shí),不能確定其它構(gòu)件是否會(huì)響應(yīng)它。而且即使它知道事件注冊(cè)了哪些構(gòu)件的構(gòu)成,它也不能保證這些過程被調(diào)用的順序。數(shù)據(jù)交換的問題。有時(shí)數(shù)據(jù)可被一個(gè)事件傳遞,但另一些情況下,基于事件的系統(tǒng)必須依靠一個(gè)共享的倉(cāng)庫(kù)進(jìn)行交互。在這些情況下,全局性能和資源管理便成了問題。既然過程的語(yǔ)義必須依賴于被觸發(fā)事件的上下文約束,關(guān)于正確性的推理存在問題。使用情景:一系列松耦合的組件,一些組件在執(zhí)行操作時(shí),影響另一些
36、組件松散耦合的系統(tǒng):調(diào)用不能太多;可以分成幾個(gè)部分相互處理Repository (Blackboard) Style結(jié)構(gòu):Components: 代表系統(tǒng)正確狀態(tài)的中心數(shù)據(jù)結(jié)構(gòu)一系列操作中心數(shù)據(jù)結(jié)構(gòu)的獨(dú)立組件監(jiān)視狀態(tài)改變并回應(yīng)的代理Connectors: 過程調(diào)用或內(nèi)存讀取特點(diǎn):除了blackboard,任何兩個(gè)agent部件獨(dú)立新的通訊必須基于blackboard實(shí)現(xiàn),每個(gè)部件強(qiáng)依賴于中心blackboard,共享數(shù)據(jù)每個(gè)agent的行為方式:Blackboard(推模式),如Chat room,被動(dòng),結(jié)構(gòu)復(fù)雜但客戶端易實(shí)現(xiàn)Repository (拉模式),如Web log,主動(dòng),結(jié)構(gòu)簡(jiǎn)單但
37、客戶端復(fù)雜 優(yōu)點(diǎn):充分存儲(chǔ)利用大量數(shù)據(jù)的有效方式共享模型被發(fā)布到倉(cāng)庫(kù)中心減少了數(shù)據(jù)的復(fù)制分片集中管理:備份、安全、并發(fā)控制缺點(diǎn):需要預(yù)先對(duì)數(shù)據(jù)模型達(dá)成共識(shí)黑板成為瓶頸數(shù)據(jù)演化非常昂貴使用情景:中心問題是建立、增強(qiáng)和維護(hù)一個(gè)復(fù)雜、穩(wěn)定的信息體,如數(shù)據(jù)庫(kù),黑板專家系統(tǒng),編程環(huán)境Layered Style 結(jié)構(gòu):Components: 一系列過程和對(duì)象的集合Connectors: 函數(shù)或引用,可見特點(diǎn):嚴(yán)格的層次結(jié)構(gòu):底層為上層提供服務(wù),調(diào)用下一層,上層作為底層的客戶可以允許跨層,當(dāng)效率很重要的時(shí)候優(yōu)點(diǎn):設(shè)計(jì):支持基于抽象程度遞增的系統(tǒng)設(shè)計(jì),使設(shè)計(jì)者可以把一個(gè)復(fù)雜系統(tǒng)按遞增的步驟進(jìn)行分解;支持功能增
38、強(qiáng),因?yàn)槊恳粚又炼嗪拖噜彽纳舷聦咏换?,因此功能的改變最多影響相鄰的上下層;易于修改支持重用。只要提供的服?wù)接口定義不變,同一層的不同實(shí)現(xiàn)可以交換使用。這樣,就可以定義一組標(biāo)準(zhǔn)的接口,而允許各種不同的實(shí)現(xiàn)方法。缺點(diǎn):并不是每個(gè)系統(tǒng)都可以很容易地劃分為分層的模式,甚至即使一個(gè)系統(tǒng)的邏輯結(jié)構(gòu)是層次化的,出于對(duì)系統(tǒng)性能的考慮,系統(tǒng)設(shè)計(jì)師不得不把一些低級(jí)或高級(jí)的功能綜合起來;很難找到一個(gè)合適的、正確的層次抽象方法。使用情景:可以按照抽象程度功能劃分為多個(gè)層次,包含一系列可被分層服務(wù)的程序,如分層通訊協(xié)議,操作系統(tǒng)MVC Style結(jié)構(gòu):Components: Model: 維護(hù)領(lǐng)域模型,并通知View相
39、關(guān)變化Controller:改變model狀態(tài),并選擇返回的視圖View:把信息顯示給用戶,并把用戶的操作發(fā)送給ControllerConnectors: 函數(shù)調(diào)用,消息,事件,直接內(nèi)存訪問優(yōu)點(diǎn):允許同一模型的多個(gè)視圖存在視圖可同步可插式視圖和控制器缺點(diǎn):增加的復(fù)雜度view中數(shù)據(jù)訪問的低效可能和當(dāng)前流行的UI工具兼容使用情景:界面在運(yùn)行時(shí)可以被隨時(shí)更換,改變或者使用用戶接口不影響應(yīng)用的功能部分的設(shè)計(jì)和代碼。如Web程序2 以進(jìn)程為對(duì)象的體系結(jié)構(gòu)風(fēng)格:點(diǎn)對(duì)點(diǎn)point to point分布式系統(tǒng)中的異步消息傳遞:松散耦合的體系結(jié)構(gòu),組件隨意機(jī)器內(nèi)或者跨網(wǎng)絡(luò):機(jī)器內(nèi):共享數(shù)據(jù) 跨網(wǎng)絡(luò):遠(yuǎn)程過程調(diào)
40、用,中間件,基于同步過程調(diào)用的CORBA/RMI消息發(fā)送給唯一的接受者Publish-Subscribe Architecture StyleComponents: publisher/subscriberConnector: event router特點(diǎn):類似事件,進(jìn)城消息而非模塊控制:多進(jìn)程需接受同樣信息發(fā)布者訂閱者:松散耦合,時(shí)間上必須同時(shí),空間上不一定,信息發(fā)送基于時(shí)間訂閱靈活參與對(duì)象,一對(duì)多發(fā)布內(nèi)容可按照內(nèi)容進(jìn)行組織Event router可對(duì)消息轉(zhuǎn)換封裝處理消息總線:實(shí)現(xiàn)多對(duì)多優(yōu)點(diǎn):方便利用subscriber的信息缺點(diǎn):Event router結(jié)構(gòu)復(fù)雜,容易失敗3以物理單元為對(duì)象
41、的體系結(jié)構(gòu)風(fēng)格Client-ServerThree-Tier (N-Tier)Peer-to-PeerDistributed SystemDistributed Objects (middleware)Distributed Resources (http)Distributed Services (web service)Client-Server結(jié)構(gòu):Components: 客戶、服務(wù)器Connectors: 基于RPC的交互協(xié)議(遠(yuǎn)程過程調(diào)用或者網(wǎng)絡(luò)協(xié)議)特點(diǎn):服務(wù)器不知道客戶機(jī)的身份,客戶端必須知道服務(wù)器地址優(yōu)點(diǎn):client可以隨意變更,server不變?nèi)秉c(diǎn):server設(shè)計(jì)困難,成
42、為瓶頸舉例:File server, web server, ftp server, e-mail serverThree-Tier (N-Tier)三個(gè)子系統(tǒng)層:接口層 (或者前端):和用戶交互的子系統(tǒng),包括接口,網(wǎng)頁(yè),表單etc.應(yīng)用邏輯層 : 包括處理單元存儲(chǔ)層 ( 或者后端): 處理持久層數(shù)據(jù)的查詢和存取相當(dāng)于在C/S結(jié)構(gòu)中加入了一個(gè)中間層,提供了用戶界面和控制邏輯的分離優(yōu)點(diǎn):性能高,修改好Peer-to-Peer結(jié)構(gòu):Components:自治區(qū),可以扮演客戶端和服務(wù)器的角色Connectors: 同步和異步消息(遠(yuǎn)程過程調(diào)用),沒有共享內(nèi)存(除非配置允許優(yōu)化)特點(diǎn):網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)可以
43、是任意,動(dòng)態(tài)的C/s結(jié)構(gòu)的一種推廣:每個(gè)子系統(tǒng)可以扮演客戶端和服務(wù)器的角色相對(duì)難以實(shí)現(xiàn):控制流較復(fù)雜,每個(gè)控制流都必須被同步舉例:eMule, eDonkey, Gnutella, Freenet, On Share, etc. are examples of a P2P systemsDistributed System:分布式對(duì)象(Middleware)、分布式資源(http)、分布式服務(wù)(SOA) Middleware-Oriented Distributed System Architecture Style 職責(zé)分配與協(xié)作設(shè)計(jì)協(xié)作設(shè)計(jì)(控制風(fēng)格)的比較和場(chǎng)景判定對(duì)給定場(chǎng)景和要求的控制
44、風(fēng)格,根據(jù)GRASP模式,判斷特定職責(zé)的分配根據(jù)分析類圖和體系結(jié)構(gòu)模塊接口,建立基本的設(shè)計(jì)類圖控制風(fēng)格有幾種控制流處理方式?進(jìn)行比較(集中,委托,分散,特點(diǎn)區(qū)別和比較;把4和5合起來,比如說給一個(gè)不好的順序圖是集中式控制的,結(jié)合grasp,重新建立一個(gè)委托式的。)控制器在交互作用設(shè)計(jì)中具有重要的地位,因?yàn)樗鼈冊(cè)趨f(xié)作中是中心角色。它們通常是啟動(dòng)和結(jié)束交互作用,把任務(wù)委托給其他組件并返回結(jié)果的組件控制器:做出決策并指導(dǎo)其他組件的程序組件,因?yàn)樗麄冊(cè)诮换ブ械闹行牡匚欢种匾刂茊⑹荆罕苊獯蟛糠窒a(chǎn)生于一個(gè)單一組件的交互設(shè)計(jì);保持組件小型;確保操作職責(zé)不僅僅分配給少數(shù)組件;確保操作職責(zé)與數(shù)據(jù)職責(zé)一
45、致;讓組件代理盡可能多的低層任務(wù);避免需要每個(gè)組件發(fā)送許多信息的交互Demeter法則:一個(gè)對(duì)象obj的操作只應(yīng)當(dāng)向以下實(shí)體發(fā)送信息:obj,obj的屬性,該操作的參數(shù),所屬集合為該操作的參數(shù)或者obj的屬性的元素,該操作創(chuàng)建的對(duì)象,全局類或?qū)ο罂刂骑L(fēng)格(Control Styles):決策制定在組件之間分布的方式;有以下幾種集中式(Centralized): 少數(shù)控制器做出所有重大的決定。非控制器組件只是保存數(shù)據(jù)或執(zhí)行簡(jiǎn)單功能。 優(yōu)點(diǎn):易于判定決定是哪里做出來的,易于保證正確性(邏輯思路明確) 易于修改決策過程 缺點(diǎn):控制器可能變得太大,太復(fù)雜,難以理解,維護(hù),測(cè)試等等。這樣的控制器被稱為膨
46、脹式控制器。其內(nèi)聚性不高,而且是大型模塊,這違背了兩條模塊性設(shè)計(jì)原則 控制器可能把其他組件視為數(shù)據(jù)倉(cāng)庫(kù),只是在其中存儲(chǔ)或者從中檢索數(shù)據(jù)。這樣往往會(huì)增強(qiáng)耦合性,并破壞信息的隱藏,因此違背了另外兩條模塊性設(shè)計(jì)原則 適用情況:僅當(dāng)程序只需要做出少量的決定時(shí)才應(yīng)該使用集中式控制樣式規(guī)則:在交互作用設(shè)計(jì)中,避免使大多數(shù)消息都源自同一個(gè)組件。 使組件保持小型化。 確保不把操作職責(zé)都分配給少量組件。操作職責(zé)的集中是集中控制樣式的特征。 確保操作職責(zé)與數(shù)據(jù)職責(zé)一致。委托式(Delegated)決策權(quán)分布在整個(gè)程序中,控制器做出事關(guān)全局的決定,并協(xié)調(diào)其他組件的活動(dòng),但把較低級(jí)別的決策委托給其他組件來做出。即只關(guān)
47、心發(fā)起后面的決策并不關(guān)心,類似于中介代理。 優(yōu)點(diǎn):控制器只與較少的組件耦合,程序的總體耦合性降低。在委托職責(zé)的時(shí)候,控制器不需要知道那些與受托組件協(xié)作的組件,因此降低了耦合性。信息得到更好的隱藏。與從組件中獲取數(shù)據(jù),修改數(shù)據(jù)之后再返回給組件不同,委托控制式鼓勵(lì)組件自己修改自己的數(shù)據(jù)使程序易于分層。正如我們以后將看到的那樣,分層體系結(jié)構(gòu)樣式是一種非常重要和強(qiáng)大的組織程序模塊的方式。委托控制樣式使分層的組織更易于實(shí)現(xiàn)。適用情況:委托控制樣式確實(shí)沒有任何缺點(diǎn),這是首選的控制樣式,尤其適合于面向?qū)ο蟮南到y(tǒng)。規(guī)則:使組件把盡可能多的低級(jí)任務(wù)委托出去。組件負(fù)責(zé)一些高級(jí)任務(wù),而完成高級(jí)任務(wù)通常需要完成若干低
48、級(jí)任務(wù)。換句話說,可以把功能分解為更簡(jiǎn)單的功能。這些低級(jí)任務(wù)通常是通過協(xié)作完成。分散式(Dispersed)決策權(quán)廣泛散布在整個(gè)程序中,只有很少或者沒有組件做出自己的決策,識(shí)別出哪些組件式控制器是困難的。 在這樣的設(shè)計(jì)中,有很多容納少量數(shù)據(jù),擁有少量小型操作的小型組件。每項(xiàng)任務(wù)都必須通過數(shù)十個(gè)交互作用進(jìn)行跟蹤。 缺點(diǎn):理解控制流程很難。必須跟蹤大量的消息,才能弄清某項(xiàng)任務(wù)時(shí)如何完成的。這樣的設(shè)計(jì)既難以理解,又非常難以修改。 當(dāng)把組件分割得太小時(shí),他們往往不能獨(dú)立做任何事情,結(jié)果就是耦合性增強(qiáng)。 隱藏信息是困難的,因?yàn)槊總€(gè)組件的工作過程嚴(yán)重依賴其他組件的實(shí)現(xiàn)方式 內(nèi)聚性差(低內(nèi)聚) 有些模塊化原
49、則不能被滿足。 規(guī)則:避免每個(gè)組件都需要發(fā)送很多信息的交互(如果每個(gè)對(duì)象都需要發(fā)出很多消息,則表明控制樣式過于分散)GRASP模式(重點(diǎn)掌握)對(duì)外部事件交互,應(yīng)該如何處理?(控制器模式)對(duì)給定場(chǎng)景,判斷職責(zé)的分配。(通常給一個(gè)系統(tǒng)順序圖,每個(gè)箭頭都是一個(gè)職責(zé),每個(gè)職責(zé)怎么分配,職責(zé)通常需要分解,怎么分解看上課例子)高聚合,低耦合 面向?qū)ο蟮淖罡咴瓌t!多態(tài) Adapter, Command, Composite, Proxy, State, and Strategy模式其實(shí)都使用多態(tài)來實(shí)現(xiàn)。純虛構(gòu)行為對(duì)象,功能為中心的對(duì)象。Adapter, Strategy, Command都是這一模式的具體實(shí)
50、現(xiàn)。間接性計(jì)通過引入中間層加以解決 ;Adapter, Bridge, Facade, Observer, Mediator,都是具體實(shí)現(xiàn)。 差異性保護(hù)隔離封裝變化。將變化,不確定的東西用穩(wěn)定不變的接口封裝隔離保護(hù)起來。信息隱藏 和 開閉原則具有相同的含義模式名稱問題,解決方案,優(yōu)缺點(diǎn)信息專家模式問題:對(duì)象設(shè)計(jì)和職責(zé)分配的一般原則是什么?解決方案:將職責(zé)分配給擁有履行一個(gè)職責(zé)所必需信息的類即信息專家。(也就是將職責(zé)分配給一個(gè)類,這個(gè)類必須擁有履行這個(gè)職責(zé)所需要的信息。)優(yōu)點(diǎn):維護(hù)信息影藏,支持高內(nèi)聚低耦合,缺點(diǎn):讓類變得復(fù)雜創(chuàng)建者模式問題:誰(shuí)應(yīng)該負(fù)責(zé)產(chǎn)生類的實(shí)例(對(duì)應(yīng)于GoF設(shè)計(jì)模式系列里的“
51、工廠模式”)解決方案:如果符合下面的一個(gè)或多個(gè)條件,則將創(chuàng)建類A實(shí)例的職責(zé)分配給類B.類B聚合類A的對(duì)象。(prefer).類B包含類A的對(duì)象。(prefer).類B記錄類A對(duì)象的實(shí)例。.類B密切使用類A的對(duì)象。.類B初始化數(shù)據(jù)并在創(chuàng)建類A的實(shí)例時(shí)傳遞給類A(類B是創(chuàng)建類A實(shí)例的一個(gè)專家)。在以上情況下,類B是類A對(duì)象的創(chuàng)建者。優(yōu)點(diǎn):支持低耦合:將創(chuàng)建實(shí)例的職責(zé)分配給需要對(duì)象引用的類 降低依賴:通過自己創(chuàng)建對(duì)象避免了依賴其它類幫他們創(chuàng)建對(duì)象控制器模式問題:誰(shuí)處理一個(gè)系統(tǒng)事件?解決方案:當(dāng)類代表下列一種情況時(shí),為它分配處理系統(tǒng)事件消息的職責(zé)。.代表整個(gè)系統(tǒng)、設(shè)備或子系統(tǒng)(外觀控制器)。.代表系統(tǒng)
52、事件發(fā)生的用例場(chǎng)景(用例或回話控制器)。 專門設(shè)計(jì)一個(gè)類處理事件:1(功能)針對(duì)業(yè)務(wù) 或overall organization(a faade controller).(集中式) 2(系統(tǒng))針對(duì)系統(tǒng) (a faade controller).(集中式) 3(角色)針對(duì)模塊 (a role controller)(近似集中式)4(用例)針對(duì)一個(gè)用例 (a use case controller)(近似分散式)優(yōu)點(diǎn):使外部事件源和內(nèi)部事件處理器不相互依賴對(duì)方的類型和行為 缺點(diǎn):?The controller objects can become highly coupled and uncohe
53、sive with more responsiblities (不是很懂)低耦合問題:如何支持低依賴性以及增加重用性?解決方案:分配職責(zé)時(shí)使(不必要的)耦合保持為最低。OO中耦合的種類:Y是X的屬性X的方法中有Y(參數(shù),局部變量,返回值)X是Y的子孫類X實(shí)現(xiàn)Y接口優(yōu)點(diǎn):類更易維護(hù),易復(fù)用,將change本地化高內(nèi)聚問題:如何讓復(fù)雜性可管理?解決方案:分配職責(zé)時(shí)使內(nèi)聚保持為最高。內(nèi)聚的不同程度:非常低內(nèi)聚:一個(gè)類的職責(zé)包括很多功能低內(nèi)聚: 一個(gè)類職責(zé)包含一個(gè)功能中的復(fù)雜的任務(wù)高內(nèi)聚. 一個(gè)類在一個(gè)功能上有適中的職責(zé),和其他類協(xié)作完成任務(wù)。 優(yōu)點(diǎn):類易維護(hù),易理解,支持低耦合,支持復(fù)用多態(tài)模式問題
54、:當(dāng)行為隨類型變化而變化時(shí)誰(shuí)來負(fù)責(zé)處理這些變化?解決方案:當(dāng)類型變化導(dǎo)致另一個(gè)行為或?qū)е滦袨樽兓瘯r(shí),應(yīng)用多態(tài)操作將行為的職責(zé)分配到引起行為變化的類型。優(yōu)點(diǎn):更簡(jiǎn)單可靠,對(duì)比復(fù)雜的選擇邏輯(判斷語(yǔ)句)更易添加額外的行為在設(shè)計(jì)中增加類的數(shù)量使代碼更易理解純虛構(gòu)模式問題:當(dāng)不想破壞高內(nèi)聚和低耦合的設(shè)計(jì)原則時(shí),誰(shuí)來負(fù)責(zé)處理這些變化?解決方案:將一組高內(nèi)聚的職責(zé)分配給一個(gè)虛構(gòu)的或處理方便的“行為”類,它并不是問題域中的概念,而是虛構(gòu)的事務(wù),以達(dá)到支持高內(nèi)聚、低耦合和重用的目的。典型適用場(chǎng)景:將representation 從 model中分離出去將platforms(facilities) 從 mode
55、l中分離出去分離復(fù)雜的行為分離復(fù)雜的數(shù)據(jù)結(jié)構(gòu)優(yōu)點(diǎn):支持高內(nèi)聚:相關(guān)職責(zé)被封裝成一個(gè)類來處理一系列相關(guān)任務(wù)。 支持復(fù)用because of the presence of fine grained Pure Fabrication classes. 間接性問題:如何分配職責(zé)以避免直接耦合?解決方案:分配職責(zé)給中間對(duì)象以協(xié)調(diào)組件或服務(wù)之間的操作,使得它們不直接耦合。優(yōu)點(diǎn):與可變性低耦合,支持復(fù)用受保護(hù)變化模式問題:如何分配職責(zé)給對(duì)象、子系統(tǒng)和系統(tǒng),使得這些元素中的變化或不穩(wěn)定的點(diǎn)不會(huì)對(duì)其他元素產(chǎn)生不利影響?解決方案:找出預(yù)計(jì)有變化或不穩(wěn)定的元素,為其創(chuàng)建穩(wěn)定的“接口”而分配職責(zé)。類型:Inform
56、ation HidingData driven (configuration files)Service lookup (runtime registration)Interpreter-Driven(generalize module)Reflective or Meta-Level Designs (Component replace)Uniform Access (adherence to protocols)LSP (polymorphism)Law of Demeter (restrict communication paths) GRASP模式(或其中之一): General Re
57、sponsibility Assignment Software patterns(通用職責(zé)軟件模式),核心思想是職責(zé)分配,用職責(zé)設(shè)計(jì)對(duì)象。主要特征:對(duì)象職責(zé)分配的基本原則;主要應(yīng)用在分析和建模上。核心思想理解:自己干自己的事(職責(zé)的分配);自己干自己的能干的事(職責(zé)的分配);自己只干自己的事(職責(zé)的內(nèi)聚);包含9個(gè)基本模式:1 信息專家:解決類的職責(zé)分配問題的最基本模式。問題:當(dāng)我們發(fā)現(xiàn)完對(duì)對(duì)象和職責(zé)后,職責(zé)的分配原則是什么?解決方案:職責(zé)的執(zhí)行需要某些信息,把職責(zé)分配給該信息的擁有者。即某項(xiàng)職責(zé)的執(zhí)行需要某些資源,只有擁有這些資源的對(duì)象才有資格執(zhí)行職責(zé)。優(yōu)點(diǎn):信息擁有者類同時(shí)就是信息的操作
58、類,可以減少不必要的類之間的關(guān)聯(lián);各個(gè)類的職責(zé)單一明確,容易理解;保持信息的封裝性;促進(jìn)低耦合和高內(nèi)聚;造成某個(gè)類過于復(fù)雜。2 創(chuàng)建者:解決類的實(shí)例和創(chuàng)建職責(zé)問題的模式。問題:類的實(shí)例的創(chuàng)建職責(zé),應(yīng)該分配給什么樣的類?或者說類的實(shí)例應(yīng)該由誰(shuí)來創(chuàng)建?解決方案:B包含A,或B聚集A,或B記錄A,或B頻繁使用A或B有A初始化數(shù)據(jù)時(shí),類A的實(shí)例的創(chuàng)建職責(zé)就分配給B。(其中,最提倡聚集和包含)一般用工廠模式或抽象工廠模式作為替代方案。優(yōu)點(diǎn):整個(gè)結(jié)構(gòu)清晰易懂;有利于類或組件的重用;防止職責(zé)的分散;降低耦合性。避免依賴其他的類來創(chuàng)建自己的對(duì)象。3 高內(nèi)聚:為降低類的復(fù)雜程度,簡(jiǎn)化控制而提出的面向?qū)ο笤O(shè)計(jì)的原
59、則性模式。(其他模式的根本)問題:怎么做才能降低類的復(fù)雜程度,簡(jiǎn)化控制?解決方案:緊密相關(guān)的功能(職責(zé))應(yīng)該分配給同一個(gè)類。優(yōu)點(diǎn):聚集相關(guān)功能,結(jié)構(gòu)清晰,容易理解;只聚集相關(guān)功能,使得類的職責(zé)單一明確,從而降低類的復(fù)雜程度,使用簡(jiǎn)單。類易于維護(hù);支持低耦合;支持復(fù)用。4 低耦合:為降低類之間的關(guān)聯(lián)程度,適應(yīng)可變性而提出的面向?qū)ο笤O(shè)計(jì)的原則性模式。(其他模式的根本)問題:怎樣做才能降低類之間關(guān)聯(lián)程度,適應(yīng)需求的變化呢?解決方案:為類分配職責(zé)時(shí),應(yīng)該盡量降低類之間的關(guān)聯(lián)關(guān)系(耦合性)。亦即,應(yīng)該以降低類之間的耦合關(guān)系作為職責(zé)分配的原則。優(yōu)點(diǎn):獨(dú)立性,有利于重用和維護(hù);適應(yīng)需求變化,一旦發(fā)生變化時(shí),
60、可以把影響范圍縮小到最小范圍。5 控制器:解決事件處理職責(zé)問題的模式。問題:在UI層之外,應(yīng)該由哪個(gè)類來處理(控制)系統(tǒng)操作(事件)呢?解決方案:把系統(tǒng)事件的處理職責(zé)分配給控制器類。擔(dān)當(dāng)控制器類角色的候補(bǔ)類可能為:系統(tǒng)全體,設(shè)備,子系統(tǒng)等的表現(xiàn)類(Faade Controller);系統(tǒng)實(shí)踐發(fā)生的用例的控制類,通常被命名為Handler,Coordinator,Session等。優(yōu)點(diǎn):防止同類職責(zé)的分散。滿足高內(nèi)聚,低耦合原則;有利于共通處理;變化的高適應(yīng)能力,能把變化的修改范圍控制在最小范圍內(nèi)。增加復(fù)用的潛力,基本思想是控制器對(duì)象使外部事件源和內(nèi)部事件處理的類型和行為相互獨(dú)立(解耦);隨時(shí)查
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電子制餐安全生產(chǎn)培訓(xùn)
- 二零二五年度旅游園區(qū)企業(yè)入駐共同發(fā)展協(xié)議
- 二零二五年度環(huán)保設(shè)備租賃及環(huán)保服務(wù)合同
- 二零二五年度跨境資金轉(zhuǎn)入監(jiān)管協(xié)議書
- 二零二五年度酒店退場(chǎng)員工安置與補(bǔ)償協(xié)議
- 二零二五年度金融居間保密合作協(xié)議
- 二零二五年度親子親子關(guān)系咨詢機(jī)構(gòu)與家長(zhǎng)孩子親子關(guān)系和諧協(xié)議
- 二零二五年度房屋買賣合同解除通知及購(gòu)房資格核實(shí)協(xié)議
- 2025年度電子信息產(chǎn)業(yè)學(xué)徒工實(shí)習(xí)合同范本
- 二零二五年度科技論壇贊助合同模板
- 提高白云石配比對(duì)燒結(jié)生產(chǎn)的影響
- 《城市軌道交通應(yīng)急處理》課件-《城市軌道交通應(yīng)急處理》項(xiàng)目一
- 公安基礎(chǔ)知識(shí)考試題庫(kù)(含各題型)
- 2023年云上貴州大數(shù)據(jù)(集團(tuán))有限公司招聘筆試題庫(kù)及答案解析
- 選礦試車方案
- 自來水用水證明
- 小課題專題研究參考題目
- 《最好的未來》合唱曲譜
- 車輛租賃服務(wù)內(nèi)容及保障措施方案
- 院感考核表(門-診)
- 建筑工程綜合評(píng)估法Ⅱ評(píng)標(biāo)辦法
評(píng)論
0/150
提交評(píng)論