結構化設計概念和原理課件_第1頁
結構化設計概念和原理課件_第2頁
結構化設計概念和原理課件_第3頁
結構化設計概念和原理課件_第4頁
結構化設計概念和原理課件_第5頁
已閱讀5頁,還剩85頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第7講設計概念與原理第7講設計概念與原理內容提要軟件設計的重要性、過程及其基本原則設計的相關概念模塊化設計模塊設計的啟發(fā)規(guī)則內容提要軟件設計的重要性、過程及其基本原則概述軟件設計:應用各種技術和原理,對一個軟件系統(tǒng)做出足夠詳細的決策,使之有可能在物理上得以實現(xiàn)的過程。軟件設計是一個迭代的過程。設計目標:將需求分析的結果(分析模型與需求分析規(guī)約)轉化為實際軟件系統(tǒng)的一個模型或軟件表達式,即用于構造軟件的“藍圖”。最終產品:設計規(guī)約,包括描述體系結構、數(shù)據(jù)、過程和界面設計模型。評審:清晰性、正確性、完整性。軟件設計與程序設計不同。概述軟件設計:應用各種技術和原理,對一個軟件系統(tǒng)做出足夠詳細開發(fā)階段的信息流開發(fā)階段的信息流翻譯需求模型到軟件設計需求分析模型設計模型數(shù)據(jù)對象描述處理規(guī)格說明控制規(guī)格說明E-RDFDSTDDD過程設計接口設計體系結構設計數(shù)據(jù)設計翻譯需求模型到軟件設計需求分析模型設計模型數(shù)據(jù)對象描述處理規(guī)翻譯分析模型到軟件設計數(shù)據(jù)設計將分析時創(chuàng)建的信息域模型變換為軟件所需的數(shù)據(jù)結構,側重于數(shù)據(jù)結構的定義。體系結構設計定義軟件系統(tǒng)各主要結構構件之間的關系。過程設計則是把結構構件轉換成軟件的過程性描述。在編碼步驟,根據(jù)這種過程性描述,生成源程序代碼,然后通過測試最終得到完整有效的軟件。接口設計是建立軟件內部的關系以及軟件人-機之間的交互機制。軟件設計的重要性可以用“質量”表達。翻譯分析模型到軟件設計數(shù)據(jù)設計將分析時創(chuàng)建的信息域模型變換為1.軟件設計的重要性軟件設計是后續(xù)開發(fā)步驟及軟件維護工作的基礎。如果沒有設計,只能建立一個不穩(wěn)定的系統(tǒng)結構。1.軟件設計的重要性軟件設計是后續(xù)開發(fā)步驟及軟件維護工作的基設計和軟件質量指導性原則設計應該展示一種層次性結構。設計應該模塊化。設計應該包括數(shù)據(jù)、體系結構、接口和模塊(構件)的清楚的表示。設計應有性質不同的可區(qū)分的數(shù)據(jù)結構和過程。設計應該具有獨立功能特征的模塊。設計應該降低模塊和外部環(huán)境之間接口的復雜性。設計應該利用需求分析中獲得的信息和可重復的方法。設計和軟件質量指導性原則2.設計過程從項目管理的角度來看,軟件設計分兩步完成。概要設計,將軟件需求轉化為數(shù)據(jù)結構和軟件體系結構。詳細設計,即過程設計。通過對體系結構表示進行細化,得到軟件的詳細的數(shù)據(jù)結構和算法。2.設計過程從項目管理的角度來看,軟件設計分兩步完成。總體設計從回答“做什么”到回答“怎樣做”劃分出組成系統(tǒng)的物理元素——程序、文件、數(shù)據(jù)庫、過程和文檔等等每個元素還是黑盒子---“全局高度,抽象層次”總體設計從回答“做什么”到回答“怎樣做”3.設計基本原理1.模塊化:Modularity模塊是數(shù)據(jù)說明、可執(zhí)行語句等程序對象的集合,是單獨命名的并且可以通過名字來訪問,例如過程、函數(shù)、子程序、宏、modula等。軟件被劃分成獨立命名和可獨立訪問的被稱作模塊的構件,每個構件完成一個子功能,它們集成到一起滿足問題需求。easiertobuild,easiertochange,easiertofix...3.設計基本原理1.模塊化:Modularityeasier模塊化模塊化論據(jù):C(x)定義為問題x的復雜性E(x)定義為解決問題x所需要的工作量對p1和p2兩個問題,若C(p1)>C(p2),則E(p1)>E(p2)C(p1+p2)>C(p1)+C(p2)E(p1+p2)>E(p1)+E(p2)不要過度模塊化!每個模塊的簡單性將被集成的復雜性所掩蓋。模塊化模塊化論據(jù):模塊化模塊化和軟件成本如何確定地預測最小成本區(qū)?成本成本/模塊最小成本區(qū)接口成本軟件總成本模塊數(shù)目模塊化模塊化和軟件成本成本成本/模塊最小成本區(qū)接口成本軟模塊化如何確定模塊的大小:模塊可分解性模塊可組裝性模塊可理解性模塊的連續(xù)性模塊的可保護性模塊化如何確定模塊的大?。涸O計基本原理2.抽象Abstraction:忽略細節(jié),分層理解問題,自頂向下層層細化,包括對過程、數(shù)據(jù)和控制的抽象。過程抽象:一個命名的指令序列,具有特定和有限的功能。數(shù)據(jù)抽象是命名的數(shù)據(jù)集合,描述一個數(shù)據(jù)對象??刂瞥橄箅[含了不必說明的內部細節(jié)的程序控制機制。是實現(xiàn)模塊化的手段之一。設計基本原理2.抽象Abstraction:過程抽象在這個抽象層次上,給出了初步的過程表示,所用的術語都已面向軟件,而且模塊化的工作已經開始顯露。逐步細化和模塊化的概念與抽象緊密相連。過程抽象在這個抽象層次上,給出了初步的過程表示,所用的術語都數(shù)據(jù)抽象定義“繪圖drawing”數(shù)據(jù)對象作為一種抽象數(shù)據(jù)類型。TYPEdrawingISSTRUCTUREDEFINED

numberISSTRINGLENGTH(12)

geometryDEFINED…

notesISSTRINGLENGTH(256)…ENFdrawingTYPE;BlueprintISINSTANCEOFdrawing;SchematicISINSTANCEOFdrawing;數(shù)據(jù)抽象定義“繪圖drawing”數(shù)據(jù)對象作為一種抽象數(shù)據(jù)設計基本原理3.求精Refinement自頂向下的設計策略。doorimplementedasadatastructuremanufacturermodelnumbertypeswingdirectioninsertslights

type

numberweightopeningmechanismopenimplementedwitha"knowledge"oftheobjectthatisassociatedwithenterdetailsofenteralgorithmwalktodoor;reachforknob;Switchtheknob;opendoor;walkthrough;closedoor.repeatuntildooropensturnknobclockwise;ifknobdoesn'tturn,then

takekeyout;

findcorrectkey;

insertinlock;endifpull/pushdoormoveoutofway;endrepeat設計基本原理3.求精Refinementdoorimplem求精設計的求精過程與需求分析的劃分類似,只是考慮的細節(jié)層次不同。求精實際是一個詳細描述的過程。抽象與求精是互補的概念。求精設計的求精過程與需求分析的劃分類似,只是考慮的細節(jié)層次不設計基本原理4.信息隱藏informationhiding信息隱藏:在設計和確定模塊時,使得一個模塊內包含的信息(過程和數(shù)據(jù))對于不需要這些信息的模塊來說,是不可訪問的。每個客戶只能通過接口來了解該模塊,而所有的實現(xiàn)都隱藏起來。隱藏就是有效的模塊化可以通過定義一組獨立模塊來實現(xiàn)。設計基本原理4.信息隱藏informationhidin信息隱藏modulecontrolledinterface"secret"?algorithm?datastructure?detailsofexternalinterface?resourceallocationpolicyclientsaspecificdesigndecision“信息隱藏”,更準確地描述應是“細節(jié)隱藏”,因為隱藏的不是信息,而是實現(xiàn)的細節(jié)。信息隱藏modulecontrolledinterface"4、模塊化設計模塊獨立性度量標準:內聚

cohesion和耦合

coupling內聚是一個模塊內部的交互程度;耦合是模塊之間交互的程度。好處:更有利于開發(fā)、設計/編碼修改的副作用減小、模塊的復用可能。功能獨立性是良好設計的關鍵,設計又是軟件質量的關鍵。4、模塊化設計模塊獨立性耦合(couple)是度量系統(tǒng)中模塊之間的交互程度。Goal:

模塊之間盡可能獨立耦合從低到高依次為:非直接耦合(最好),數(shù)據(jù)耦合,標記耦合,控制耦合,外部耦合,公共耦合和內容耦合(最差)。GreatdealofdependenceIndependent

HighlycoupledLooselycoupledUncoupled

耦合耦合(couple)是度量系統(tǒng)中模塊之間的交互程度。Grea耦合內容耦合

contentcoupling如果兩個模塊中的一個直接引用了另一個模塊的內容,則它們之間是內容耦合。Onemodulemodifiesanother.……ABCDA:……………………gotoC1……………………C:……………………C1:…………例1:A訪問C的內部數(shù)據(jù)或不通過正常入口而轉入C的內部。耦合內容耦合contentcoupling……ABCDA例2:部分代碼重疊(常出現(xiàn)在匯編程序中)B

A例3:一個模塊有多個入口(功能)A:………………………………entry1:………………………………entry2:………………………………耦合例2:部分代碼重疊(常出現(xiàn)在匯編程序中)BA例3:一個公共耦合

commoncoupling如果兩個模塊都可以存取相同的全局數(shù)據(jù),則它們之間是公共耦合。acommondatastore.Global:V1V2A:……………………A1=V1+V2……………………B:……………………V1=B1……………………Global:V1V2A:……………………V1++……………………B:……………………V2=B1+V1……………………耦合公共耦合commoncouplingGlobal:公共耦合存在的問題:公共部分的改動將影響所有調用它的模塊;公共部分的數(shù)據(jù)存取無法控制;復雜程度隨耦合模塊的個數(shù)增加而增加。解決方法:通過使用信息隱藏來避免公共耦合。耦合公共耦合存在的問題:耦合控制耦合

controlcoupling

如果兩個模塊中的一個模塊給另一個模塊傳遞控制信息,則它們具有控制耦合。Onemodulepassesparameterstocontroltheactivityofanothermodule.ABFlagF2F1Fn…………Flag特點:接口單一,但仍然影響被控模塊的內部邏輯。耦合控制耦合controlcouplingABFlagF2標記耦合stampcoupling如果兩個模塊都要使用同一數(shù)據(jù)結構的一部分,不是采用全局公共數(shù)據(jù)區(qū)共享,而是通過模塊結構傳遞數(shù)據(jù)結構的一部分,則它們之間為標記耦合。數(shù)據(jù)耦合datacoupling被調用模塊的輸入與輸出是簡單的參數(shù)或者是數(shù)據(jù)結構(該數(shù)據(jù)結構中的所有元素為被調用的模塊使用),則它們之間為數(shù)據(jù)耦合。非直接耦合nodirectcoupling兩個模塊之間沒有聯(lián)系,則它們之間為非直接耦合。Themostdesirable.耦合標記耦合stampcouplingThemost實現(xiàn)低耦合,采取下列措施:耦合方式采用非直接耦合,不采用內容耦合。傳遞信息類型盡量使用數(shù)據(jù)耦合,少采用控制耦合,外部耦合和公共耦合限制使用。耦合數(shù)量模塊間相互調用時,傳遞參數(shù)最好只有一個。原則:盡量使用數(shù)據(jù)耦合,少用控制耦合,限制公共耦合的范圍,完全不用內容耦合。耦合實現(xiàn)低耦合,采取下列措施:耦合內聚內聚:cohesion.Goal:

盡可能高內聚.內聚級別:偶然內聚邏輯內聚時間內聚

過程內聚

通信內聚順序內聚功能內聚最差最好內聚內聚:cohesion.最差最好低內聚偶然內聚(Coincidentalcohesion):指一個模塊內的各處理元素之間沒有任何聯(lián)系。例:readdiskfile;calculatecurrentvalues;produceuseroutput;

…嚴重的缺點:產品的可維護性退化;模塊是不可復用的,增加軟件成本。解決途徑:將模塊分成更小的模塊,每個小模塊執(zhí)行一個操作。低內聚偶然內聚(Coincidentalcohesion)低內聚邏輯內聚(Logicalcohesion):邏輯上相關的功能或數(shù)據(jù)放在一個模塊中。問題:接口難于理解;完成多個操作的代碼互相糾纏在一起,導致嚴重的維護問題。A:Readinputsfromdiskfromtapefromkeyboard低內聚邏輯內聚(Logicalcohesion):邏輯上相低內聚時間內聚(Temporalcohesion):如果一個模塊包含的任務必須在同一段時間內執(zhí)行。例如:系統(tǒng)的初始化

openoldmasterfile;newmasterfile,transactionfileandprintfile;initializesalesregiontable;readfirsttransactionrecordandfirstoldmasterfilerecord;問題:不同的功能混在一個模塊中,有時共用部分編碼,使局部功能的修改牽動全局。低內聚時間內聚(Temporalcohesion):如果中內聚過程內聚

(Proceduralcohesion):Functionsaregroupedtogetherinamoduletoensureacertainorderofperformance.例子:Readpartnumberfromdatabaseandupdaterepairrecordonmaintenancefile.enterdatacheckdatamanipulatedata中內聚過程內聚(Proceduralcohesion)中內聚通信內聚(Communicationalcohesion):Allthefunctionsinamoduleoperateonorproducethesamedataset.例如:從數(shù)據(jù)庫的操作——可能破壞獨立性。中內聚通信內聚(Communicationalcohes高內聚順序內聚

(Sequentialcohesion):一個處理元素的輸出數(shù)據(jù)作為下一個處理元素的輸入數(shù)據(jù)。

功能內聚

(Functionalcohesion):模塊內的所有處理元素屬于一個整體,完成一個單一的功能。

原則:在實際工作中,確定內聚的精確級別是不必要的,重要的是力爭高內聚和識別低內聚,可以使得設計的軟件具有較高的功能獨立性。高內聚順序內聚(Sequentialcohesion1.爭取低耦合、高內聚(增加內聚>減少耦合)2.模塊規(guī)模適中:過大分解不充分不易理解;太小則開銷過大、接口復雜。注意分解后不應降低模塊的獨立性。3.適當控制——

深度=分層的層數(shù)。過大表示分工過細。寬度=同一層上模塊數(shù)的最大值。過大表示系統(tǒng)復雜度大。啟發(fā)性規(guī)則1.爭取低耦合、高內聚(增加內聚>減少耦合)啟發(fā)性規(guī)則控制層次McbalkedmfgihjnopqrWidth

DepthFan-outFan-in控制層次McbalkedmfgihjnopqrWidthD扇出=一個模塊直接調用\控制的模塊數(shù)。3fan-out9AA的扇出AA的扇入

扇入=直接調用該模塊的模塊數(shù)在不破壞獨立性的前提下,fan-in

大的比較好。啟發(fā)性規(guī)則扇出=一個模塊直接調用\控制的模塊數(shù)。3盡可能減少高扇出結構,隨著深度增大扇入。

如果一個模塊的扇出數(shù)過大,就意味著該模塊過分復雜,需要協(xié)調和控制過多的下屬模塊。應當適當增加中間層次的控制模塊。一般來說,頂層扇出高,中間扇出少,低層高扇入。啟發(fā)性規(guī)則盡可能減少高扇出結構,隨著深度增大扇入。

如果一個模塊的扇出控制域MACBM的控制域為{M,A,B,C}作用域:M中的一個判定所影響的模塊。作用域是指該模塊中一個判斷所影響的所有其它模塊;控制域指該模塊本身以及所有直接或間接從屬于它的模塊。4.模塊的作用范圍保持在該模塊的控制范圍內啟發(fā)性規(guī)則控制域MACBM的控制域為{M,A,B,C}作用域例:A:

…………if……thengotoB1

…………

…………B:

…………

…………B1:

…………

…………作用域在控制域內A:

…………if……thengotoM1

…………

…………M:

…………

…………M1:gotoC1

…………

…………作用域超出了控制域上例中A的作用超出了控制域。

改進方法之一,可以把A中的if移到M中;改進方法之二,可以把C移到A下面。MACB例:A:B:作用域在控制域內A:M:作用域超出了控制域5、降低接口的復雜程度:模塊接口的復雜性是引起軟件錯誤的一個主要原因。接口設計應該使得信息傳遞簡單并且與模塊的功能一致。6、單出單入,避免內容耦合,易于理解和維護。7、模塊功能可預測——相同輸入必產生相同輸出。反例:模塊中使用全局變量或靜態(tài)變量,則可能導致不可預測。啟發(fā)性規(guī)則5、降低接口的復雜程度:模塊接口的復雜性是引起軟件錯誤的一個小結軟件設計的重要性設計過程設計的基本原理抽象、細化、模塊化、體系結構、控制層次、數(shù)據(jù)結構、軟件過程、信息隱藏。模塊化設計內聚、耦合,啟發(fā)規(guī)則。小結軟件設計的重要性第7講設計概念與原理第7講設計概念與原理內容提要軟件設計的重要性、過程及其基本原則設計的相關概念模塊化設計模塊設計的啟發(fā)規(guī)則內容提要軟件設計的重要性、過程及其基本原則概述軟件設計:應用各種技術和原理,對一個軟件系統(tǒng)做出足夠詳細的決策,使之有可能在物理上得以實現(xiàn)的過程。軟件設計是一個迭代的過程。設計目標:將需求分析的結果(分析模型與需求分析規(guī)約)轉化為實際軟件系統(tǒng)的一個模型或軟件表達式,即用于構造軟件的“藍圖”。最終產品:設計規(guī)約,包括描述體系結構、數(shù)據(jù)、過程和界面設計模型。評審:清晰性、正確性、完整性。軟件設計與程序設計不同。概述軟件設計:應用各種技術和原理,對一個軟件系統(tǒng)做出足夠詳細開發(fā)階段的信息流開發(fā)階段的信息流翻譯需求模型到軟件設計需求分析模型設計模型數(shù)據(jù)對象描述處理規(guī)格說明控制規(guī)格說明E-RDFDSTDDD過程設計接口設計體系結構設計數(shù)據(jù)設計翻譯需求模型到軟件設計需求分析模型設計模型數(shù)據(jù)對象描述處理規(guī)翻譯分析模型到軟件設計數(shù)據(jù)設計將分析時創(chuàng)建的信息域模型變換為軟件所需的數(shù)據(jù)結構,側重于數(shù)據(jù)結構的定義。體系結構設計定義軟件系統(tǒng)各主要結構構件之間的關系。過程設計則是把結構構件轉換成軟件的過程性描述。在編碼步驟,根據(jù)這種過程性描述,生成源程序代碼,然后通過測試最終得到完整有效的軟件。接口設計是建立軟件內部的關系以及軟件人-機之間的交互機制。軟件設計的重要性可以用“質量”表達。翻譯分析模型到軟件設計數(shù)據(jù)設計將分析時創(chuàng)建的信息域模型變換為1.軟件設計的重要性軟件設計是后續(xù)開發(fā)步驟及軟件維護工作的基礎。如果沒有設計,只能建立一個不穩(wěn)定的系統(tǒng)結構。1.軟件設計的重要性軟件設計是后續(xù)開發(fā)步驟及軟件維護工作的基設計和軟件質量指導性原則設計應該展示一種層次性結構。設計應該模塊化。設計應該包括數(shù)據(jù)、體系結構、接口和模塊(構件)的清楚的表示。設計應有性質不同的可區(qū)分的數(shù)據(jù)結構和過程。設計應該具有獨立功能特征的模塊。設計應該降低模塊和外部環(huán)境之間接口的復雜性。設計應該利用需求分析中獲得的信息和可重復的方法。設計和軟件質量指導性原則2.設計過程從項目管理的角度來看,軟件設計分兩步完成。概要設計,將軟件需求轉化為數(shù)據(jù)結構和軟件體系結構。詳細設計,即過程設計。通過對體系結構表示進行細化,得到軟件的詳細的數(shù)據(jù)結構和算法。2.設計過程從項目管理的角度來看,軟件設計分兩步完成??傮w設計從回答“做什么”到回答“怎樣做”劃分出組成系統(tǒng)的物理元素——程序、文件、數(shù)據(jù)庫、過程和文檔等等每個元素還是黑盒子---“全局高度,抽象層次”總體設計從回答“做什么”到回答“怎樣做”3.設計基本原理1.模塊化:Modularity模塊是數(shù)據(jù)說明、可執(zhí)行語句等程序對象的集合,是單獨命名的并且可以通過名字來訪問,例如過程、函數(shù)、子程序、宏、modula等。軟件被劃分成獨立命名和可獨立訪問的被稱作模塊的構件,每個構件完成一個子功能,它們集成到一起滿足問題需求。easiertobuild,easiertochange,easiertofix...3.設計基本原理1.模塊化:Modularityeasier模塊化模塊化論據(jù):C(x)定義為問題x的復雜性E(x)定義為解決問題x所需要的工作量對p1和p2兩個問題,若C(p1)>C(p2),則E(p1)>E(p2)C(p1+p2)>C(p1)+C(p2)E(p1+p2)>E(p1)+E(p2)不要過度模塊化!每個模塊的簡單性將被集成的復雜性所掩蓋。模塊化模塊化論據(jù):模塊化模塊化和軟件成本如何確定地預測最小成本區(qū)?成本成本/模塊最小成本區(qū)接口成本軟件總成本模塊數(shù)目模塊化模塊化和軟件成本成本成本/模塊最小成本區(qū)接口成本軟模塊化如何確定模塊的大?。耗K可分解性模塊可組裝性模塊可理解性模塊的連續(xù)性模塊的可保護性模塊化如何確定模塊的大?。涸O計基本原理2.抽象Abstraction:忽略細節(jié),分層理解問題,自頂向下層層細化,包括對過程、數(shù)據(jù)和控制的抽象。過程抽象:一個命名的指令序列,具有特定和有限的功能。數(shù)據(jù)抽象是命名的數(shù)據(jù)集合,描述一個數(shù)據(jù)對象??刂瞥橄箅[含了不必說明的內部細節(jié)的程序控制機制。是實現(xiàn)模塊化的手段之一。設計基本原理2.抽象Abstraction:過程抽象在這個抽象層次上,給出了初步的過程表示,所用的術語都已面向軟件,而且模塊化的工作已經開始顯露。逐步細化和模塊化的概念與抽象緊密相連。過程抽象在這個抽象層次上,給出了初步的過程表示,所用的術語都數(shù)據(jù)抽象定義“繪圖drawing”數(shù)據(jù)對象作為一種抽象數(shù)據(jù)類型。TYPEdrawingISSTRUCTUREDEFINED

numberISSTRINGLENGTH(12)

geometryDEFINED…

notesISSTRINGLENGTH(256)…ENFdrawingTYPE;BlueprintISINSTANCEOFdrawing;SchematicISINSTANCEOFdrawing;數(shù)據(jù)抽象定義“繪圖drawing”數(shù)據(jù)對象作為一種抽象數(shù)據(jù)設計基本原理3.求精Refinement自頂向下的設計策略。doorimplementedasadatastructuremanufacturermodelnumbertypeswingdirectioninsertslights

type

numberweightopeningmechanismopenimplementedwitha"knowledge"oftheobjectthatisassociatedwithenterdetailsofenteralgorithmwalktodoor;reachforknob;Switchtheknob;opendoor;walkthrough;closedoor.repeatuntildooropensturnknobclockwise;ifknobdoesn'tturn,then

takekeyout;

findcorrectkey;

insertinlock;endifpull/pushdoormoveoutofway;endrepeat設計基本原理3.求精Refinementdoorimplem求精設計的求精過程與需求分析的劃分類似,只是考慮的細節(jié)層次不同。求精實際是一個詳細描述的過程。抽象與求精是互補的概念。求精設計的求精過程與需求分析的劃分類似,只是考慮的細節(jié)層次不設計基本原理4.信息隱藏informationhiding信息隱藏:在設計和確定模塊時,使得一個模塊內包含的信息(過程和數(shù)據(jù))對于不需要這些信息的模塊來說,是不可訪問的。每個客戶只能通過接口來了解該模塊,而所有的實現(xiàn)都隱藏起來。隱藏就是有效的模塊化可以通過定義一組獨立模塊來實現(xiàn)。設計基本原理4.信息隱藏informationhidin信息隱藏modulecontrolledinterface"secret"?algorithm?datastructure?detailsofexternalinterface?resourceallocationpolicyclientsaspecificdesigndecision“信息隱藏”,更準確地描述應是“細節(jié)隱藏”,因為隱藏的不是信息,而是實現(xiàn)的細節(jié)。信息隱藏modulecontrolledinterface"4、模塊化設計模塊獨立性度量標準:內聚

cohesion和耦合

coupling內聚是一個模塊內部的交互程度;耦合是模塊之間交互的程度。好處:更有利于開發(fā)、設計/編碼修改的副作用減小、模塊的復用可能。功能獨立性是良好設計的關鍵,設計又是軟件質量的關鍵。4、模塊化設計模塊獨立性耦合(couple)是度量系統(tǒng)中模塊之間的交互程度。Goal:

模塊之間盡可能獨立耦合從低到高依次為:非直接耦合(最好),數(shù)據(jù)耦合,標記耦合,控制耦合,外部耦合,公共耦合和內容耦合(最差)。GreatdealofdependenceIndependent

HighlycoupledLooselycoupledUncoupled

耦合耦合(couple)是度量系統(tǒng)中模塊之間的交互程度。Grea耦合內容耦合

contentcoupling如果兩個模塊中的一個直接引用了另一個模塊的內容,則它們之間是內容耦合。Onemodulemodifiesanother.……ABCDA:……………………gotoC1……………………C:……………………C1:…………例1:A訪問C的內部數(shù)據(jù)或不通過正常入口而轉入C的內部。耦合內容耦合contentcoupling……ABCDA例2:部分代碼重疊(常出現(xiàn)在匯編程序中)B

A例3:一個模塊有多個入口(功能)A:………………………………entry1:………………………………entry2:………………………………耦合例2:部分代碼重疊(常出現(xiàn)在匯編程序中)BA例3:一個公共耦合

commoncoupling如果兩個模塊都可以存取相同的全局數(shù)據(jù),則它們之間是公共耦合。acommondatastore.Global:V1V2A:……………………A1=V1+V2……………………B:……………………V1=B1……………………Global:V1V2A:……………………V1++……………………B:……………………V2=B1+V1……………………耦合公共耦合commoncouplingGlobal:公共耦合存在的問題:公共部分的改動將影響所有調用它的模塊;公共部分的數(shù)據(jù)存取無法控制;復雜程度隨耦合模塊的個數(shù)增加而增加。解決方法:通過使用信息隱藏來避免公共耦合。耦合公共耦合存在的問題:耦合控制耦合

controlcoupling

如果兩個模塊中的一個模塊給另一個模塊傳遞控制信息,則它們具有控制耦合。Onemodulepassesparameterstocontroltheactivityofanothermodule.ABFlagF2F1Fn…………Flag特點:接口單一,但仍然影響被控模塊的內部邏輯。耦合控制耦合controlcouplingABFlagF2標記耦合stampcoupling如果兩個模塊都要使用同一數(shù)據(jù)結構的一部分,不是采用全局公共數(shù)據(jù)區(qū)共享,而是通過模塊結構傳遞數(shù)據(jù)結構的一部分,則它們之間為標記耦合。數(shù)據(jù)耦合datacoupling被調用模塊的輸入與輸出是簡單的參數(shù)或者是數(shù)據(jù)結構(該數(shù)據(jù)結構中的所有元素為被調用的模塊使用),則它們之間為數(shù)據(jù)耦合。非直接耦合nodirectcoupling兩個模塊之間沒有聯(lián)系,則它們之間為非直接耦合。Themostdesirable.耦合標記耦合stampcouplingThemost實現(xiàn)低耦合,采取下列措施:耦合方式采用非直接耦合,不采用內容耦合。傳遞信息類型盡量使用數(shù)據(jù)耦合,少采用控制耦合,外部耦合和公共耦合限制使用。耦合數(shù)量模塊間相互調用時,傳遞參數(shù)最好只有一個。原則:盡量使用數(shù)據(jù)耦合,少用控制耦合,限制公共耦合的范圍,完全不用內容耦合。耦合實現(xiàn)低耦合,采取下列措施:耦合內聚內聚:cohesion.Goal:

盡可能高內聚.內聚級別:偶然內聚邏輯內聚時間內聚

過程內聚

通信內聚順序內聚功能內聚最差最好內聚內聚:cohesion.最差最好低內聚偶然內聚(Coincidentalcohesion):指一個模塊內的各處理元素之間沒有任何聯(lián)系。例:readdiskfile;calculatecurrentvalues;produceuseroutput;

…嚴重的缺點:產品的可維護性退化;模塊是不可復用的,增加軟件成本。解決途徑:將模塊分成更小的模塊,每個小模塊執(zhí)行一個操作。低內聚偶然內聚(Coincidentalcohesion)低內聚邏輯內聚(Logicalcohesion):邏輯上相關的功能或數(shù)據(jù)放在一個模塊中。問題:接口難于理解;完成多個操作的代碼互相糾纏在一起,導致嚴重的維護問題。A:Readinputsfromdiskfromtapefromkeyboard低內聚邏輯內聚(Logicalcohesion):邏輯上相低內聚時間內聚(Temporalcohesion):如果一個模塊包含的任務必須在同一段時間內執(zhí)行。例如:系統(tǒng)的初始化

openoldmasterfile;newmasterfile,transactionfileandprintfile;initializesalesregiontable;readfirsttransactionrecordandfirstoldmasterfilerecord;問題:不同的功能混在一個模塊中,有時共用部分編碼,使局部功能的修改牽動全局。低內聚時間內聚(Temporalcohesion):如果中內聚過程內聚

(Proceduralcohesion):Functionsaregroupedtogetherinamoduletoensureacertainorderofperformance.例子:Readpartnumberfromdatabaseandupdaterepairrecordonmaintenancefile.enterdatacheckdatamanipulatedata中內聚過程內聚(Proceduralcohesion)中內聚通信內聚(Communicationalcohesion):Allthefunctionsin

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論