體系結(jié)構(gòu)有用的概念_第1頁
體系結(jié)構(gòu)有用的概念_第2頁
體系結(jié)構(gòu)有用的概念_第3頁
體系結(jié)構(gòu)有用的概念_第4頁
體系結(jié)構(gòu)有用的概念_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、體系結(jié)構(gòu)的概念部件、連接件、配置高層抽象的作用高層結(jié)構(gòu)需求(質(zhì)量屬性)、項目環(huán)境、商業(yè)目標(biāo)交流媒介的作用關(guān)注點問題、候選設(shè)計、理由、解決方案指導(dǎo)開發(fā)的作用設(shè)計決策軟件體系結(jié)構(gòu)表示軟件高層架構(gòu),包括靜態(tài)和動態(tài)屬性:指該系統(tǒng)的結(jié)構(gòu),包括軟件組件,及其外部可見屬性,以及組件間的關(guān)系;由計算組件和組件間交互組成;組件:是一個構(gòu)造塊,通過接口描述其服務(wù)的計算或數(shù)據(jù)倉庫的集合。常見組件:類,函數(shù),模塊,包,層,文件,數(shù)據(jù)庫,客戶端,服務(wù)器組件是邏輯元素,粒度可自由控制,而對象是實現(xiàn)元素,粒度較小,且兩者抽象程度不同。如何定義組件:組件的函數(shù)和職責(zé),以及接口必須被定義核心設(shè)計類需要被定義:核心類實現(xiàn)組件主要

2、功能,實現(xiàn)接口,但是只有類的Skeleton被提供定義,具體內(nèi)容需要設(shè)計階段給出連接器:允許組件間交互的構(gòu)造塊(不是簡單的接口),降低組件間的耦合,同時連接互相不兼容的組件連接器包括顯式的和隱式的,有時僅僅是一個通道,有時包括自己的邏輯和復(fù)雜度常見連接器:(Implicit)事件,C/S中間件,消息和消息總線,共享變量,過程調(diào)用(本地、遠(yuǎn)程),管道,(Explicit)代理,適配器關(guān)注點在開發(fā)者和其他涉眾間提供一個共享的精神模型,同時面向問題域和解空間,保證需求可以追蹤到實現(xiàn)是客戶的代理,由客戶的需求提煉而來,不同的涉眾關(guān)注系統(tǒng)的不同方面,軟件架構(gòu)使得對于一個大且復(fù)雜系統(tǒng)的不同關(guān)注可以被表達(dá)、

3、協(xié)商達(dá)成一致,從而便于管理表現(xiàn)功能和非功能需求(質(zhì)量)如何被滿足質(zhì)量的種類:系統(tǒng)質(zhì)量:availability, modifiability, performance, security, testability, usability.商業(yè)質(zhì)量:投放市場的時間,投入&回報,計劃周期,目標(biāo)市場,首次展出計劃,遺留系統(tǒng)整合建筑質(zhì)量:觀念一致性,正確性&完整性,可建造性反映設(shè)計決策往往根據(jù)架構(gòu)師的知識背景實現(xiàn)建立了軟件設(shè)計和實現(xiàn)的背景,解釋一種方法被采用的根本原因,它有什么影響結(jié)構(gòu)決策是最基本的決策,改變它將會引起很多連鎖的反應(yīng)架構(gòu)定義了實現(xiàn)的約束(組件分解,外部可見特性和接口),限定了一個系統(tǒng)的質(zhì)

4、量屬性,決定了開發(fā)人員的結(jié)構(gòu)組成,對于系統(tǒng)資源分配的決策約束了實現(xiàn)使得修改變得容易控制,方便于系統(tǒng)原型的演化用例驅(qū)動的體系結(jié)構(gòu)設(shè)計方法1.選擇使用場景:約束和風(fēng)險(用例視圖)2.確定主要層和他們的責(zé)任(邏輯視圖)3.分配行為類(邏輯視圖)4.明確子系統(tǒng)結(jié)構(gòu),層次,確定接口(執(zhí)行期)5.定義是否分布和并發(fā)(部署視圖,過程視圖) 6.實現(xiàn)體系結(jié)構(gòu)原型7通過用例選擇測試方案8體系結(jié)構(gòu)評估以上過程具有迭代的特征。1-7關(guān)注功能需求。8關(guān)注質(zhì)量需求通過需求工程,得到明確的用例文檔后,依次進行如下活動:全局分析(用例):尋找影響體系結(jié)構(gòu)的Factor:整合方案,技術(shù)特征,通用和領(lǐng)域相關(guān)硬件的改變,軟件技術(shù)

5、的改變,資源限制,容易增刪特性,容易改變算法,高性能,實時性,可恢復(fù)性,錯誤診斷,多開發(fā)和目標(biāo)平臺,體系結(jié)構(gòu)完整性,并發(fā)開發(fā),得到原型的成本。(記住幾個,全局分析,比如*,*)。邏輯視圖設(shè)計 得到一些能解決基本問題的邏輯模塊。構(gòu)件視圖設(shè)計 將邏輯模塊轉(zhuǎn)化成構(gòu)件,分層,最后會增加一些構(gòu)件,或者層。如下進程視圖設(shè)計將構(gòu)件轉(zhuǎn)化為進程,如果是單進程系統(tǒng),此過程略去。進程間有些線,表示進程間通信,一般式Message,共享內(nèi)存或者RPC。 部署視圖設(shè)計 有了構(gòu)件和層,決定構(gòu)件放在哪些機器上。體系結(jié)構(gòu)分析步驟目的:彌補規(guī)格需求和SA軟件體系結(jié)構(gòu)件的gap差距;重點關(guān)注體系結(jié)構(gòu)設(shè)計需求(ADR: archi

6、tecture design requirements)GA:分析factors將ADR和軟件體系結(jié)構(gòu)的結(jié)構(gòu)化模型同系統(tǒng)解決方案策略模型(SSS: system solution strategies)聯(lián)系起來GA:開發(fā)策略用SSS指導(dǎo)體系結(jié)構(gòu)建立:通過指導(dǎo)比較和選擇解決方案策略“4+1”開發(fā)過程后:根據(jù)SSS給每個視圖做決策支持軟件開發(fā)過程的其他部分:ADR和SSS對軟件開發(fā)其他過程有影響。體系結(jié)構(gòu)分析步驟:Global Analysis從軟件需求規(guī)格到軟件體系結(jié)構(gòu)的結(jié)構(gòu)化視圖的過程設(shè)計和描述系統(tǒng)的結(jié)構(gòu)利用互補的視圖來減少設(shè)計和理解體系結(jié)構(gòu)的復(fù)雜性不同視圖有不同關(guān)注點,并不是系統(tǒng)所有方面都要

7、被同事考慮Global Analysis.GA產(chǎn)生描述設(shè)計決策上下文和規(guī)則的文檔標(biāo)識可能影響體系結(jié)構(gòu)的外部影響因素和關(guān)鍵的需求分析產(chǎn)生設(shè)計體系結(jié)構(gòu)的策略2a分析因素(constraints and quality) Three (3) step procedureStep 1:識別可能影響系統(tǒng)體系結(jié)構(gòu)的需求,可以參考SRS,但是不全面產(chǎn)品因素:質(zhì)量需求組織因素:業(yè)務(wù)質(zhì)量技術(shù)因素:系統(tǒng)和業(yè)務(wù)質(zhì)量Step 2:描述因素和其靈活性,可變性Descriptions, flexibility, changeabilityStep3:分析factor的影響相關(guān)因素和影響范圍2b建立開發(fā)策略Three (3

8、) steps procedure 產(chǎn)生issue cardStep 1: s識別問題和影響因素將因素和問題聯(lián)系分析限制和約束Step 2: 建立解決方案和具體策略Step 3:識別相關(guān)策略:是否相互影響分析他們,得出設(shè)計體系結(jié)構(gòu)的策略模塊化模塊化:模塊化是指解決一個復(fù)雜問題時自頂向下逐層把系統(tǒng)劃分成若干模塊的過程。每個模塊完成一個特定的子功能,所有的模塊按某種方法組裝起來,成為一個整體,完成整個系統(tǒng)所要求的功能。模塊是一個程序語句的集合,有一個名字,系統(tǒng)的其它部分可以通過這個名字調(diào)用它;易于實現(xiàn)和維護模塊化指模塊可以被“獨立”的對待:能單獨理解每一個模塊,能單獨使用或復(fù)用每個模塊,能單獨構(gòu)建

9、每個模塊,一個模塊的失敗不會影響其它模塊模塊化應(yīng)該注意: 任務(wù)職責(zé)單一分配而子程序分配; 對自己可見的設(shè)計決策對外部模塊不可見;實現(xiàn)上支持靈活性;不代表處理步驟;高內(nèi)聚低耦合。指解決一個復(fù)雜問題時自頂向下逐層把系統(tǒng)劃分成若干模塊的過程。每個模塊完成一個特定的子功能,所有的模塊按某種方法組裝起來,成為一個整體,完成整個系統(tǒng)所要求的功能。模塊具有以下幾種基本屬性:接口、功能、邏輯、狀態(tài),功能、狀態(tài)與接口反映模塊的外部特性,邏輯反映它的內(nèi)部特性。是一種責(zé)任分配,而不是單純的子程序;代表具體對自身的設(shè)計決策而不被其他模塊知道支持實現(xiàn)中的靈活性不要描述過程的步驟高內(nèi)聚、低耦合模塊是可以被獨立對待的:即可

10、以獨立的理解、使用(或復(fù)用)、編譯等;一個模塊的錯誤不會影響其他模塊;模塊的改變也不會產(chǎn)生連鎖反應(yīng)。抽象和分解:抽象是把不要的東西扔掉,去掉不重要的,隱藏細(xì)節(jié);基本設(shè)計原則:每個模塊的實現(xiàn)都是秘密;每個模塊的接口被抽象而精確地描述;我們抽象出可能會變化的實現(xiàn)細(xì)節(jié);我們將那些不能被隱藏的變化部分進行參數(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ù)),對于不需要

11、這些信息的其他模塊來說,是透明的。通過信息隱藏,可以定義和實施對模塊的過程細(xì)節(jié)和局部數(shù)據(jù)結(jié)構(gòu)的存取限制。模塊間關(guān)系:Connection指向定義在別處的某個label或地址的引用,結(jié)構(gòu)化的定義。耦合是衡量模塊間關(guān)系復(fù)雜度的度量Connection數(shù)量接口最小化(Minimize Interfaces);Degree衡量耦合兩個模塊的連接強度。Connection的Degree衡量:引用模塊本身(接口)還是其內(nèi)部(實現(xiàn));被傳送和接收的是什么:數(shù)據(jù)、印記、控制、完全依賴模塊的Connection:與公共環(huán)境(General,Scoped):在共有這個連接的模塊間建立耦合;封裝將會降低耦合抽象和分

12、解,將潛在共享元素分組,限制每一組的訪問途徑到可能的最小模塊子集。假設(shè)N1+N2=N, M1+M2=M如果M個模塊共享N個元素潛在連接數(shù)N*M,即(N1+N2) *(M1+M2)= N1*M1+N2*M2+ N1*M2+N2*M1如果M1個模塊共享N1個元素,M2個模塊共享N2個元素潛在連接數(shù)(N1*M1+N2*M2)與其他模塊:連接復(fù)雜性取決于陳述或者理解它需要多少信息。顯性關(guān)系好于隱形的,最好死語法上顯性的;越多Syntactic單元耦合度越高,更簡單的接口。引用模塊本身的連接耦合度低于引用別的模塊內(nèi)部元素的連接針對接口編程模塊化原則:職責(zé)分配,與自己相關(guān)的設(shè)計決策來表示而不知道其他模塊,

13、提供實現(xiàn)上的靈活性,不用處理步驟表示,高內(nèi)聚低耦合結(jié)構(gòu)化的內(nèi)聚與耦合類型; 耦合(按程度由高到低,即由差到好): 內(nèi)容耦合:Hybrid of data and control elements(混合數(shù)據(jù)和控制元素)Modification of one modules code by another moduleThe target module is very dependent on the modifying module. 公共耦合:connection to Common environments 比如大家同時使用一個全局變量 控制耦合:傳遞了數(shù)據(jù)和控制元素 Stamp 耦合:傳遞

14、了除必須以外多余的數(shù)據(jù) 比如只需要數(shù)組的前三個元素,結(jié)果將整個數(shù)組都傳遞過來 數(shù)據(jù)耦合:傳遞必須的數(shù)據(jù)耦合(由上而下 耦合度升高,越來越不好):數(shù)據(jù)耦合(Data Coupling)剛剛好的數(shù)據(jù);印記耦合(Stamp Coupling)數(shù)據(jù)多于必須;控制耦合(Control Coupling)除數(shù)據(jù)外傳遞控制元素;公共耦合(Common Coupling)內(nèi)容耦合(Content Coupling)數(shù)據(jù)和控制元素混合;通過一個模塊修改另一個模塊代碼,或者目標(biāo)模塊對于進行修改的模塊非常依賴數(shù)據(jù)耦合明顯優(yōu)于印記耦合,數(shù)據(jù)耦合也優(yōu)于控制耦合,但印記耦合和控制耦合需要視情況而定;內(nèi)容耦合:如果發(fā)生下列

15、情形,兩個模塊之間就發(fā)生了內(nèi)容耦合一個模塊直接訪問另一個模塊的內(nèi)部數(shù)據(jù); 一個模塊不通過正常入口轉(zhuǎn)到另一模塊內(nèi)部; 兩個模塊有一部分程序代碼重迭(只可能出現(xiàn)在匯編語言中);一個模塊有多個入口。 公共耦合:have read and write access to the same global data 控制耦合:if module 1 can directly affect the execution of module 2, e.g.,module 1 passes a “control parameter” to module 2 with logical cohesion或者模塊2的返

16、回代碼不僅指示成功或失敗而且指示模塊1(calling module)執(zhí)行一些動作。 (such as writing an error message in the case of failure).標(biāo)記耦合:一組模塊通過參數(shù)表傳遞記錄信息,就是標(biāo)記耦合。這個記錄是某一數(shù)據(jù)結(jié)構(gòu)的子結(jié)構(gòu),而不是簡單變量。數(shù)據(jù)耦合:一個模塊訪問另一個模塊時,彼此之間是通過簡單數(shù)據(jù)參數(shù) (不是控制參數(shù)、公共數(shù)據(jù)結(jié)構(gòu)或外部變量) ,或者無多余的信息被傳遞。舉例公共耦合內(nèi)聚得到獨立模塊的方法:減少不在同一模塊內(nèi)元素之間的關(guān)系,增加在同一模塊內(nèi)元素之間的關(guān)系;聯(lián)結(jié)(Binding)是衡量內(nèi)聚的度量值。類型(由上至下越來

17、越差好,第一個最差,后兩個最好):偶然(Coincidental):沒有Binding,語句湊巧放在一起邏輯(Logical):通過邏輯相似性binding,比如都是編輯,典型的例子:如果是A,則按A規(guī)則編輯;如果是B,則按B規(guī)則編輯。時序/臨時(Temporal):通過邏輯相似性和時間binding,即元素間有時序關(guān)系,典型例子:初始化或終止方法通信(Communicational):其實與時序比較沒有很明確的優(yōu)劣關(guān)系;通過邏輯相似性和數(shù)據(jù)binding,元素間共用數(shù)據(jù)順序(Sequential):解決同一個問題來binding,一個元素的輸出是另一個的輸入;比上面的耦合都好,因為Same的

18、比Similarity的binding強功能(Functional):通過共同的一個目標(biāo)binding,所有元素與一個功能相關(guān),最好的內(nèi)聚;典型例子:計算平方根,最短路徑問題,壓縮數(shù)據(jù)庫;適用于N:M問題信息(Informational)類型判斷方法:用一句話描述模塊,復(fù)合語句動詞數(shù)大于1,多于一個功能,很可能是交互或順序;有時間詞語“第一”、“接著”等等,很可能是順序或者時序;沒有單一目標(biāo),很可能是邏輯。Coincidental cohesion:one supporting tasks that have no meaningful relationship to one anotherL

19、ogical cohesion:又例如:Go by Car Go by Train Go by Boat Go by Plane Temporal cohesion:one supporting tasks that are all related in time例如 “Do All Startup Activities,” or “Do All Shutdown Activities”Procedural cohesion:all the operations it performs are related to a sequence of steps performed in the pr

20、ogram.例如:“Prepare for Holiday Meal:”Clean Utensils from Previous Meal Prepare Turkey for Roasting Make Phone Call Take Shower Chop Vegetables Set Table 代碼重復(fù):Communicational cohesion:a module performs operations related to a sequence of steps performed in the program (see procedural cohesion) AND all

21、 the actions performed by the module are performed on the same data.例如module supporting the activities Find Title of Book Find Price of Book Find Publisher of Book Find Author of Book Functional cohesion:focuses on exactly one goal or “function”例如Compute Cosine of AngleInformational cohesion:Informa

22、tional cohesion describes a module as performing a number of actions, each with a unique entry point, independent code for each action, and all operations are performed on the same data.模塊里的每一個方法只能執(zhí)行一個動作內(nèi)聚(按程度由低到高排列):偶然內(nèi)聚:代碼之間沒有任何相關(guān)性(statements are together by coincidence)沒有共同的目的 例子: A = B + CGET CA

23、RDPUT OUTPUTIF B = 4 THEN E = 0 邏輯內(nèi)聚:邏輯相似Some logical connection impliedexample - EDIT ALL DATAIf this is the highest form of binding in the module, then will get intertwined codeEDIT: PROC (TYPE, DATA)/* do some common edits */IF TYPE = “A”THEN /* edit by type A rules */IF TYPE = “B”THEN /* edit by

24、 type B rules */* do some more common edits */時間內(nèi)聚:跟邏輯內(nèi)聚相似,但是在時間上有聯(lián)系,比邏輯內(nèi)聚耦合簡單Read routing data, set up tableLook up distance between two airports =1,那么,這個類應(yīng)該被分解判斷其內(nèi)聚和耦合的類型,并將其修正為正確的類型。分析其Connection類型,計算不同Connection類型的數(shù)量。Interaction coupling:類之間的方法調(diào)用或?qū)傩栽L問,不包括繼承,屬性和參數(shù)不含class type Component coupling:

25、by the use of a class as domain of some instance variable of another classWhole variable: AggregationParameter: Method ParameterCreator: Creator in some methods localHidden: Given by another objectHidden :C不在C的規(guī)格說明中也不在C的實現(xiàn)中,但C的一個方法的使用中使用到了CScattered: 在實現(xiàn)中但不在規(guī)格說明中Specific :在實現(xiàn)中且在規(guī)格說明中Inheritance coup

26、lingModification inheritance coupling:無規(guī)則和限制的修改 2 connectionsRefinement inheritance coupling: 根據(jù)規(guī)則定義新的 1+connections (whole parent and refinement of child)Extension inheritance coupling: 只增加不修改 1connection (whole parent)對給出的例子:判斷其內(nèi)聚和耦合的類型,并將其修正為正確的類型。參考筆記改進: content coupling例如Part of program handles

27、 lookup for customer.When customer not found, component adds customer by directly modifying the contents of the data structure containing customer data.Improvement:When customer not found, component calls the AddCustomer() method that is responsible for maintaining customer data.Common couplingEach

28、source process writes directly to global data store. Each sink process reads directly from global data store.Improvement : Data manager component is responsible for data in data store. Processes send data to and request data from data manager.Stamp couplingThe print routine of the customer billing a

29、ccepts a customer data structure as an argument, parses it, and prints the name, address, and billing information.Improvement :The print routine takes the customer name, address, and billing information as an argument.Logical cohesionA component reads inputs from tape, disk, and network. All the cod

30、e for these functions are in the same component. Operations are related, but the functions are significantly different.Improvement:A device component has a read operation that is overridden by sub-class components. The tape sub-class reads from tape. The disk sub-class reads from disk. The network s

31、ub-class reads from the network.Temporal cohesionA system initialization routine: this routine contains all of the code for initializing all of the parts of the system. Lots of different activities occur, all at init time.Improvement:A system initialization routine sends an initialization message to

32、 each component.Each component initializes itself at component instantiation time.判斷其內(nèi)聚和耦合的類型,并將其修正為正確的類型。分析其Connection類型,計算不同Connection類型的數(shù)量。(這段代碼對其他代碼有什么樣的connection,分析connection的類型:包括 共享的、公共環(huán)境,模塊間的、方法調(diào)用的;從面向?qū)ο蠼嵌扔袑ο笾g的,隱藏的,聚合的)分析其Connection類型,計算不同Connection類型的數(shù)量。模塊間的connectionTo Common environment

33、sGeneral, ScopedTo other module對象的connection聚合的connection繼承的connection模塊間connection:針對公共環(huán)境: 共享變量,共享數(shù)據(jù):1模塊對與其共享數(shù)據(jù)的其他模塊之間的耦合: 一個模塊的錯誤傳遞給所有關(guān)聯(lián)模塊, 理解一個模塊需要其他模塊,可理解性差; 難以復(fù)用2在公共環(huán)境中每個元素的增加會很大的影響整個系統(tǒng)的復(fù)雜度3一個良好構(gòu)造的系統(tǒng),通過定義好的接口來傳遞變量比拓展使用公共或者共享變量更加有效和易于維護。共有-私有針對其他模塊:調(diào)用方法,變量:模塊間connection計算:如果M個模塊共享N個數(shù)據(jù),則有M*N個conn

34、ections如果M1個模塊共享N1個數(shù)據(jù),M2個模塊共享N2個數(shù)據(jù),則有N1*M1+N2*M2個connections(M1+M2=M, N1+N2=N) 封裝可以降低耦合。信息隱藏指在設(shè)計和確定模塊時,使得一個模塊內(nèi)包含的特定信息(過程或數(shù)據(jù))decision,這個decision只有模塊內(nèi)部了解,對于不需要這些信息的其他模塊來說,是透明的,這樣修改decision時,不會產(chǎn)生連鎖反應(yīng)。軟件體系結(jié)構(gòu)(三個不同方面):從高層結(jié)構(gòu)、關(guān)注點和設(shè)計決策3個不同方面來理解體系結(jié)構(gòu);從高層結(jié)構(gòu)方面理解,軟件體系結(jié)構(gòu)是部件、連接件和配置組成的,其中部件和連接件是核心的元素,而配置描述這兩者的適配情況,這

35、一方面強調(diào)了其作為高層抽象的作用;從關(guān)注點方面來理解,軟件體系結(jié)構(gòu)包括需求(質(zhì)量屬性)、項目環(huán)境和商業(yè)目標(biāo),這一方面體現(xiàn)了不同涉眾對于軟件體系結(jié)構(gòu)的要求,強調(diào)了其作為交流媒介的作用;從設(shè)計決策方面來理解,軟件體系結(jié)構(gòu)需說明問題、候選設(shè)計、理由和解決方案,這是體系結(jié)構(gòu)形成的理由,強調(diào)了其指導(dǎo)開發(fā)的作用。信息隱藏:一種設(shè)計原則。每一個模塊都隱藏一個重要的設(shè)計決策,只有模塊的組成部分才知道細(xì)節(jié)。所有的設(shè)計決策都是相互獨立的。這樣如果一個設(shè)計決策改變,程序的其它部分不用做擴展的修改。這種保護機制包括提供一個穩(wěn)定的接口,隱藏實現(xiàn)即易改變的細(xì)節(jié)。(來源:維基+ppt) 信息隱藏的原則每一個模塊的是實現(xiàn)都是

36、一個秘密每一個模塊的接口都抽象且精確的描述從可能改變的實現(xiàn)細(xì)節(jié)中抽象把不能隱藏的可變部分參數(shù)化最有可能改變的設(shè)計領(lǐng)域硬件依賴輸入輸出格式非標(biāo)準(zhǔn)語言特性和庫函數(shù);困難的設(shè)計和實現(xiàn)領(lǐng)域復(fù)雜數(shù)據(jù)結(jié)構(gòu),被不止一個類使用的數(shù)據(jù)結(jié)構(gòu),或者你還沒有得到滿意設(shè)計的數(shù)據(jù)結(jié)構(gòu)復(fù)雜邏輯全局變量數(shù)據(jù)大小限制,例如數(shù)組聲明和循環(huán)限制;業(yè)務(wù)規(guī)則;計算機系統(tǒng)嵌入過程對簡單的應(yīng)用,按照“處理流程”與“信息隱藏”兩種方式分別給出設(shè)計描述。(什么是信息隱藏,信息隱藏的應(yīng)用。告訴你要做一件什么樣的事,用上述兩種方法設(shè)計) 可以參考ppt2的KWIC例子(兩種模塊化的方式)(找了半天沒找到什么相關(guān)內(nèi)容)Information Hid

37、ing 理解:信息隱藏是為了讓系統(tǒng)的模塊可以獨立并行的開發(fā),既可以獨立的被測試,優(yōu)化,修改和理解.他減輕了維護的負(fù)擔(dān),且做到了調(diào)用某一模塊時不影響其它模塊,提到了軟件的可重用性,同時降低了構(gòu)建大型系統(tǒng)的風(fēng)險.每個模塊隱藏模塊design decision的實現(xiàn)(特別是設(shè)計的可變性)所有的design decisions are 相互獨立,不依賴.兩種方式進行模塊化的Example:KWIC信息隱藏的原則每一個模塊的是實現(xiàn)都是一個秘密每一個模塊的接口都抽象且精確的描述從可能改變的實現(xiàn)細(xì)節(jié)中抽象把不能隱藏的可變部分參數(shù)化典型例子:KWIC處理流程(功能)信息隱藏:比較:兩種模塊化的方法模塊化1處理

38、流程中每個重要步驟 作為 一個模塊模塊化2根據(jù) 信息隱藏 原則: 每個模塊有一個或多個secret Lineshow characters/lines are storedCircular Shifteralgorithm for shifting, storage for shiftsAlphabetizeralgorithm for alpha, laziness of alpha 每個模塊有自己的design decision 并且其他模塊不可見兩種模塊化的對比: 1總體比較:Note: both systems might share the same data structures

39、and the same algorithmsDifferences are in the way they are divided into work assignmentsSystems are substantially different even if identical in the runnable representationPossible because the runnable representation is used only for runningOther representations are used forChangingDocumentingUnders

40、tanding2可變性比較: Design decisions that may changeInput format: (1, 1)All lines stored in memory: (all, 1)Pack characters 4 to a word: (all, 1)Make an index for circular shifts rather than store them: (3,1)Alphabetize once, rather than either: (3,1)Search for each item as neededPartially alphabetize, p

41、artially search 3獨立開發(fā)比較:模塊化1Must design all data structures before parallel work can proceedComplex descriptions needed模塊化2Must design interfaces before parallel work can beginSimple descriptions only4可理解性比較:模塊化2更好Parnas subjective judgmentLess coupling among modulesProgramming to interfaces 一般性比較:兩

42、個系統(tǒng)可能使用相同的數(shù)據(jù)結(jié)構(gòu)和算法,區(qū)別在于他們劃分成工作單元的方式;即使在可運行的表示上是相同的系統(tǒng)本質(zhì)上也不同,其他表示有變化、文檔化和理解可變性比較:設(shè)計決策變化,模塊化2普遍表現(xiàn)較好獨立開發(fā):模塊化1必須先設(shè)計好所有數(shù)據(jù)結(jié)構(gòu)才能開始并行開發(fā),需要復(fù)雜的描述;模塊化2必須設(shè)計好接口才能開始并行開發(fā),僅需要簡單描述可理解性:模塊化2比較好,主觀判斷和針對接口編程對簡單的應(yīng)用,解釋其Module GuideModule Guide當(dāng)系統(tǒng)有大量交互的模塊時(一個有上百個模塊的復(fù)雜系統(tǒng)),由許多模塊行為構(gòu)成的系統(tǒng)的集體行為很難被理解。解決方法是創(chuàng)建一個層次結(jié)構(gòu)的文檔Module Guide。它提

43、供一個好的文檔支持,從而降低了系統(tǒng)維護的成本。對于每個模塊,module guide應(yīng)該說明:(secret) 1每個模塊所包含的Secrets。Secrets包括primary和secondary Primary secret是模塊內(nèi)部隱藏的信息Secondary secret是實現(xiàn)模塊的實現(xiàn)決策(role) 2每個模塊在整個系統(tǒng)中扮演的角色。(facilities)3每個模塊實現(xiàn)的功能。作用如果沒有module guide,職責(zé)將無法追溯到確定的一個或兩個模塊;module guide幫助我們在設(shè)計是相對的減少失誤。Module guide幫助系統(tǒng)的開發(fā)人員和維護人員更容易的找到被chan

44、ge所影響的模塊。其他文檔: Module Interface Document : 精確完整的描述每個模塊的接口Module Design Document : 描述每個模塊實現(xiàn)的內(nèi)部設(shè)計Requirements Document : Module Guide根據(jù)它查找相關(guān)的changesModule Guide:層次式結(jié)構(gòu)化文檔;幫助開發(fā)人員和維護人員找到變更影響到的模塊;模塊化結(jié)構(gòu)的目標(biāo):每個模塊的結(jié)構(gòu)應(yīng)當(dāng)可以簡單到全部理解;要改變一個模塊應(yīng)當(dāng)不需要知道別的模塊的實現(xiàn)也不會影響其他模塊的行為;一個較大的軟件變化應(yīng)當(dāng)可以通過一系列單獨模塊的獨立變化實現(xiàn);軟件工程師應(yīng)當(dāng)在不了解內(nèi)部實現(xiàn)的情況

45、下了解模塊的職責(zé);有良好定義的關(guān)注點應(yīng)當(dāng)能夠在不研究無關(guān)模塊的情況下容易的確認(rèn)相關(guān)模塊;對于每一個模塊,Module Guide陳述:每個模塊關(guān)聯(lián)的secrets:Primary Secret軟件設(shè)計者專有的隱藏信息,Secondary secret實現(xiàn)隱藏PS的模塊時做出的實現(xiàn)設(shè)計決策在整個系統(tǒng)運作中單個模塊所扮演的角色每個模塊提供的facilities例子:模塊化層次,模塊按照其secret類型的不同進行組織;第一層,Hardware,behavior,software利用文檔的設(shè)計(Design through Documentation):增加了產(chǎn)品完整性和軟件可復(fù)用性的可能性Modu

46、le GuideModule Interface Document:與MG不同,包含精確完整的模塊接口描述Module Design Document:模塊每個實現(xiàn)的內(nèi)部實際文檔Requirements Document:MG引用該文檔來有關(guān)的變更對于每個模塊來說,Module Guide應(yīng)該包含:與其他模塊相關(guān)的secrets:Primary Secret(隱藏對外信息,從用戶需求角度來說),secondary Secret(隱藏實現(xiàn)細(xì)節(jié),從實現(xiàn)角度)獨立模塊在整體系統(tǒng)中的角色每個模塊所提供的功能實例請參見飛機場的例子。復(fù)雜系統(tǒng)需要建立模塊化結(jié)構(gòu)層次化的結(jié)構(gòu)文檔:module Guide:內(nèi)容:功能說明,設(shè)計思路:secrets+interface+roles+faci

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論