軟件工程—第4章 軟件設(shè)計概述lyh_第1頁
軟件工程—第4章 軟件設(shè)計概述lyh_第2頁
軟件工程—第4章 軟件設(shè)計概述lyh_第3頁
軟件工程—第4章 軟件設(shè)計概述lyh_第4頁
軟件工程—第4章 軟件設(shè)計概述lyh_第5頁
已閱讀5頁,還剩79頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 討論要點討論要點 如何將分析模型轉(zhuǎn)換成軟件設(shè)計?如何將分析模型轉(zhuǎn)換成軟件設(shè)計? 作為軟件工程師在軟件設(shè)計方面應(yīng)使用哪些基作為軟件工程師在軟件設(shè)計方面應(yīng)使用哪些基 本原則和概念?本原則和概念? 4.1 4.1 軟件設(shè)計的目標(biāo)和任務(wù)軟件設(shè)計的目標(biāo)和任務(wù) 4.2 4.2 軟件設(shè)計基本概念軟件設(shè)計基本概念 4.3 4.3 模塊化設(shè)計模塊化設(shè)計 4.4 4.4 其他設(shè)計問題的處理其他設(shè)計問題的處理 4.5 4.5 設(shè)計文檔及其復(fù)審設(shè)計文檔及其復(fù)審 4.1 4.1 軟件設(shè)計的軟件設(shè)計的任務(wù)任務(wù) 軟件需求:解決軟件需求:解決“做什么做什么” 軟件設(shè)計:解決軟件設(shè)計:解決“怎么做怎么做” 軟件設(shè)計的任務(wù)軟件

2、設(shè)計的任務(wù) 問題結(jié)構(gòu)問題結(jié)構(gòu)( (軟件需求軟件需求) ) 從軟件需求規(guī)格說明書出發(fā),形成軟件的具體從軟件需求規(guī)格說明書出發(fā),形成軟件的具體 設(shè)計方案。設(shè)計方案。 映射映射 軟件結(jié)構(gòu)軟件結(jié)構(gòu) 1.1.軟件的總體結(jié)構(gòu)主要回答的問題軟件的總體結(jié)構(gòu)主要回答的問題 u軟件的組成部分軟件的組成部分 u軟件的層次關(guān)系軟件的層次關(guān)系 u模塊的內(nèi)部處理邏輯模塊的內(nèi)部處理邏輯 u模塊之間的界面模塊之間的界面 2. 2. 軟件設(shè)計的問題軟件設(shè)計的問題 u工具工具 如何描述軟件的總體結(jié)構(gòu)如何描述軟件的總體結(jié)構(gòu) u方法方法 用什么方法從問題結(jié)構(gòu)導(dǎo)出軟件結(jié)構(gòu)用什么方法從問題結(jié)構(gòu)導(dǎo)出軟件結(jié)構(gòu) u評估準(zhǔn)則評估準(zhǔn)則 什么樣的軟

3、件結(jié)構(gòu)是什么樣的軟件結(jié)構(gòu)是“最優(yōu)的最優(yōu)的” 3. 3. 軟件設(shè)計方法軟件設(shè)計方法 f結(jié)構(gòu)化設(shè)計方法結(jié)構(gòu)化設(shè)計方法( (sdsd) ) f面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計方法面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計方法( (jsdjsd方法方法) ) f面向?qū)ο蟮脑O(shè)計方法面向?qū)ο蟮脑O(shè)計方法( (oodood) ) 4. 4. 軟件設(shè)計分為兩個階段:軟件設(shè)計分為兩個階段: (1)(1)概要設(shè)計概要設(shè)計( (總體設(shè)計總體設(shè)計) ) 確定軟件的結(jié)構(gòu)以及各組成成分確定軟件的結(jié)構(gòu)以及各組成成分( (子系統(tǒng)或模塊子系統(tǒng)或模塊) ) 之間的相互關(guān)系。之間的相互關(guān)系。 (2)(2)詳細(xì)設(shè)計詳細(xì)設(shè)計 確定模塊內(nèi)部的算法和數(shù)據(jù)結(jié)構(gòu),產(chǎn)生描述各模確定模

4、塊內(nèi)部的算法和數(shù)據(jù)結(jié)構(gòu),產(chǎn)生描述各模 塊程序過程的詳細(xì)文檔。塊程序過程的詳細(xì)文檔。 4.2 4.2 軟件設(shè)計的基本概念軟件設(shè)計的基本概念 1.1.模塊與構(gòu)件模塊與構(gòu)件 2.2.抽象與細(xì)化抽象與細(xì)化 3.3.信息隱蔽信息隱蔽 4.4.軟件復(fù)用軟件復(fù)用 1.1.模塊與構(gòu)件模塊與構(gòu)件 模塊化:模塊化:把程序劃分成若干個模塊,每個模把程序劃分成若干個模塊,每個模 塊完成一個子功能,把這些模塊集總起來組塊完成一個子功能,把這些模塊集總起來組 成一個整體,可以完成指定的功能,滿足問成一個整體,可以完成指定的功能,滿足問 題的功能。題的功能。 模塊:模塊:一個擁有明確定義的輸入、輸出和特一個擁有明確定義的輸

5、入、輸出和特 性的程序?qū)嶓w。性的程序?qū)嶓w。 1.1.模塊與構(gòu)件模塊與構(gòu)件 構(gòu)件:構(gòu)件:可重復(fù)使用的軟件組件??芍貜?fù)使用的軟件組件。 經(jīng)過適當(dāng)設(shè)計和實現(xiàn)的類也可以稱為經(jīng)過適當(dāng)設(shè)計和實現(xiàn)的類也可以稱為構(gòu)件構(gòu)件, 他們在某個領(lǐng)域中具有一定的通用性,可以在他們在某個領(lǐng)域中具有一定的通用性,可以在 不同的計算機軟件系統(tǒng)中復(fù)用。將這些構(gòu)件儲不同的計算機軟件系統(tǒng)中復(fù)用。將這些構(gòu)件儲 存起來變成一個構(gòu)件庫,就為基于構(gòu)件的軟件存起來變成一個構(gòu)件庫,就為基于構(gòu)件的軟件 開發(fā)模型提供了技術(shù)基礎(chǔ)。開發(fā)模型提供了技術(shù)基礎(chǔ)。 模模 塊塊 模塊模塊是具有一定功能的可以用名詞調(diào)用的程序語是具有一定功能的可以用名詞調(diào)用的程序語

6、 句集合,如:句集合,如: 獨立的匯編程序獨立的匯編程序 cobolcobol的段和節(jié)的段和節(jié) pascalpascal過程過程 fortranfortran的子程序的子程序 概要設(shè)計的基本概念概要設(shè)計的基本概念 將系統(tǒng)劃分成模塊 決定每個模塊的功能 決定模塊的調(diào)用關(guān)系 決定模塊的界面,即模塊間傳遞的數(shù)據(jù) 2. 2. 抽象抽象(abstraction)(abstraction)與細(xì)化與細(xì)化 抽象抽象: :解決問題時只考慮與問題有關(guān)的方面,解決問題時只考慮與問題有關(guān)的方面, 不考慮與問題無關(guān)的方面。即抽出事物的本質(zhì)特性不考慮與問題無關(guān)的方面。即抽出事物的本質(zhì)特性 而不考慮細(xì)節(jié)。而不考慮細(xì)節(jié)。 抽

7、象抽象(abstraction)(abstraction) 抽象原則應(yīng)用舉例抽象原則應(yīng)用舉例 windows ntwindows nt一體化的一體化的i/oi/o系統(tǒng)設(shè)計系統(tǒng)設(shè)計 文件管理文件管理 網(wǎng)絡(luò)管理網(wǎng)絡(luò)管理 設(shè)備管理設(shè)備管理 高速緩沖存儲器高速緩沖存儲器 對虛擬文件的字節(jié)對虛擬文件的字節(jié) 流流, ,虛擬文件可為虛擬文件可為 任何設(shè)備和實體任何設(shè)備和實體 抽象抽象 在逐步細(xì)化中,特別強調(diào)這種分解的在逐步細(xì)化中,特別強調(diào)這種分解的“逐步逐步”性質(zhì),性質(zhì), 即每一部分僅較其前一部增加即每一部分僅較其前一部增加“少量少量”的細(xì)節(jié)。這樣,的細(xì)節(jié)。這樣, 在相鄰兩部之間就只有微小的變化,不難驗證它

8、們的在相鄰兩部之間就只有微小的變化,不難驗證它們的 內(nèi)容是否等效。內(nèi)容是否等效。 細(xì)化:即分解。細(xì)化:即分解。 3.3.信息隱蔽信息隱蔽(information hiding)(information hiding) 信息隱蔽的含義:信息隱蔽的含義:有效的模塊化可以通過定義一組獨立有效的模塊化可以通過定義一組獨立 模塊來實現(xiàn),這些模塊相互之間只交流軟件功能必需的模塊來實現(xiàn),這些模塊相互之間只交流軟件功能必需的 信息。信息。 換句話說:換句話說:模塊所包含的信息,不允許其它不需要這些模塊所包含的信息,不允許其它不需要這些 信息的模塊訪問,獨立的模塊間僅僅交換為完成系統(tǒng)功信息的模塊訪問,獨立的模塊

9、間僅僅交換為完成系統(tǒng)功 能而必須交換的信息。能而必須交換的信息。 信息隱蔽:對模塊內(nèi)部信息訪問的約束 信息隱蔽的基本原則: 功能獨立,高內(nèi)聚且低耦合 高可復(fù)用性的期望: 功能復(fù)用是代碼級的,它基于必要的功能理解,而功能的語義是不一 致的、多理解的。 希望軟件復(fù)用是全方位的,不但是代碼級的復(fù)用,還應(yīng)該有源程序級 的復(fù)用。 面向?qū)ο蠓椒ǖ母呖蓮?fù)用性: 對象的語義表示是唯一的,這使得代碼級的復(fù)用簡單且自然。 類的繼承性是源程序級的復(fù)用機制 ,它允許用已有的程序構(gòu)架來 簡單地構(gòu)造新的應(yīng)用。并且仍保持高維護性,這種技術(shù)帶來復(fù)用概念 的新突破。 4. 4.軟件復(fù)用:軟件復(fù)用: 利用已有的現(xiàn)成構(gòu)件,不必一切

10、都從頭做起。利用已有的現(xiàn)成構(gòu)件,不必一切都從頭做起。 4.3 4.3 模塊化設(shè)計模塊化設(shè)計 1.1.分解分解 2.2.模塊獨立性模塊獨立性 內(nèi)聚內(nèi)聚 耦合耦合 自頂向下與自底向上設(shè)計自頂向下與自底向上設(shè)計 模塊化模塊化(modularity)(modularity) 模塊化是好的軟件設(shè)計的一個基本準(zhǔn)則模塊化是好的軟件設(shè)計的一個基本準(zhǔn)則 高層模塊高層模塊 從整體上把握問題從整體上把握問題, ,隱蔽細(xì)節(jié)隱蔽細(xì)節(jié) 復(fù)雜問題復(fù)雜問題 較小問題較小問題 分解分解 可減小解題所需的總的工作可減小解題所需的總的工作 分解分解 c(p1)c(p2) 則則 e(p1)e(p2) 其中:其中: p1和和p2是兩個

11、問題是兩個問題 c(x)是由是由x問題決定的復(fù)雜性問題決定的復(fù)雜性 e(x)是解決是解決x問題所需要的工作量問題所需要的工作量 c(p1+p2) c(p1) +c(p2) e(p1+p2) e(p1) +e(p2) 試驗發(fā)現(xiàn) 模塊劃分得越小成本越低模塊劃分得越小成本越低 ,但是,但是 集成成本卻隨著模塊劃分得越小集成成本卻隨著模塊劃分得越小 成本越高。成本越高。 如何確定模塊化分的最小成本區(qū),并保證模塊的最佳性能,如何確定模塊化分的最小成本區(qū),并保證模塊的最佳性能, 是設(shè)計活動中的主要任務(wù)之一。是設(shè)計活動中的主要任務(wù)之一。 1.1.分解分解 各個擊破理論各個擊破理論 模塊數(shù)與開發(fā)工作量的關(guān)系模

12、塊數(shù)與開發(fā)工作量的關(guān)系 成成 本本 或或 工工 作作 量量 模塊數(shù)量模塊數(shù)量 軟件總成本軟件總成本 集成成本集成成本 成本成本/ /模塊模塊 m 最小成本區(qū)域最小成本區(qū)域 2. 模塊的獨立性模塊的獨立性 模塊獨立性的概念模塊獨立性的概念 模塊完成獨立的功能模塊完成獨立的功能 符合信息隱蔽和信息局部化原則符合信息隱蔽和信息局部化原則 模塊間關(guān)連和依賴程度盡量小模塊間關(guān)連和依賴程度盡量小 模塊獨立性的度量模塊獨立性的度量 模塊獨立性取決于模塊的內(nèi)部和外部特征。模塊獨立性取決于模塊的內(nèi)部和外部特征。 sdsd方法提出的定性的度量標(biāo)準(zhǔn):方法提出的定性的度量標(biāo)準(zhǔn): 模塊自身的模塊自身的內(nèi)聚性內(nèi)聚性 模塊

13、之間的模塊之間的耦合性耦合性 內(nèi)容耦合:一個模塊直接修改另一個模塊的內(nèi)容 公共耦合:兩個以上的模塊共同引用一個全局?jǐn)?shù)據(jù) 外部耦合:若允許一組模塊訪問同一個全局變量 控制耦合:接收模塊的動作依賴于控制信號 標(biāo)記耦合:兩個模塊接口的參數(shù)包含相同的內(nèi)部結(jié)構(gòu) 數(shù)據(jù)耦合:僅是模塊之間的數(shù)據(jù)傳遞 非直接耦合:模塊之間沒有消息傳遞 低低 高高 耦合-模塊之間的依賴程度 偶然內(nèi)聚:各成分之間并沒有關(guān)系,只是把分散在多處的功能合在一起 邏輯內(nèi)聚:僅僅是邏輯功能相關(guān)成分合在一起 時間內(nèi)聚:必須在同一時間執(zhí)行,并無功能邏輯的成分合在一起 過程內(nèi)聚:過程順序相關(guān)的功能成分合在一起 通訊內(nèi)聚:需要對相同的外部數(shù)據(jù)進行操

14、作的成分合在一起 順序內(nèi)聚:一個內(nèi)部成分的輸出是另一個內(nèi)部成分的輸入,將它們合起來 功能內(nèi)聚:只完成單一的功能 低低 高高 內(nèi)聚-模塊內(nèi)部各成分之間的關(guān)聯(lián)程度 2. 模塊獨立性的度量之一:內(nèi)聚性模塊獨立性的度量之一:內(nèi)聚性 一個模塊內(nèi)部各成分之間相互關(guān)聯(lián)的強度一個模塊內(nèi)部各成分之間相互關(guān)聯(lián)的強度 設(shè)計目標(biāo):高內(nèi)聚設(shè)計目標(biāo):高內(nèi)聚( (一模塊的所有成分都直接參一模塊的所有成分都直接參 與并且對于完成同一功能來說都是最基本的與并且對于完成同一功能來說都是最基本的) ) 軟件設(shè)計的概念和原理 內(nèi)聚:一個模塊內(nèi)各個元素彼此結(jié)合的緊密程度。 偶然內(nèi)聚:一個模塊完成一組任務(wù),任務(wù)之間的關(guān)系很松散。公共語句

15、。 邏輯內(nèi)聚:若干個邏輯功能類似的任務(wù)組成一個模塊。 時間內(nèi)聚:若干個任務(wù)必須在同一段時間內(nèi)執(zhí)行。如初始化工作。 低內(nèi)聚 中內(nèi)聚 高內(nèi)聚 過程內(nèi)聚:模塊內(nèi)的處理元素是相關(guān)的,且必須以特定次序執(zhí)行。 通信內(nèi)聚:模塊中所有元素都使用同一個輸入數(shù)據(jù),和/或產(chǎn)生同一個 輸出數(shù)據(jù)。 順序內(nèi)聚:模塊中所有處理元素和同一個功能密切相關(guān),且這些處理必 須順序執(zhí)行。 功能內(nèi)聚:所有處理元素屬于一個整體,完成一個單一的功能。 模塊a模塊b模塊c s1; s2; 模塊a 模塊b模塊c 模塊a模塊b模塊c 模塊d 模塊的內(nèi)聚性類型模塊的內(nèi)聚性類型 模模 塊塊 獨獨 立立 性性 弱弱( (功能分散功能分散) ) 強強(

16、 (功能單一功能單一) ) 巧合內(nèi)聚巧合內(nèi)聚 邏輯內(nèi)聚邏輯內(nèi)聚 時間內(nèi)聚時間內(nèi)聚 過程內(nèi)聚過程內(nèi)聚 通信內(nèi)聚通信內(nèi)聚 信息內(nèi)聚信息內(nèi)聚 功能內(nèi)聚功能內(nèi)聚 低低 高高 內(nèi)聚性內(nèi)聚性 (1) (1) 巧合內(nèi)聚巧合內(nèi)聚( (偶然內(nèi)聚偶然內(nèi)聚) ) 模塊內(nèi)各部分間無聯(lián)系模塊內(nèi)各部分間無聯(lián)系 abc m move o to r read file f move s to t 模塊模塊m中的三個語句沒有任何聯(lián)系中的三個語句沒有任何聯(lián)系 缺點:缺點:可理解性差可理解性差, 可修改性差可修改性差。 例例: : (2) (2) 邏輯內(nèi)聚邏輯內(nèi)聚 把幾種相關(guān)功能把幾種相關(guān)功能( (邏輯上相似的功能邏輯上相似的功能

17、) )組合在一組合在一 模塊內(nèi)模塊內(nèi), ,每次調(diào)用由傳給模塊的參數(shù)確定執(zhí)行每次調(diào)用由傳給模塊的參數(shù)確定執(zhí)行 哪種功能。哪種功能。 邏輯內(nèi)聚模塊邏輯內(nèi)聚模塊 abc e fg abc efg a1b1c1 efgefg模塊內(nèi)部邏輯模塊內(nèi)部邏輯 e e、f f、g g邏輯邏輯 功能相似,組功能相似,組 成新模塊成新模塊efgefg 公用代碼段公用代碼段 公用代碼段公用代碼段 缺點:增強了耦合程度(控制耦合)不易修改,效率低。缺點:增強了耦合程度(控制耦合)不易修改,效率低。 (3) (3) 時間內(nèi)聚時間內(nèi)聚 模塊完成的功能必須在同一時間內(nèi)執(zhí)行,這些功能只模塊完成的功能必須在同一時間內(nèi)執(zhí)行,這些功能

18、只 因時間因素關(guān)聯(lián)在一起。因時間因素關(guān)聯(lián)在一起。 例如:初始化系統(tǒng)模塊、例如:初始化系統(tǒng)模塊、 系統(tǒng)結(jié)束模塊、系統(tǒng)結(jié)束模塊、 緊急故障處理模塊等。緊急故障處理模塊等。 (4) (4) 過程內(nèi)聚過程內(nèi)聚 模塊內(nèi)各處理成分相關(guān),且必須以特定次序執(zhí)行。模塊內(nèi)各處理成分相關(guān),且必須以特定次序執(zhí)行。 過程內(nèi)聚模塊過程內(nèi)聚模塊 建立方程組系數(shù)矩陣建立方程組系數(shù)矩陣 全部任務(wù)納入一個全部任務(wù)納入一個 模塊,得到一過程模塊,得到一過程 性模塊性模塊 高斯消去法高斯消去法 回回 代代 高斯消去法解題流程高斯消去法解題流程 過程內(nèi)聚模塊過程內(nèi)聚模塊 讀入讀入 成績單成績單 讀入并審查讀入并審查 成績單成績單 審查

19、審查 成績單成績單 統(tǒng)計統(tǒng)計 成績成績 打印打印 成績成績 統(tǒng)計并打印統(tǒng)計并打印 成績成績 (5) (5) 通信內(nèi)聚通信內(nèi)聚 模塊內(nèi)各部分使用相同的輸入數(shù)據(jù),或產(chǎn)生模塊內(nèi)各部分使用相同的輸入數(shù)據(jù),或產(chǎn)生 相同的輸出結(jié)果。相同的輸出結(jié)果。 通信內(nèi)聚模塊例通信內(nèi)聚模塊例 產(chǎn)生工產(chǎn)生工 資報表資報表 計算平計算平 均工資均工資 職工工資記錄職工工資記錄 職工工資報表職工工資報表 平均工資平均工資 產(chǎn)生職工工資報表并計算平均工資模塊產(chǎn)生職工工資報表并計算平均工資模塊 通信內(nèi)聚模塊例通信內(nèi)聚模塊例 開領(lǐng)開領(lǐng) 書單書單 登記登記 售書售書 發(fā)票發(fā)票 領(lǐng)書單領(lǐng)書單 售售 書書 登記表登記表 文件文件 刪除刪

20、除 修改修改 (6)(6)順序內(nèi)聚順序內(nèi)聚 一個內(nèi)部成分的一個內(nèi)部成分的 輸出是另一個內(nèi)部成輸出是另一個內(nèi)部成 分的輸入,將它們合分的輸入,將它們合 起來。起來。 建立方程組系數(shù)矩陣建立方程組系數(shù)矩陣 高斯消去法高斯消去法 回回 代代 高斯消去法解題流程高斯消去法解題流程 (7) (7) 功能內(nèi)聚功能內(nèi)聚 模塊僅包括為完成某個功能所必須的所有成分。模塊僅包括為完成某個功能所必須的所有成分。 ( ( 模塊所有成分共同完成一個功能,缺一不可模塊所有成分共同完成一個功能,缺一不可 ) ) 內(nèi)聚性最強內(nèi)聚性最強 模塊獨立性的度量之二模塊獨立性的度量之二 耦合性是模塊間相互依賴程度的度量,耦合的強弱取耦

21、合性是模塊間相互依賴程度的度量,耦合的強弱取 決于模塊間接口的復(fù)雜程度,進入或訪問一個模塊的點,決于模塊間接口的復(fù)雜程度,進入或訪問一個模塊的點, 以及通過接口的數(shù)據(jù)。以及通過接口的數(shù)據(jù)。 耦合性越高,模塊獨立性越弱耦合性越高,模塊獨立性越弱 軟件設(shè)計的概念和原理 - 耦合 1.非直接耦合 2.數(shù)據(jù)耦合 3.特征耦合 4.控制耦合 5.外部耦合 6.公共耦合 7.內(nèi)容耦合 弱耦合 中耦合 較強耦合 強耦合 模塊1模塊2 模塊3模塊4 數(shù)據(jù)耦合 通過簡單變量 交換數(shù)據(jù) 特征耦合 通過數(shù)據(jù)結(jié) 構(gòu)交換數(shù)據(jù) 非直接耦合 模塊之間沒有信息傳遞 模塊a 模塊b模塊c 模塊d 模塊l 模塊n 全局性數(shù)據(jù)結(jié)構(gòu)

22、 公共耦合 flag=1? s1s2 模塊1 控制耦合 模塊之間傳遞 的是控制信息 tf 全 局 性簡單變量 外部耦合 模塊a 模塊b 內(nèi)容耦合 訪問其它模塊的內(nèi)部數(shù)據(jù) 直接跳到其他模塊內(nèi)部執(zhí)行 無耦合沒有依賴關(guān)系無耦合沒有依賴關(guān)系 松散耦合有松散耦合有 少量依賴關(guān)系少量依賴關(guān)系 緊密耦合有緊密耦合有 很多依賴關(guān)系很多依賴關(guān)系 耦合強度依賴的因素耦合強度依賴的因素 一模塊對另一模塊的引用一模塊對另一模塊的引用 一模塊向另一模塊傳遞的數(shù)據(jù)量一模塊向另一模塊傳遞的數(shù)據(jù)量 一模塊施加到另一模塊的控制的數(shù)量一模塊施加到另一模塊的控制的數(shù)量 模塊間接口的復(fù)雜程度模塊間接口的復(fù)雜程度 (1) (1) 非直

23、接耦合非直接耦合 兩個模塊沒有直接關(guān)系兩個模塊沒有直接關(guān)系( (??炷?? 1和模快和???)2),模塊獨立性最強。,模塊獨立性最強。 模塊模塊1 1 模塊模塊2 2 模塊模塊3 3模塊模塊4 4 (2) (2) 數(shù)據(jù)耦合數(shù)據(jù)耦合 一模塊調(diào)用另一一模塊調(diào)用另一 模塊時,被調(diào)用模塊模塊時,被調(diào)用模塊 的輸入、輸出都是簡的輸入、輸出都是簡 單的數(shù)據(jù),屬單的數(shù)據(jù),屬松散耦松散耦 合合。 開發(fā)票開發(fā)票 計算水費計算水費 單價單價 數(shù)量數(shù)量 金額金額 數(shù)據(jù)耦合舉例數(shù)據(jù)耦合舉例 計算水電費計算水電費 計算水費計算水費 計算電費計算電費 用水量用水量 用電量用電量 水費水費電費電費 (3) (3) 標(biāo)記耦合

24、標(biāo)記耦合( (特征耦合特征耦合) ) 如兩個模塊通過傳遞數(shù)據(jù)結(jié)構(gòu)如兩個模塊通過傳遞數(shù)據(jù)結(jié)構(gòu)( (不是簡單數(shù)據(jù),不是簡單數(shù)據(jù), 而是記錄、數(shù)組等而是記錄、數(shù)組等) )加以聯(lián)系,或都與一個數(shù)據(jù)加以聯(lián)系,或都與一個數(shù)據(jù) 結(jié)構(gòu)有關(guān)系結(jié)構(gòu)有關(guān)系, , 則稱這兩個模塊間存在標(biāo)記偶合。則稱這兩個模塊間存在標(biāo)記偶合。 標(biāo)記耦合舉例標(biāo)記耦合舉例 計算水電計算水電 費費 計算水費計算水費計算電費計算電費 住戶情況住戶情況 水費水費 電費電費 住戶情況住戶情況 “住戶情況住戶情況”是一個數(shù)據(jù)結(jié)構(gòu),圖中模塊都與此數(shù)據(jù)結(jié)構(gòu)有關(guān)。是一個數(shù)據(jù)結(jié)構(gòu),圖中模塊都與此數(shù)據(jù)結(jié)構(gòu)有關(guān)。 “計算水費計算水費”和和“計算電費計算電費”本

25、無關(guān),由于引用了此數(shù)據(jù)結(jié)構(gòu)產(chǎn)本無關(guān),由于引用了此數(shù)據(jù)結(jié)構(gòu)產(chǎn) 生依賴關(guān)系,它們之間也是標(biāo)記偶合。生依賴關(guān)系,它們之間也是標(biāo)記偶合。 將標(biāo)記耦合修改為數(shù)據(jù)耦合舉例將標(biāo)記耦合修改為數(shù)據(jù)耦合舉例 計算水電費計算水電費 計算水費計算水費 計算電費計算電費 本月本月 用水量用水量 本月本月 用電量用電量 水費水費 電費電費 (4) (4) 控制耦合控制耦合 一模塊通過開關(guān)量、標(biāo)志、名字等控制信息,一模塊通過開關(guān)量、標(biāo)志、名字等控制信息, 明顯地控制另一模塊的功能。明顯地控制另一模塊的功能。 a a 計算平均分或最高分計算平均分或最高分 b b 平均/最高成績 控制耦合舉例控制耦合舉例 讀入分?jǐn)?shù)讀入分?jǐn)?shù) 輸

26、出結(jié)果輸出結(jié)果 計算平均分計算平均分計算最高分計算最高分 平均平均/ /最高最高? ? 調(diào)用邏輯性模塊調(diào)用邏輯性模塊 b b時,須先傳遞時,須先傳遞 控制信號控制信號( (平均分平均分 / /最高分最高分) ),以選,以選 擇所需的操作。擇所需的操作。 控制模塊必須知控制模塊必須知 道被控模塊的內(nèi)道被控模塊的內(nèi) 部邏輯,增強了部邏輯,增強了 相互依賴相互依賴。 b b 控制耦合增加了理解和編程的復(fù)雜性,調(diào)用模塊控制耦合增加了理解和編程的復(fù)雜性,調(diào)用模塊 必須知道被調(diào)模塊的內(nèi)部邏輯,增加了相互依賴。必須知道被調(diào)模塊的內(nèi)部邏輯,增加了相互依賴。 去除模塊間控制耦合的方法:去除模塊間控制耦合的方法:

27、 (1)(1)將被調(diào)用模塊內(nèi)的判定上移到調(diào)用模塊中進行;將被調(diào)用模塊內(nèi)的判定上移到調(diào)用模塊中進行; (2)(2)被調(diào)用模塊分解成若干單一功能模塊。被調(diào)用模塊分解成若干單一功能模塊。 改控制耦合為數(shù)據(jù)耦合舉例改控制耦合為數(shù)據(jù)耦合舉例 a a 計算平均分計算平均分 b1b1 平均成績最高成績 計算最高分計算最高分 b2b2 控制耦合舉例控制耦合舉例 a a 發(fā)獎牌發(fā)獎牌 名次名次 ( (開關(guān)量開關(guān)量) ) 獎牌獎牌 控制耦合控制耦合 被調(diào)用模塊內(nèi)被調(diào)用模塊內(nèi) 處理邏輯模式處理邏輯模式 功能功能a a功能功能b b 判別判別 改控制耦合為數(shù)據(jù)耦合舉例改控制耦合為數(shù)據(jù)耦合舉例 a 發(fā)金牌發(fā)金牌發(fā)銀牌發(fā)

28、銀牌發(fā)銅牌發(fā)銅牌 (5) (5) 外部耦合外部耦合 一組模塊均與同一外部環(huán)境關(guān)聯(lián)一組模塊均與同一外部環(huán)境關(guān)聯(lián)( (例如,例如,i/oi/o模塊模塊 與特定的設(shè)備、格式和通信協(xié)議相關(guān)聯(lián)與特定的設(shè)備、格式和通信協(xié)議相關(guān)聯(lián)) ),它們之,它們之 間便存在外部耦合。間便存在外部耦合。 外部偶合必不可少,但這種模塊數(shù)目應(yīng)盡量少。外部偶合必不可少,但這種模塊數(shù)目應(yīng)盡量少。 (6) (6) 公共耦合公共耦合( (公共數(shù)據(jù)區(qū)耦合公共數(shù)據(jù)區(qū)耦合) ) 一組模塊引用同一個公用數(shù)據(jù)區(qū)一組模塊引用同一個公用數(shù)據(jù)區(qū)( (也稱全局?jǐn)?shù)據(jù)區(qū)、也稱全局?jǐn)?shù)據(jù)區(qū)、 公共數(shù)據(jù)環(huán)境公共數(shù)據(jù)環(huán)境) )。 公共數(shù)據(jù)區(qū)公共數(shù)據(jù)區(qū)指:指: 全

29、局?jǐn)?shù)據(jù)結(jié)構(gòu)全局?jǐn)?shù)據(jù)結(jié)構(gòu) 共享通訊區(qū)共享通訊區(qū) 內(nèi)存公共覆蓋區(qū)等內(nèi)存公共覆蓋區(qū)等 公共耦合舉例公共耦合舉例 公共數(shù)據(jù)區(qū)公共數(shù)據(jù)區(qū) 松散的公共耦合松散的公共耦合 公共數(shù)據(jù)區(qū)公共數(shù)據(jù)區(qū) 緊密的公共耦合緊密的公共耦合 公共耦合舉例公共耦合舉例 公共數(shù)據(jù)區(qū)公共數(shù)據(jù)區(qū) c cb b 模塊模塊a a、b b、c c間存在錯綜復(fù)雜的聯(lián)系間存在錯綜復(fù)雜的聯(lián)系 公共耦合舉例公共耦合舉例 所有的公共耦合關(guān)系所有的公共耦合關(guān)系 a a e e b b c c d d 6 6個模塊共享一個模塊共享一 個個公共數(shù)據(jù)區(qū)公共數(shù)據(jù)區(qū) f (1)(1)軟件可理解性降低軟件可理解性降低 ( (模塊間存在錯綜復(fù)雜的連系模塊間存在錯綜

30、復(fù)雜的連系) ) (2)(2)軟件可維護性差軟件可維護性差 ( (修改變量名或?qū)傩岳щy修改變量名或?qū)傩岳щy) ) (3)(3)軟件可靠性差軟件可靠性差 ( (公共數(shù)據(jù)區(qū)及全程變量無保護措施公共數(shù)據(jù)區(qū)及全程變量無保護措施) ) 慎用公共數(shù)據(jù)區(qū)和全程變量慎用公共數(shù)據(jù)區(qū)和全程變量! 公共耦合存在的問題:公共耦合存在的問題: (7) (7) 內(nèi)容耦合內(nèi)容耦合 一模塊直接訪問另一模塊的內(nèi)部信息一模塊直接訪問另一模塊的內(nèi)部信息( (程序代碼或數(shù)據(jù)程序代碼或數(shù)據(jù)) )。 最不好內(nèi)容耦合形式最不好內(nèi)容耦合形式 ! 發(fā)生內(nèi)容耦合的情形發(fā)生內(nèi)容耦合的情形 (1)(1)一模塊直接訪問另一模塊的內(nèi)部數(shù)據(jù)一模塊直接訪問

31、另一模塊的內(nèi)部數(shù)據(jù) (2)(2)一模塊不通過正常入口轉(zhuǎn)到另一模塊內(nèi)一模塊不通過正常入口轉(zhuǎn)到另一模塊內(nèi) (3)(3)兩模塊有一部分代碼重疊兩模塊有一部分代碼重疊 (4)(4)一模塊有多個入口一模塊有多個入口 模塊化設(shè)計的原則和目標(biāo)模塊化設(shè)計的原則和目標(biāo) 耦合是影響軟件復(fù)雜程度和設(shè)計質(zhì)量的重要因素耦合是影響軟件復(fù)雜程度和設(shè)計質(zhì)量的重要因素 目標(biāo)目標(biāo):建立模塊間耦合度盡可能松散的系統(tǒng)。:建立模塊間耦合度盡可能松散的系統(tǒng)。 如何降低模塊間耦合度?如何降低模塊間耦合度? (1) (1) 如模塊必須存在耦合,選擇適當(dāng)?shù)鸟詈项愋腿缒K必須存在耦合,選擇適當(dāng)?shù)鸟詈项愋?原則原則:盡量使用數(shù)據(jù)耦合:盡量使用數(shù)據(jù)

32、耦合 少用控制耦合少用控制耦合 限制公共耦合的范圍限制公共耦合的范圍 堅決避免使用內(nèi)容耦合堅決避免使用內(nèi)容耦合 (2) (2) 降低模塊間接口的復(fù)雜性降低模塊間接口的復(fù)雜性 接口復(fù)雜性與耦合類型的關(guān)系接口復(fù)雜性與耦合類型的關(guān)系 接接 口口 復(fù)復(fù) 雜雜 性性 接口方式接口方式 接口數(shù)據(jù)接口數(shù)據(jù) 的復(fù)雜性的復(fù)雜性 無接口關(guān)系無接口關(guān)系 直接引用直接引用 過程調(diào)用語句過程調(diào)用語句 數(shù)據(jù)項作參數(shù)數(shù)據(jù)項作參數(shù) 數(shù)據(jù)結(jié)構(gòu),變數(shù)據(jù)結(jié)構(gòu),變 量名作參數(shù)量名作參數(shù) 內(nèi)容耦合內(nèi)容耦合 其它耦合其它耦合 開關(guān)量,起開關(guān)量,起 控制變量作用控制變量作用 公用數(shù)據(jù)區(qū)公用數(shù)據(jù)區(qū) 全程變量全程變量 數(shù)據(jù)耦合數(shù)據(jù)耦合 標(biāo)記耦

33、合標(biāo)記耦合 控制耦合控制耦合 外部耦合外部耦合 公共耦合公共耦合 非直接耦合非直接耦合 內(nèi)聚與耦合密切相關(guān),同其它模塊強耦合的模塊內(nèi)聚與耦合密切相關(guān),同其它模塊強耦合的模塊 意味著弱內(nèi)聚,強內(nèi)聚模塊意味著與其它模塊間意味著弱內(nèi)聚,強內(nèi)聚模塊意味著與其它模塊間 松散耦合。松散耦合。 設(shè)計目標(biāo):設(shè)計目標(biāo):力爭力爭強內(nèi)聚強內(nèi)聚、弱耦合。弱耦合。 耦合、內(nèi)聚與模塊獨立性關(guān)系耦合、內(nèi)聚與模塊獨立性關(guān)系 耦合與內(nèi)聚都是模塊獨立性的定性標(biāo)準(zhǔn),都反映耦合與內(nèi)聚都是模塊獨立性的定性標(biāo)準(zhǔn),都反映 模塊獨立性的良好程度。但耦合是直接的主導(dǎo)因模塊獨立性的良好程度。但耦合是直接的主導(dǎo)因 素,內(nèi)聚則輔助耦合共同對模塊獨立

34、性進行衡量。素,內(nèi)聚則輔助耦合共同對模塊獨立性進行衡量。 3.自頂向下與自底向上設(shè)計自頂向下與自底向上設(shè)計 (1)自底向上設(shè)計()自底向上設(shè)計(bottom-up design) 從一個局部開始,逐漸擴展到整個系統(tǒng)的設(shè)計方法。從一個局部開始,逐漸擴展到整個系統(tǒng)的設(shè)計方法。 (2)自頂向下設(shè)計()自頂向下設(shè)計(up-bottom design) 首先對所設(shè)計的系統(tǒng)要有一個全面的理解。然后從頂首先對所設(shè)計的系統(tǒng)要有一個全面的理解。然后從頂 層開始,連續(xù)地逐層向下分解,直至系統(tǒng)的所有模塊層開始,連續(xù)地逐層向下分解,直至系統(tǒng)的所有模塊 都小到便于掌握為止。都小到便于掌握為止。 (3)兩種設(shè)計的比較()

35、兩種設(shè)計的比較(page79) 4.4 4.4 其他設(shè)計問題其他設(shè)計問題 協(xié)同設(shè)計協(xié)同設(shè)計 用戶界面設(shè)計用戶界面設(shè)計 并發(fā)系統(tǒng)設(shè)計并發(fā)系統(tǒng)設(shè)計 協(xié)同設(shè)計 必須處理好的問題:必須處理好的問題: 1 1)誰最合適設(shè)計系統(tǒng)的某一方面?)誰最合適設(shè)計系統(tǒng)的某一方面? 2 2)如何編寫文檔使組內(nèi)人員相互了解別人的設(shè)計?)如何編寫文檔使組內(nèi)人員相互了解別人的設(shè)計? 3 3)如何協(xié)調(diào)設(shè)計組件使整個系統(tǒng)統(tǒng)一?)如何協(xié)調(diào)設(shè)計組件使整個系統(tǒng)統(tǒng)一? 注意:在實施協(xié)同設(shè)計中,需要注意的一個主要問題是設(shè)注意:在實施協(xié)同設(shè)計中,需要注意的一個主要問題是設(shè) 計者的個人經(jīng)驗、理解和偏愛的不同。計者的個人經(jīng)驗、理解和偏愛的不同

36、。 用戶界面設(shè)計 三條黃金指導(dǎo)規(guī)則(課本79頁) 并發(fā)系統(tǒng)設(shè)計 什么是并發(fā)? 允許多個活動同時發(fā)生而不互相干擾 如何確保同時執(zhí)行的組件間對共享數(shù)據(jù)的一致性? 4.5 4.5 設(shè)計文檔及其復(fù)審(設(shè)計文檔及其復(fù)審(p81p81) 軟件設(shè)計說明書軟件設(shè)計說明書 設(shè)計復(fù)審設(shè)計復(fù)審 討論:編程時是否應(yīng)該多使用技巧? 本人觀點:就軟件開發(fā)而言,技巧的優(yōu)點在于能另辟 蹊徑地解決一些問題,缺點是技巧并不為人熟知。若在程 序中用太多的技巧,可能會留下隱患,別人也難以理解程 序。鑒于一個局部的優(yōu)點對整個系統(tǒng)而言是微不足道的, 而一個錯誤則可能是致命的。作者建議用自然的方式編程, 少用技巧。 狼三則的故事告訴我們“

37、失敗的技巧通常是技 倆”。當(dāng)我們在編程時無法判斷是用了技巧還是用了技倆, 那就少用。賣油翁的故事又告訴我們“熟能生巧”, 表明技巧是自然而然產(chǎn)生的,而不是賣弄出來的。賣油翁 的絕技是可到中央電視臺表演的,而他老人家卻謙虛地說: “沒啥沒啥,用熟了而已”。 聰明人一定反應(yīng)敏捷,善于接受新事物。他能 迅速進入一個新領(lǐng)域,給你一個頭頭是道的解釋。 他提出的問題往往一針見血、擊中要害。他能及時 掌握所學(xué)知識,并且博聞強記,他能把本來認(rèn)為互 不相干的領(lǐng)域聯(lián)系在一起使問題得到解決。他富有 創(chuàng)新精神與合作精神 比爾比爾蓋茨曾這樣描述聰明蓋茨曾這樣描述聰明cusumano1996: 好的程序經(jīng)理應(yīng)該具備以下幾個條件:好的程序經(jīng)理應(yīng)該具備以下幾個條件: 一、技術(shù)水平是程序員隊伍中的最高級別一、技術(shù)水平是程序員隊伍中的最高級別 每個程序員骨子里頭都有一股傲氣,如果

溫馨提示

  • 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

提交評論