耦合與內(nèi)聚例子_第1頁
耦合與內(nèi)聚例子_第2頁
耦合與內(nèi)聚例子_第3頁
耦合與內(nèi)聚例子_第4頁
耦合與內(nèi)聚例子_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

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

文檔簡介

1、耦合(1) 數(shù)據(jù)耦合。 若兩個(gè)模塊之間僅通過模塊參數(shù)交換信息,且交換的信息全部為簡單數(shù)據(jù),則稱這種耦合為數(shù)據(jù)耦合。數(shù)據(jù)耦合的耦合性最低,通常軟件中都包含有數(shù)據(jù)耦合。 數(shù)據(jù)耦合的例子:/* 數(shù)據(jù)耦合* 主函數(shù) main() 和 Multiply(int x, int y)之間為數(shù)據(jù)耦合關(guān)系*/#include <stdio.h>int Multiply(int x, int y)return(x * y);void main()int x = 0;int y = 0;scanf("%d%d", &x, &y);printf("x * y

2、= %dn", Multiply(x,y);(2) 控制耦合。 若模塊之間交換的信息中包含有控制信息( 盡管有時(shí)控制信息是以數(shù)據(jù)的形式出現(xiàn)的 ) ,則稱這種耦合為控制耦合??刂岂詈鲜侵械瘸潭鹊鸟詈?,它會(huì)增加程序的復(fù)雜 性??刂岂詈系睦樱?* 控制耦合* 根據(jù)年齡判斷是否大于歲 , 然后根據(jù)是否滿十八歲判斷是否到達(dá)法定飲酒年齡*/#include <stdio.h>static bool Signal;void AdultOrNot(int age)if (age > 18)Signal = 1;elseSignal = 0;void WineOrNot()if (

3、Signal = 1)printf("%sn", " 您已到達(dá)法定飲酒年齡 !"); elseprintf("%sn"," 您未到達(dá)法定飲酒年齡 !");int main()int Age = 0;printf("%s"," 請(qǐng)輸入您的年齡 :"); scanf("%d", &Age);AdultOrNot(Age);WineOrNot();(3)公共耦合。 若兩個(gè)或多個(gè)模塊通過引用公共數(shù)據(jù)相互聯(lián)系,則稱這種耦合為公共耦合。公共耦合的例子: 在程序

4、中定義了全局變量, 并在多個(gè)模塊中對(duì)全局變量進(jìn)行了引用, 則引 用全局變量的多個(gè)模塊間就具有了公共耦合關(guān)系。( 包括數(shù)據(jù)和程序段 ) 進(jìn)行了直接的引用甚或一個(gè)模塊具有多個(gè)入口, 或兩個(gè)模塊共內(nèi)容耦合是所有耦合關(guān)系中程度最高的,(4)內(nèi)容耦合。若一個(gè)模塊對(duì)另一模塊中的內(nèi)容 至修改, 或通過非正常入口進(jìn)入到另一模塊內(nèi)部, 享一部分代碼, 則稱模塊間的這種耦合為內(nèi)容耦合。會(huì)使因模塊間的聯(lián)系過于緊密而對(duì)后期的開發(fā)和維護(hù)工作帶來很大的麻煩。內(nèi)聚(1)偶然內(nèi)聚。若一個(gè)模塊由多個(gè)完成不同任務(wù)的語句段組成,各語句段之間的聯(lián)系十分 松散或根本沒有任何聯(lián)系,則稱此模塊的內(nèi)聚為偶然內(nèi)聚。偶然內(nèi)聚的例子:在模塊 T

5、有三條語句。至少從表面上看不出這三條語句之間有什么聯(lián)系, 只是由于 P,Q,R,S 四個(gè)模塊中都有這三條語句,為了節(jié)省空間才把它們作為一個(gè)模塊放 在一起。這完全是偶然性的。(2)邏輯內(nèi)聚。這種模塊是把幾種功能組合在一起,每次調(diào)用時(shí),則由傳遞給模塊的判定 參數(shù)來確定該模塊應(yīng)執(zhí)行哪一種功能。邏輯內(nèi)聚的例子: 一個(gè)子程序?qū)⒋蛴〖径乳_支報(bào)告、 月份開支報(bào)告和日開支報(bào)告 具體打印 哪一個(gè), 將由傳入的控制標(biāo)志決定, 這個(gè)子程序具有邏輯內(nèi)聚性, 因?yàn)樗膬?nèi)部邏輯是由輸 進(jìn)去的外部控制標(biāo)志決定的。(3)時(shí)間內(nèi)聚。若一個(gè)模塊包含了需要在同一時(shí)間段中執(zhí)行的多個(gè)任務(wù),則稱該模塊的內(nèi) 聚為時(shí)間內(nèi)聚。時(shí)間內(nèi)聚的例子:

6、 將多個(gè)變量的初始化放在同一個(gè)模塊中實(shí)現(xiàn), 或?qū)⑿枰瑫r(shí)使用的多個(gè)庫 文件的打開操作放在同一個(gè)模塊中,都會(huì)產(chǎn)生時(shí)間內(nèi)聚的模塊 。(4)過程內(nèi)聚。若一個(gè)模塊中的各個(gè)部分相關(guān),并且必須按特定的次序執(zhí)行,則稱該模塊 的內(nèi)聚為過程內(nèi)聚。過程內(nèi)聚的例子:假設(shè)有一個(gè)子程序,它產(chǎn)生讀取雇員的名字,然后是地址,最后是它的電 話號(hào)碼。 這種順序之所以重要, 僅僅是因?yàn)樗嫌脩舻囊螅?用戶希望按這種順序進(jìn)行屏 幕輸入。 另外一個(gè)子程序?qū)⒆x取關(guān)于雇員的其它信息。這個(gè)子程序是過程內(nèi)聚性, 因?yàn)槭怯梢粋€(gè)特定順序而不是其它任何原因,把這些操作組合在一起的。(5)通信內(nèi)聚。若一個(gè)模塊中的各個(gè)部分使用同一個(gè)輸入數(shù)據(jù)或產(chǎn)生

7、同一個(gè)輸出數(shù)據(jù),則 稱該模塊的內(nèi)聚為通信內(nèi)聚。通信內(nèi)聚的例子: 比如有一個(gè)打印總結(jié)報(bào)告, 并在完成后重新初始化傳進(jìn)來的總結(jié)數(shù)據(jù)的子 程序,這個(gè)子程序具有通信內(nèi)聚性, 因?yàn)檫@兩個(gè)操作僅僅是由于它們使用了相同的數(shù)據(jù)才聯(lián) 系在一起。(6)順序內(nèi)聚。若一個(gè)模塊中的各個(gè)部分都與同一個(gè)功能密切相關(guān),并且必須按照先后順 序執(zhí)行 ( 通常前一個(gè)部分的輸出數(shù)據(jù)就是后一個(gè)部分的輸入數(shù)據(jù)) ,則稱該模塊的內(nèi)聚為順序內(nèi)聚。順序內(nèi)聚的例子: 假設(shè)有一個(gè)按給出的生日計(jì)算雇員年齡、 退休時(shí)間的子程序, 如果它是利 用所計(jì)算的年齡來確定雇員將要退休的時(shí)間, 那么它就具有順序內(nèi)聚性。 而如果它是分別計(jì) 算年齡和退休時(shí)間的,但使

8、用相同生日數(shù)據(jù),那它就只具有通訊內(nèi)聚性。/* 順序內(nèi)聚* 根據(jù)出生年份得出年齡 , 根據(jù)年齡得到退休時(shí)間*/#include <stdio.h>#include <time.h>void GetRetireYear()/ 得出年齡int BirthYear = 0;int Age = 0;printf("%s", " 請(qǐng)輸入出生年份 :");scanf("%d", &BirthYear);time_t rawtime;struct tm * timeinfo; time ( &rawtime )

9、;timeinfo = localtime ( &rawtime );Age = timeinfo ->tm_year + 1900 - BirthYear;/printf(”您的年齡是:d 歲 n", Age);/ 得出退休時(shí)間int RetireYear = 0;RetireYear = timeinfo ->tm_year + 1900 + 60 - Age;printf("您的退休時(shí)間是:d 年n", RetireYear);void main ()GetRetireYear();(7) 功能內(nèi)聚。若一個(gè)模塊中各個(gè)組成部分構(gòu)成一個(gè)整體并

10、共同完成一個(gè)單一的功能,則 稱該模塊的內(nèi)聚為功能內(nèi)聚。功能內(nèi)聚例子:比如計(jì)算雇員年齡并給出生日的子程序就是功能內(nèi)聚性的。/* 功能內(nèi)聚性例子* 根據(jù)出生年份得出年齡*/#include <stdio.h>#include <time.h> void GetAge()int BirthYear = 0;int Age = 0;printf("%s", " 請(qǐng)輸入出生年份 :"); scanf("%d", &BirthYear);time_t rawtime;struct tm * timeinfo;time ( &rawtime );timeinfo = localtime ( &rawtim

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論