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