耦合与内聚例子.doc_第1页
耦合与内聚例子.doc_第2页
耦合与内聚例子.doc_第3页
耦合与内聚例子.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

_耦合(1)数据耦合。若两个模块之间仅通过模块参数交换信息,且交换的信息全部为简单数据,则称这种耦合为数据耦合。数据耦合的耦合性最低,通常软件中都包含有数据耦合。数据耦合的例子:/* * 数据耦合 * 主函数main()和Multiply(int x, int y)之间为数据耦合关系 */ #include 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 = %dn, Multiply(x,y); (2)控制耦合。若模块之间交换的信息中包含有控制信息(尽管有时控制信息是以数据的形式出现的),则称这种耦合为控制耦合。控制耦合是中等程度的耦合,它会增加程序的复杂性。控制耦合的例子:/* * 控制耦合 * 根据年龄判断是否大于岁,然后根据是否满十八岁判断是否到达法定饮酒年龄 */ #include static bool Signal; void AdultOrNot(int age) if (age 18) Signal = 1; else Signal = 0; void WineOrNot() if (Signal = 1) printf(%sn, 您已到达法定饮酒年龄!); else printf(%sn,您未到达法定饮酒年龄!); int main() int Age = 0; printf(%s,请输入您的年龄:); scanf(%d, &Age); AdultOrNot(Age); WineOrNot(); (3)公共耦合。若两个或多个模块通过引用公共数据相互联系,则称这种耦合为公共耦合。公共耦合的例子:在程序中定义了全局变量,并在多个模块中对全局变量进行了引用,则引用全局变量的多个模块间就具有了公共耦合关系。(4)内容耦合。若一个模块对另一模块中的内容(包括数据和程序段)进行了直接的引用甚至修改,或通过非正常入口进入到另一模块内部,或一个模块具有多个入口,或两个模块共享一部分代码,则称模块间的这种耦合为内容耦合。内容耦合是所有耦合关系中程度最高的,会使因模块间的联系过于紧密而对后期的开发和维护工作带来很大的麻烦。内聚(1)偶然内聚。若一个模块由多个完成不同任务的语句段组成,各语句段之间的联系十分松散或根本没有任何联系,则称此模块的内聚为偶然内聚。偶然内聚的例子:在模块T有三条语句。至少从表面上看不出这三条语句之间有什么联系,只是由于P,Q,R,S四个模块中都有这三条语句,为了节省空间才把它们作为一个模块放在一起。这完全是偶然性的。(2)逻辑内聚。这种模块是把几种功能组合在一起,每次调用时,则由传递给模块的判定参数来确定该模块应执行哪一种功能。逻辑内聚的例子:一个子程序将打印季度开支报告、月份开支报告和日开支报告具体打印哪一个,将由传入的控制标志决定,这个子程序具有逻辑内聚性,因为它的内部逻辑是由输进去的外部控制标志决定的。(3)时间内聚。若一个模块包含了需要在同一时间段中执行的多个任务,则称该模块的内聚为时间内聚。时间内聚的例子:将多个变量的初始化放在同一个模块中实现,或将需要同时使用的多个库文件的打开操作放在同一个模块中,都会产生时间内聚的模块。(4)过程内聚。若一个模块中的各个部分相关,并且必须按特定的次序执行,则称该模块的内聚为过程内聚。过程内聚的例子:假设有一个子程序,它产生读取雇员的名字,然后是地址,最后是它的电话号码。这种顺序之所以重要,仅仅是因为它符合用户的要求,用户希望按这种顺序进行屏幕输入。另外一个子程序将读取关于雇员的其它信息。这个子程序是过程内聚性,因为是由一个特定顺序而不是其它任何原因,把这些操作组合在一起的。(5)通信内聚。若一个模块中的各个部分使用同一个输入数据或产生同一个输出数据,则称该模块的内聚为通信内聚。通信内聚的例子:比如有一个打印总结报告,并在完成后重新初始化传进来的总结数据的子程序,这个子程序具有通信内聚性,因为这两个操作仅仅是由于它们使用了相同的数据才联系在一起。(6)顺序内聚。若一个模块中的各个部分都与同一个功能密切相关,并且必须按照先后顺序执行(通常前一个部分的输出数据就是后一个部分的输入数据),则称该模块的内聚为顺序内聚。顺序内聚的例子:假设有一个按给出的生日计算雇员年龄、退休时间的子程序,如果它是利用所计算的年龄来确定雇员将要退休的时间,那么它就具有顺序内聚性。而如果它是分别计算年龄和退休时间的,但使用相同生日数据,那它就只具有通讯内聚性。/* * 顺序内聚 * 根据出生年份得出年龄,根据年龄得到退休时间 */ #include #include void GetRetireYear() / 得出年龄 int BirthYear = 0; int Age = 0; printf(%s, 请输入出生年份:); scanf(%d, &BirthYear); time_t rawtime; struct tm * timeinfo; time ( &rawtime ); timeinfo = localtime ( &rawtime ); Age = timeinfo -tm_year + 1900 - BirthYear; /printf(您的年龄是:%d岁n, Age); / 得出退休时间 int RetireYear = 0; RetireYear = timeinfo -tm_year + 1900 + 60 - Age; printf(您的退休时间是:%d年n, RetireYear); void main () GetRetireYear(); (7)功能内聚。若一个模块中各个组成部分构成一个整体并共同完成一个单一的功能,则称该模块的内聚为功能内聚。功能内聚例子:比如计算雇员年龄并给出生日的子程序就是功能内聚性的。/* 功能内聚性例子* 根据出生年份得出年龄 */ #include #include void GetAge() int BirthYear = 0; int Age = 0; printf(%s, 请输入出生年份:); scanf(%d, &BirthYear); time_t rawtime; struct tm * timeinfo; time ( &rawtime ); timeinfo = localtime ( &

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论