




下載本文檔
版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 科技研發(fā)中大數(shù)據(jù)分析的應(yīng)用技巧與策略
- 壓力試驗(yàn)合同范本
- 社團(tuán)學(xué)術(shù)科研計(jì)劃
- 丙綸纖維在綠色制造中的實(shí)踐考核試卷
- 智能電子溫濕度計(jì)的溫度濕度監(jiān)測(cè)與報(bào)警考核試卷
- 擔(dān)保法律事務(wù)考核試卷
- 長江拋石合同范本
- 為子女制定未來財(cái)務(wù)規(guī)劃的方法計(jì)劃
- 科技助力綠色環(huán)保推動(dòng)生態(tài)平衡
- 解決工作壓力的應(yīng)對(duì)策略計(jì)劃
- 教科版 二年級(jí)下冊(cè)科學(xué)教學(xué)計(jì)劃
- 中國膿毒癥及膿毒性休克急診治療指南
- 部編版六年級(jí)道德與法治下冊(cè)《學(xué)會(huì)反思》教案
- 人教版體育與健康四年級(jí)-《障礙跑》教學(xué)設(shè)計(jì)
- DB32-T 2860-2015散裝液體化學(xué)品槽車裝卸安全作業(yè)規(guī)范-(高清現(xiàn)行)
- 部編版四年級(jí)下冊(cè)語文教案(完整)
- T∕CIS 71001-2021 化工安全儀表系統(tǒng)安全要求規(guī)格書編制導(dǎo)則
- 福利院裝修改造工程施工組織設(shè)計(jì)(225頁)
- 環(huán)境空氣中臭氧的測(cè)定
- 第七章 化學(xué)物質(zhì)與酶的相互作用
- 機(jī)械畢業(yè)設(shè)計(jì)論文鋼筋自動(dòng)折彎機(jī)的結(jié)構(gòu)設(shè)計(jì)全套圖紙
評(píng)論
0/150
提交評(píng)論