期末復(fù)習(xí):體系結(jié)構(gòu)-sa_第1頁
期末復(fù)習(xí):體系結(jié)構(gòu)-sa_第2頁
期末復(fù)習(xí):體系結(jié)構(gòu)-sa_第3頁
期末復(fù)習(xí):體系結(jié)構(gòu)-sa_第4頁
期末復(fù)習(xí):體系結(jié)構(gòu)-sa_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

目錄

1名詞解釋:1

模塊化8

結(jié)構(gòu)化的內(nèi)聚與耦合類型;8

面向?qū)ο蟮鸟詈项愋停?

對給出的例子:考試方式13

3信息隱藏13

對簡單的應(yīng)用,按照“處理流程”與“信息隱藏”兩種方式分別給出設(shè)計描述。13

對簡單的應(yīng)用,解釋其ModuleGuide。(什么是ModuleGuide,每個部分的作用)16

4軟件體系結(jié)構(gòu)風(fēng)格:16

描述或比較相關(guān)風(fēng)格(描述、比較、優(yōu)缺點、使用特點)16

5全局分析的步驟(背誦)(ppt7)29

6根據(jù)分析類圖,建立基本的設(shè)計類圖(給分析類圖,給要求,做設(shè)計)30

7有幾種控制流處理方式?進(jìn)行比較31

8GRASP模式33

9設(shè)計模式:36

1普通ProgrammingtoInterfaces有明E些手段?36

集合類型ProgrammingtoInterfaces有哪些手段?37

De-Coupling有哪些手段?38

一個模塊的信息隱藏有哪兩種基本類型?40

實現(xiàn)共性與可變性有哪些手段?40

對象的創(chuàng)建有哪些常見解決方法?43

1名詞解釋:

模塊化(關(guān)鍵是思想)、信息隱藏、軟件體系結(jié)構(gòu)(三個不同方面,高層,關(guān)注點,設(shè)計結(jié)構(gòu))、4+1View、

GRASP模式(任意挑一個或其中之一)、設(shè)計模式(主要考designpattern的??,ppi上不明確)、MVC

(特點,畫出solution)

1)模塊化:

一一是一種責(zé)任分配,而不是單純的子程序;

——代表具體對自身的設(shè)計決策而不被其他模塊知道

一一支持實現(xiàn)中的靈活性

——不要描述過程的步驟

一一高內(nèi)聚、低耦合

模塊是可以被獨立對待的:即可以獨立的理解、使用(或復(fù)用)、編譯等;一個模塊的錯誤不

會影響其他模塊;模塊的改變也不會產(chǎn)生連鎖反應(yīng)。

抽象和分解:抽象是把不要的東西扔掉,去掉不重要的,隱藏細(xì)節(jié);

2)信息隱藏:

一一基本設(shè)計原則:

——每個模塊的實現(xiàn)都是秘密;

——每個模塊的接口被抽象而精確地描述;

一一我們抽象出可能會變化的實現(xiàn)細(xì)節(jié);

——我們將那些不能被隱藏的變化部分進(jìn)行參數(shù)化;

一關(guān)鍵技術(shù)是盡可能多的限制對程序?qū)嶓w的訪問。

——每個模塊包含一個基本的秘密:外部行為VS內(nèi)部實現(xiàn)。每個模塊隱藏重要的設(shè)計決策的實

現(xiàn)以達(dá)到只有那個模塊本身知道實現(xiàn)細(xì)節(jié)。所有的設(shè)計決策都是相互獨立的。

一一模塊擁有額外的秘密:變化

一百科:在設(shè)計和確定模塊時,使得一個模塊內(nèi)包含的特定信息(過程或數(shù)據(jù)),對于不需

要這些信息的其他模塊來說,是透明的。通過信息隱藏,可以定義和實施對模塊的過程細(xì)節(jié)和局部數(shù)據(jù)結(jié)

構(gòu)的存取限制。

3)軟件體系結(jié)構(gòu)(高層結(jié)構(gòu)、關(guān)注點、設(shè)計風(fēng)格):

高層結(jié)構(gòu):

部件、連接件、配置

高層結(jié)構(gòu)[1

高層抽象的作用

’需求(質(zhì)量屬性)、項目環(huán)境、商業(yè)目標(biāo)

關(guān)注點Y

軟件體系結(jié)構(gòu)《

、交流媒介的作用

’問題、候選設(shè)計、理由、解決方案

設(shè)計決策Y

、指導(dǎo)開發(fā)的作用

——部件:軟件體系結(jié)構(gòu)的一個基礎(chǔ)元素,承載了系統(tǒng)主要的計算與狀態(tài),封裝了系統(tǒng)的

功能處理和數(shù)據(jù)。部件包括抽象規(guī)格與具體實現(xiàn)兩部分。抽象規(guī)格定義了部件的特征集,包括部件的類型、

功能性、約束、質(zhì)量屬性等特征。抽象規(guī)格還定義和命名了部件對外可見、可被外界引用的接口實體,稱

一連接件:軟件體系結(jié)構(gòu)的另一個基礎(chǔ)元素,承載了部件之間的交互。作為交互中介,

連接件只將參與方關(guān)聯(lián)到抽象的協(xié)議角色,而不是具體的部件類型。除了提供交互通道外,連接件還要維

護(hù)交互規(guī)則,調(diào)節(jié)交互效果,并提供交互過程所需的各種復(fù)雜輔助機(jī)制。抽象規(guī)格定義了連接件的特征集,

包括類型、接口規(guī)則、交互斷言、交互協(xié)議(例如順序、性能)等。連接件抽象規(guī)格所定義和命名的對外

可見、可被外界引用的接口實體稱為角色。每個角色代表一個交互參與方需要滿足的一些條件,基本的條

件是匹配該角色的端口所應(yīng)符合的規(guī)則,復(fù)雜的條件可能會包括加密通信、負(fù)載均衡等。

規(guī)格

實現(xiàn)

——配置:一種將部件和連接件整合起來,構(gòu)成系統(tǒng)的整體結(jié)構(gòu),達(dá)到系統(tǒng)設(shè)計目標(biāo)的專

門機(jī)制。配置通過部件端口與連接件角色相匹配的方式,將系統(tǒng)中部件和連接件的關(guān)系定義為一個關(guān)聯(lián)集

合,這個關(guān)聯(lián)集合可以形成系統(tǒng)整體結(jié)構(gòu)的一個拓?fù)涿枋觥?/p>

一一高層抽象的作用:軟件體系結(jié)構(gòu)最為核心的思想是將注意力集中在系統(tǒng)總體結(jié)構(gòu)的組

織上,它實現(xiàn)的手段是運用抽象方法屏蔽錯綜復(fù)雜的模塊間連接,使人們的認(rèn)知提升并保持在整體結(jié)構(gòu)的

部件“交互”層次,并進(jìn)一步將交互從計算中分離出來,建立“部件+連接件+配置”的軟件系統(tǒng)高層結(jié)構(gòu)

組織方式。

——關(guān)注點:軟件體系結(jié)構(gòu)的主要關(guān)注點可以分為三個類型:

——需求。需求是用戶和維護(hù)人員關(guān)注的內(nèi)容,它包括(要求系統(tǒng)幫助用戶完成任務(wù)的)功能

需求,也包括(衡量功能實現(xiàn)程度的)質(zhì)量屬性。一個好的軟件體系結(jié)構(gòu)必須要承載需求,以完成從需求

向設(shè)計的轉(zhuǎn)換與過渡。

一項目環(huán)境。項目環(huán)境是客戶、項目管理者和開發(fā)者關(guān)注的內(nèi)容??蛻絷P(guān)注的是項目的商業(yè)

環(huán)境,例如目標(biāo)市場的大小等。項目管理者關(guān)注的是項目的開發(fā)環(huán)境,例如成本、人員組成等。開發(fā)者關(guān)

注的是技術(shù)環(huán)境,例如中間件平臺的選擇等。項目環(huán)境限制軟件體系結(jié)構(gòu)設(shè)計的決策范圍。

一商業(yè)目標(biāo)。商業(yè)目標(biāo)是客戶的主要關(guān)注內(nèi)容,它說明了軟件系統(tǒng)被開發(fā)的出發(fā)點和戰(zhàn)略目

標(biāo)。商業(yè)目標(biāo)是引導(dǎo)軟件體系結(jié)構(gòu)設(shè)計的上下文,為軟件體系結(jié)構(gòu)的設(shè)計決策指明方向。

——交流媒介的作用:對涉眾關(guān)注內(nèi)容的選擇、表現(xiàn)、權(quán)衡折中等工作使得軟件體系結(jié)構(gòu)

變成了涉眾需要的一種綜合與平衡。因此,對于項目而言,軟件體系結(jié)構(gòu)不僅僅是一個高層抽象的技術(shù)藍(lán)

圖,還是一個體現(xiàn)項目主要關(guān)注內(nèi)容的需要藍(lán)圖。技術(shù)藍(lán)圖和需要藍(lán)圖的融合使得軟件體系結(jié)構(gòu)具備了工

程藍(lán)圖的作用,指導(dǎo)后續(xù)開發(fā)工作的同時,還起著交流媒介的作用。

——設(shè)計決策:

1..*

1..*1..*

一決策是指決定策略與辦法,將軟件體系結(jié)構(gòu)設(shè)計中的決策定義為:“對元素、特征和處理

的選擇,它們涉及一個或多個關(guān)注點,直接或間接地影響到軟件體系結(jié)構(gòu)”。

關(guān)于體系結(jié)構(gòu)設(shè)計決策所應(yīng)該包含的具體內(nèi)容,有著很多不同的看法一般來說,體系結(jié)構(gòu)設(shè)計決策核心的

知識可以分為四個部分:關(guān)注點、解決方案、策略和理由,

——指導(dǎo)開發(fā)的作用:軟件體系結(jié)構(gòu)設(shè)計決策將關(guān)注點轉(zhuǎn)化到高層結(jié)構(gòu)之上,使得后續(xù)開

發(fā)工作可以在?個限定的范圍內(nèi)、穩(wěn)定可靠的框架下進(jìn)行。同時,軟件體系結(jié)構(gòu)設(shè)計決策所產(chǎn)生的設(shè)計規(guī)

則、設(shè)計約束和附加需求也對后續(xù)的開發(fā)工作提出了要求和限制。所以,作為設(shè)計決策集合的軟件體系結(jié)

構(gòu)既是后續(xù)開發(fā)的工作基礎(chǔ),又限定了后續(xù)開發(fā)必須要滿足的上下文環(huán)境,對后續(xù)開發(fā)工作具有指導(dǎo)作用。

4)4+1View:

EnduserProgrammers

&software

managers

IntegratorSystemEngineer

--邏輯視圖:面向?qū)ο蠓纸?,系統(tǒng)將問題域分解成一系列關(guān)鍵的抽象,以對象或類的形式表現(xiàn)。

view:最終用戶

consider:功能需求

一不僅是功能性分析,還可以識別系統(tǒng)不同部分之間共同的機(jī)制和設(shè)計元素。

一一進(jìn)程視圖:進(jìn)程分解

view:Integrator

consider:非功能需求(并發(fā)、性能、scalability)

一一style:幾個風(fēng)格都可以滿足這個視圖

一使用多層次的抽象,最高時進(jìn)程的邏輯網(wǎng);系統(tǒng)被分成兒個相互獨立的任務(wù):主要任務(wù)是

體系結(jié)構(gòu)相關(guān)的任務(wù)、次要任務(wù)是幫助類的任務(wù)

——重點關(guān)注系統(tǒng)運行起來之后的特征

——開發(fā)視圖:子系統(tǒng)分解

viewer:程序員和軟件經(jīng)理

一一consider:軟件模塊組織(層次結(jié)構(gòu)、軟件管理、復(fù)用、工具約束等)

style:分層風(fēng)格

—物理視圖:將軟件映射到硬件上

viewer:系統(tǒng)集成師

consider:非功能需求(可用性、可靠性(容錯性)、性能(吞吐量)、scalcbility)

場景:將所有放在一起

viewer:其他視圖所有人和評價者

consider:四個視圖間的一致性、可驗證性

一一體系結(jié)構(gòu)設(shè)計階段幫助架構(gòu)師;幫助解釋和驗證文檔

5)GRASP模式(或其中之一):

GeneralResponsibilityAssignmentSoftwarepatterns(通用職責(zé)軟件模式),核心思想是職

責(zé)分配,用職責(zé)設(shè)計對象。

——主要特征:對象職責(zé)分配的基本原則;主要應(yīng)用在分析和建模上。

一核心思想理解:自己干自己的事(職責(zé)的分配);自己干自己的能干的事(職責(zé)的分配);

自己只干自己的事(職責(zé)的內(nèi)聚);

一一包含9個基本模式:

1信息專家:解決類的職責(zé)分配問題的最基本模式。

——問題:當(dāng)我們發(fā)現(xiàn)完對對象和職責(zé)后,職責(zé)的分配原則是什么?

一解決方案:職責(zé)的執(zhí)行需要某些信息,把職責(zé)分配給該信息的擁有者。即某項職責(zé)的

執(zhí)行需耍某些資源,只有擁有這些資源的對象才有資格執(zhí)行職貢。

~優(yōu)點:信息擁有者類同時就是信息的操作類,可以減少不必要的類之間的關(guān)聯(lián);各個

類的職責(zé)單一明確,容易理解.;保持信息的封裝性;促進(jìn)低耦合和高內(nèi)聚;造成某個類過于復(fù)雜。

2創(chuàng)建者:解決類的實例和創(chuàng)建職責(zé)問題的模式。

一問題:類的實例的創(chuàng)建職責(zé),應(yīng)該分配給什么樣的類?或者說類的實例應(yīng)該由誰來創(chuàng)

建?

「一解決方案:B包含A,或B聚集A,或B記錄A,或B頻繁使用A或B有A初始化數(shù)據(jù)

時,類A的實例的創(chuàng)建職責(zé)就分配給B。(其中,最提倡聚集和包含)-一般用工廠模式或抽象工廠模式作

為替代方案。

一優(yōu)點:整個結(jié)構(gòu)清晰易懂;有利于類或組件的重用;防止職責(zé)的分散;降低耦合性。

避免依賴其他的類來創(chuàng)建自己的對象。

3高內(nèi)聚:為降低類的復(fù)雜程度,簡化控制而提出的面向?qū)ο笤O(shè)計的原則性模式。(其他模式

的根本)

——問題:怎么做才能降低類的復(fù)雜程度,簡化控制?

一一解決方案:緊密相關(guān)的功能(職責(zé))應(yīng)該分配給同一個類。

一優(yōu)點:聚集相關(guān)功能,結(jié)構(gòu)清晰,容易理解;只聚集相關(guān)功能,使得類的職責(zé)單一明

確,從而降低類的復(fù)雜程度,使用簡單。類易于維護(hù);支持低耦合;支持復(fù)用。

4低耦合:為降低類之間的關(guān)聯(lián)程度,適應(yīng)可變性而提出的面向?qū)ο笤O(shè)計的原則性模式。(其

他模式的根本)

—問題:怎樣做才能降低類之間關(guān)聯(lián)程度,適應(yīng)需求的變化呢?

一解決方案:為類分配職責(zé)時,應(yīng)該盡量降低類之間的關(guān)聯(lián)關(guān)系(耦合性)。亦即,應(yīng)

該以降低類之間的耦合關(guān)系作為職責(zé)分配的原則。

~優(yōu)點:獨立性,有利于重用和維護(hù);適應(yīng)需求變化,一旦發(fā)生變化時,可以把影響范

圍縮小到最小范圍。

5控制器:解決事件處理職責(zé)問題的模式。

——問題:在UI層之外,應(yīng)該由哪個類來處理(控制)系統(tǒng)操作(事件)呢?

一解決方案:把系統(tǒng)事件的處理職責(zé)分配給控制器類。擔(dān)當(dāng)控制器類角色的候補類可能

為:系統(tǒng)全體,設(shè)備,子系統(tǒng)等的表現(xiàn)類(FacadeController);系統(tǒng)實踐發(fā)生的用例的控制類,通常被

命名為Handler,Coordinator,Session等。

一優(yōu)點:防止同類職責(zé)的分散。滿足高內(nèi)聚,低耦合原則;有利于共通處理;變化的高

適應(yīng)能力,能把變化的修改范圍控制在最小范圍內(nèi)。增加復(fù)用的潛力,基本思想是控制器對象使外部事件

源和內(nèi)部事件處理的類型和行為相互獨立(解耦);隨時查看用例的狀態(tài),保證系統(tǒng)操作的合法性,或解

釋當(dāng)前活動或操作的狀態(tài)。

6多態(tài)性:擴(kuò)展模式的一?種,通過多態(tài)操作把基于類型的可變行為的定義職責(zé)分配給行為發(fā)生

的類。(命令模式、策略模式、依賴倒置原則)

—問題:根據(jù)類型(類)的不同而發(fā)生變化的行為的定義,應(yīng)該分配給誰?

一解決方案:提倡通過多臺操作把基于類型的可變行為的定義職責(zé)分配給行為發(fā)生的類。

繼承有三種:①父類型子類型(類型多態(tài))②處理差異性(行為多態(tài))③為了復(fù)用(效果多態(tài))

~優(yōu)點:避免重復(fù)代碼;避免重復(fù)的分歧條件;易擴(kuò)展,只要實現(xiàn)了統(tǒng)一的通用接口,

便可實現(xiàn)行為的擴(kuò)展。比顯示的選擇邏輯更為簡單和可靠:在設(shè)計中增加類的數(shù)量:會使代碼不易追蹤;

把多個耦合變?yōu)橐粋€耦合。

7純虛構(gòu):擴(kuò)展模式之一,把非問題領(lǐng)域中的職責(zé)分配給人工定義的類,

一問題:非問題領(lǐng)域中的職責(zé)應(yīng)該分配給誰?或者說,按照信息專家等模式分配職責(zé)時,

存在某些不恰當(dāng)?shù)穆氊晻r,應(yīng)該怎么做?

一解決方案:提倡把那些非問題領(lǐng)域的職責(zé)分配給那些人工生成的或者容易此類職責(zé)的

概念類??梢灾挥行袨闆]有狀態(tài)或只有狀態(tài)沒有行為。

一優(yōu)點:高內(nèi)聚,不必分配問題領(lǐng)域以外的職責(zé)給Domain類,從而保證各Domain類內(nèi)

部功能上的高度聚集性;低耦合,問題領(lǐng)域以外的職責(zé)被分配給第三方非Domain類,一方面可以降低各

Domain類之間的關(guān)聯(lián)程度,另一方面可以比較漂亮地整合系統(tǒng)的各方面的職責(zé);重用性,各Domain類由

于功能上的聚集和關(guān)聯(lián)度的降低,可以更容易地得到重用。

8間接模式:解決類的關(guān)聯(lián)問題的模式。

—問題:為了避免類之間的直接關(guān)聯(lián),應(yīng)該給什么樣的類分配“關(guān)聯(lián)”責(zé)任?

一解決方案:當(dāng)多個類之間存在復(fù)雜的消息交互時,間接模式提倡類之間不直接進(jìn)行消

息交互處理,而是導(dǎo)入第三方類,把責(zé)任(多個類之間的關(guān)聯(lián)責(zé)任)分配給第三方類,降低類之間的耦合

程度。(中介者模式)

一優(yōu)點:高內(nèi)聚,通過把“關(guān)聯(lián)”的功能分散到第三方類,原來的類可以更加關(guān)注自身

功能的實現(xiàn);低耦合,原本關(guān)聯(lián)類之間不直接關(guān)聯(lián),降低類之間的耦合性;高重用性,第三方類對“關(guān)聯(lián)”

功能的集中處理,與原來的類對自身功能的專注,有利于類的重用。

9差異性保護(hù):擴(kuò)展模式之一,它設(shè)計穩(wěn)定的接口應(yīng)對將來可能發(fā)生的變化或其他不安定的因

素。

一一問題:對存在于系統(tǒng),子系統(tǒng),或?qū)ο蟮仍刂械母鞣N變化或不安定的因素,為了不

產(chǎn)生對其他元素的不利影響,在它們中間該怎樣分配職責(zé)?

一一解決方案:提倡在可預(yù)測的變化或不安定因素的周圍,用穩(wěn)定的接口來承擔(dān)職責(zé)。

——優(yōu)點:提高系統(tǒng)對變化的應(yīng)對能力。一旦系統(tǒng)的可預(yù)見的不安定因素發(fā)生變化(比如

追加功能等),只需要生成一個已有的穩(wěn)定接口的實現(xiàn)類就可以了,無需修改原來的類:高內(nèi)聚。具體的

功能在各子類中實現(xiàn),各類的內(nèi)部功能具有高度聚集性;低耦合。用戶類只跟穩(wěn)定接口通信,減少了跟其

它陌生對象的關(guān)聯(lián)的機(jī)會,降低了類之間的耦合性。

6)設(shè)計模式(定義):

一一過去設(shè)計當(dāng)中的經(jīng)驗總結(jié);通常由類與對象組成;對某種思想或原則的應(yīng)用

——設(shè)計模式4要素:名稱,問題,解決和效果

——(百科)一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過分類編目、代碼設(shè)計經(jīng)驗的總結(jié)。使用設(shè)

計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。

7)MVC(畫出樣子、特點):

一一將核心業(yè)務(wù)模型與表現(xiàn)形式和使用這個模型的控制邏輯分離開來

——允許多個視圖分享同一個業(yè)務(wù)數(shù)據(jù)模型

——使得支持多用戶的實現(xiàn)、測試和維護(hù)等變得容易

至少畫出這個圖

CONTROLLER

Takesuserinpjfandfiguresout

whofitmeanstothemodel

MODEL

VIEWThem>delholdsall

thedcto,stateond

GivesyouopresentationHere'*k"ef

一匕加,applicationlo9ic.The

ofthemodel.TheviewANd.modelifobliviousto

usually9eTsthestateTheviewandcontroller,

anddataifneedstoolthoughifprovidesan

displaydirectlyfrominterfacetomanipulate

themodel.andretrieveits

stoteanditcansend

notificationsofstate

chan9tstoobservers.

①TheController

southing

display

Model

BView

rIneedyowJtdtc

informationVeve'iX小小

itM

一最好畫出這個圖

?hterface?

IControllerStrategy

(l<omcontroller)

b____________________二

-modelObjectControllerstrategy-viewObject

(fromcontroller)

I1

StorageSubject-subjectStateObserver

^rommodel)(fromview)

-strategy

I1

模塊化

結(jié)構(gòu)化的內(nèi)聚與耦合類型;

內(nèi)聚(按程度由低到高排列):

?偶然內(nèi)聚:代碼之間沒有任何相關(guān)性(statementsaretogetherbycoincidence)沒有共同的RI的

例子:

A=B+C

GETCARD

PUTOUTPUT

IFB=4THEN

E=0

?邏輯內(nèi)聚:邏輯相似

■Somelogicalconnectionimplied

□example-印ITALLDATA

■Ifthisisthehighestformofbindinginthemodule,thenwillgetintertwined

code

EDIT:PROC(TYPE,DATA)

/*dosomecommonedits*/

IFTYPE=“A”

THEN/*editbytypeArules*/

IFTYPE="B”

THEN/*editbytypeBrules*/

/*dosomemorecommonedits*/

?時間內(nèi)聚:跟邏輯內(nèi)聚相似,但是在時間上有聯(lián)系,比邏輯內(nèi)聚

耦合簡單

□Readroutingdata,setuptable

□Lookupdistancebetweentwoairports<-Datarelationship

Compare:

Get_Distance(Airportl,Airport2)returns(distance)

Iffirsttimeused,thensetuproutingtable

?通訊內(nèi)聚:跟邏輯內(nèi)聚相似,在數(shù)據(jù)上有聯(lián)系

Allelementsrelatedbyareferencetocommondata

□eg,Readandprintinputdata

□"Read"and"Print”areunrelatedfunctions,but

□“inputdata“iscommon.

?順序內(nèi)聚:解決同一個問題

□Readnexttransactionandupdatedatabase

?功能內(nèi)聚:針對相同的目標(biāo)AHoftheelementsarerelatedtothesinglefunction

例子:

□ComputeSquareRoot

□Determineshortestroutetodestination

□CondenseDatabase

?信息內(nèi)聚:

如何判別是哪種內(nèi)聚(用一句話來描述一個模塊):

大于一個動詞,多功能,可能為通訊或者順序內(nèi)聚

有時間詞“first,next-."可能是順序或者時間內(nèi)聚

Doesnothaveasingleobject,Probablylogicallybound

有詞語"Initialize",uCleanup”,暗示為時間耦合.

*用?句話來描述該模塊功能看是否能描述清楚,如果能,可能為功能內(nèi)聚

耦合(按程度由高到低,即由差到好):

?內(nèi)容耦合:Hybridofdataandcontrolelements(混合數(shù)據(jù)和控制元素)

□Modificationofonemodule'scodebyanothermodule

□Thetargetmoduleisverydependentonthemodifyingmodule.

?公共耦合:connectiontoCommonenvironments

比如大家同時使用一個全局變量

?控制耦合:傳遞了數(shù)據(jù)和控制元素

?Stamp耦合:傳遞了除必須以外多余的數(shù)據(jù)

比如只需要數(shù)組的前三個元素,結(jié)果將整個數(shù)組都傳遞過來

?數(shù)據(jù)耦合:傳遞必須的數(shù)據(jù)

面向?qū)ο蟮鸟詈项愋停?/p>

對象級別:

?交互耦合

兩個類之間的簡單的交互耦合:MethodInvoke(消息調(diào)用)orAttributeAccess(屬性訪

問)betweentwoclass

不包括繼承,參數(shù)和屬性不包括類類型

?組件耦合:Thecomponentrelationshipbetweenclassesisdefinedbytheuseofaclassas

domainofsomeinstancevariableofanotherclass,不包括繼承,一般是class級別的。

一般分為四種:

Wholevariable:Aggregation聚合,整體與部分的關(guān)系

Parameter:MethodParameter參數(shù)傳遞

Creator:Creatorinsomemethod'slocal在某個方法中創(chuàng)建一個

Hidden:Givenbyanotherobject由其他對象給的

根據(jù)上面四種,又分為

。Hidden:最差的組件耦合,不明顯

ThecouplingbetweentwoclassesCandC'isratedhiddenifC'showsupneither

inthespecificationnorintheimplementationofCalthoughanobjectofC'isused

intheimplementationofamethodofC

Asimilarproblemisencounteredifthereturnvalueofamethodinvocationis

immediatelyusedasinputparameterinanothermethodinvocation

Demeter法則:

-Youcanplaywithyourself.

“Youcanplaywithyourowntoys,outyoucan'ttakethemapart

“Youcanplaywithtoysthatweregiventoyou.

“Youcanplaywithtoysyou'vemadeyourself.

1.調(diào)用自己的函數(shù)

2.調(diào)用自己子對象的函數(shù)

3.別人給的,要有接受的本地對象之后才能使用

4.可以使用自己創(chuàng)建的

修改后:

?Scattered(分散):WeratetwoclassesCandC'asscatteredcoupledifC,isusedas

domaininthedefinitionofsomelocalvariableorinstancevariableintheimplementationof

CyetC'isnotincludedinthespecificationofC

需要讀完所有的代碼

不可避免

?Specified(規(guī)格化):WeratetwoclassesCandC'asspecifiedcoupledifC'isincluded

inthespecificationofCwheneveritisacomponentofC(在接口中使用)比分散耦合好,不需

要讀懂全部代碼

解決方案:GetSpecified,DesignbyContractSufferedInterfaceVSRequiredInterface

■SufferedInterface:Specified

■RequiredInterface:Used

?繼承耦合

可以分為三類:

?Modification(修改):Modifyingwithoutandrulesandrestricts

最差的繼承耦合

Ifaclientusingaparentref,theparentandchiIdmethodareal1needed

□Implicit

□Therearetwoconnections,morecomplex

Harmtopolymorphism

?Refinement(完善):根據(jù)規(guī)則修改繼承的部分再加上額外的實現(xiàn)

■Ifaclientusingaparentref,thewholeparentandrefinementof

childareneeded

□1+connections

Necessary!

?Extension(擴(kuò)展):thesubclassonlyaddsmethodsandinstancevariablesbutneither

modifiesnorrefinesanyoftheinheritedones

■Ifaclientusingaparentref,onlytheparentisneeded

□1connection

繼承如何減少耦合??

Remember:inRefinementandExtensioninheritancecoup!ing,theinteractioncoupling

betweensuper-classandsubclassisignored

□Object-levelcouplingremain,butclass-levelcouplingreduced

Ainvokes

AsubClassOf

A-BB-CB''-CfA-B''B-C,A-CA-C'

類級別:

?CBO(Couplingbetweenobjectclasses):

Acountofthenumberofotherclasses:

□whichaccessamethodorvariab1einthisclass,or

□containamethodorvariableaccessedbythisclass

□NotincludingInheritance

Wanttokeepthislow

?RFC(Responseforaclass):

方向很重要,是對別的類有很多引用還是自己被別的類引用

?個對象接收到信息時實際上最終引起的方式的執(zhí)行數(shù)目,不包括繼承

keepthislow

?MPC(Messagepassingcoupling):

一個類中定義在局部的send語句數(shù)目。

Thenumberofsendstatementssentoutfromaclassmayindicatehowdependentthe

implementationofthelocalmethodsisonthemethodsinotherclasses.”

keepthislow

?DAC(Dataabstractioncoupling):

ThenumberofattributehavinganADTtypedependentonthedefinitionsofotherclasses

(用了多少類作為自己的數(shù)據(jù)類型)

keepthislow

?Ceand&D(efferentandafferentcoupling)傳出和傳入耦合:

□Ca:Thenumberofclassesoutsidethiscategorythatdependuponclasseswithin

thiscategory.

□Ce:Thenumberofclassesinsidethiscategorythatdependuponclassesoutside

thiscategory

keepthislow

?DIT(DepthoftheInheritancetree):

□themaximumlengthfromthenodetotherootofthetree

□asDITgrows,itbecomesdifficulttopredictbehaviorofaclassbecauseofthe

highdegreeofinheritance

□Positively,largeDITvaluesimplythatmanymethodsmaybereused

keepthis1ow

?NOC(Numberofchildren):

□countofthesubclassesimmediatelysubordinatetoaclass

□asNOCgrows,reuseincreases

□asNOCgrows,abstractioncanbecomediluted

□increaseinNOCmeanstheamountoftestingwillincrease

對給出的例子:考試方式

?判斷其內(nèi)聚和耦合的類型,并將其修正為正確的類型。

?分析其Connection類型,計算不同Connection類型的數(shù)量。

(這段代碼對其他代碼有什么樣的connection,分析connection的類型:包括共享的、公共

環(huán)境,模塊間的、方法調(diào)用的;從面向?qū)ο蠼嵌扔袑ο笾g的,影藏的,聚合的)

3信息隱藏

對簡單的應(yīng)用,按照“處理流程”與“信息隱藏”兩種方式分別給出設(shè)計描述。

(什么是信息隱藏,信息隱藏的應(yīng)用。告訴你要做一件什么樣的事,用上述兩種方法設(shè)計)

可以參考PPt2的KW1C例子(兩種模塊化的方式)(找了半天沒找到什么相關(guān)內(nèi)容)

InformationHiding理解:

信息隱藏是為了讓系統(tǒng)的模塊可以獨立并行的開發(fā),既可以獨立的被測試,優(yōu)化,修改和理解.他減輕

r維護(hù)的負(fù)擔(dān),且做到了調(diào)用某一模塊時不影響其它模塊,提到了軟件的可重用性,同時降低了構(gòu)建大型系

統(tǒng)的風(fēng)險.

每個模塊隱藏模塊designdecision的實現(xiàn)(特別是設(shè)計的可變性)

所有的designdecisionsare相互獨立,不依賴.

兩種方式進(jìn)行模塊化的Bxample:KWIC

KWICModularization1

InputmediumOutputmedium

KWICModularization2

Input

InputmediumOutputmedium

兩種模塊化的方法

■模塊化i

處理流程中每個重要步驟作為一個模塊

■模塊化2

根據(jù)信息隱藏原則:

每個模塊有一個或多個secret

Lines

■howcharacters/linesarestored

CircularShifter

■algorithmforshifting,storageforshifts

Alphabetizer

■algorithmforalpha,lazinessofalpha

每個模塊有自己的designdecision并且其他模塊不可見

兩種模塊化的對比:

1總體比較:

□Note:bothsystemsmightsharethesamedatastructuresandthesamealgorithms

□Differencesareinthewaytheyaredividedintoworkassignments

□Systemsaresubstantiallydifferentevenifidenticalintherunnable

representation

■Possiblebecausetherunnablerepresentationisusedonlyforrunning

■Otherrepresentationsareusedfor

■Changing

■Documenting

■Understanding

2可變性比較:

■Designdecisionsthatmaychange

□Inputformat:(1,1)

□Al1linesstoredinmemory:(all,1)

□Packcharacters4toaword:(all,1)

□Makeanindexforcircularshiftsratherthanstorethem:(3,1)

□Alphabetizeonce,ratherthaneither:(3,1)

■Searchforeachitemasneeded

■Partiallyalphabetize,partiallysearch

3獨立開發(fā)比較:

■模塊化1

□Mustdesignal1datastructuresbeforeparalleiworkcanproceed

□Complexdescriptionsneeded

?模塊化2

□Mustdesigninterfacesbeforeparallelworkcanbegin

□Simpledescriptionsonly

4可理解性比較:

■模塊化2更好

□Parnassubjectivejudgment

□Lesscoup!ingamongmodules

■Programmingtointerfaces

總結(jié):

對簡單的應(yīng)用,解釋其MODULEGUIDE。(什么是MODULEGUIDE,每個部分的作用)

ModuleGuide

當(dāng)系統(tǒng)有大量交互的模塊時(一個有上百個模塊的復(fù)雜系統(tǒng)),由許多模塊行為構(gòu)成的系統(tǒng)的集體

行為很難被理解。

解決方法是創(chuàng)建一個層次結(jié)構(gòu)的文檔一一ModuleGuide。它提供一個好的文檔支持,從而降低了

系統(tǒng)維護(hù)的成本。

對于每個模塊,moduleguide應(yīng)該說明:

(secret)1每個模塊所包含的SecretsoSecrets包括primary和secondary

Primarysecret是模塊內(nèi)部隱藏的信息

Secondarysecret是實現(xiàn)模塊的實現(xiàn)決策

(role)2每個模塊在整個系統(tǒng)中扮演的角色。

(facilities)3每個模塊實現(xiàn)的功能。

作用

如果沒有moduleguide,職責(zé)將無法追溯到確定的一個或兩個模塊;moduleguide幫助我們在設(shè)

計是相對的減少失誤。

Moduleguide幫助系統(tǒng)的開發(fā)人員和維護(hù)人員更容易的找到被change所影響的模塊。

其他文檔:

Modu1eInterfaceDocument:精確完整的描述每個模塊的接口

ModuleDesignDocument:描述每個模塊實現(xiàn)的內(nèi)部設(shè)計

RequirementsDocument:ModuleGuide根據(jù)它查找相關(guān)的changes

4軟件體系結(jié)構(gòu)風(fēng)格:

描述或比較相關(guān)風(fēng)格(描述、比較、優(yōu)缺點、使用特點)

>總體分類

Acatalogofaichitectiiralstylestbi

modules

ImeraclionMethods

InteractionFlowShareData

(BlackHuard.

________________IRepository)

ControlFlow(BatchSequential.

PipeandFiller)

II.

Explicit(CallandReturn)Implicit

IInvocation

MainprogramLayeredObject,

andsubroutine'Oriented

主程序和子路徑:層次式分解程序,任?部件由父類控制

■Components:procedures,functionsfnmodule.

■Connectors:它們之間的調(diào)用

■Constraints:a.層次分解

二〉基于“定義一使用”關(guān)系

b.單線程控制

c,隱式的子系統(tǒng)結(jié)構(gòu)

二>子程序集成進(jìn)模塊中

d.Hierarchicalreasoning

=>子系統(tǒng)的正確性基于調(diào)用的正確性

■優(yōu)點

券處理過程清晰,易于理解

=>很強的正確性控制

■缺點

二>難于改變和重用

二>處理不好會變成公共耦合

■應(yīng)用場景

=》順序化處理系統(tǒng)

=>對正確性要求高的系統(tǒng)

面向?qū)ο螅〝?shù)據(jù)抽象):利用封裝實現(xiàn)信息隱藏和可修改,只保留有限接口

n

n

n

.

Components:object或者module

Connectors:function或者invocations(methods).

Constraints:a.數(shù)據(jù)表示對其他對象隱藏

b.對象必須保證數(shù)據(jù)表示的一致性

C.每個對象都是自治的

優(yōu)點

a.因為對象隱藏了數(shù)據(jù)表示,所以能夠在不影響客戶的情況下修改實現(xiàn)

=>數(shù)據(jù)隱藏(internaldatarepresentationsarenotvisibletoclients)

b.可以將系統(tǒng)設(shè)計成自治的相互作用的代理集合

二)Methodsareinvokedontheobjects,maintaininginvariants.

=>Candecomposeproblemsintosetsofinteractingagents

■缺點

a.需要在知道對象identity的情況下才能完成方法調(diào)用

=>Whentheidentityofanobjectchangesitisnecessarytomodifyall

objectsthatinvokeit.

b.可能產(chǎn)生副作用,如:

=>E.g.,AandBbothuseobjectQthen8saffecton6*looklikeunexpected

sideeffectstoA.

■應(yīng)用

=>Suitableforapplicationsinwhichacentralissueisidentifyingand

protectingrelatedbodiesofinformation(data).

分?jǐn)?shù)據(jù)表示和相關(guān)操作被封裝在抽象數(shù)據(jù)類型中

二〉Examples:

抽象數(shù)據(jù)類型

PipeandFilterArchitecturalStyle:

Components:過濾器

Connectors:管道

Constraints:a.任何兩個過濾器不會共享數(shù)據(jù)

b.過濾器不知道前后的過濾器,只知道自己的輸入輸出

c.正確性不依賴于過濾器的順序

Advantages

二〉易于理解Easytounderstandtheoverallinput/outputbehaviorofasystem

asasimplecompositionofthebehaviorsoftheindividualfilters.

=>支持復(fù)用Theysupportreuse,sinceanytwofilterscanbehookedtogether,

provided

溫馨提示

  • 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

提交評論