【软考】耦合内聚总论

简介: 【软考】耦合内聚总论

耦合和内聚总是傻傻的分不清楚,这次要彻底解决这个问题

一、耦合 (模块与模块的联系)

耦合(耦合性从低到高) 解释
无直接耦合 两个模块无直接关系
数据耦合 两个模块有调用关系
标记耦合 传递的数据结构
控制耦合 传递的控制变量
外部耦合 一组模块都访问同一全局简单变量
公共耦合 两个程序共享一个文件
内容耦合 内容耦合已经基本杜绝,一个模块直接使用另外一个模块的数据

1. 无直接耦合

两个模块无直接关系

2.数据耦合

两个模块有调用关系,A模块调用B模块,传递简单的数据值

void main()
{
int b,a;
b=count(a);//主函数调用fa函数
}
Int count(int n)
{
  n=n+1;
  return n;
}

分析: main调用了fa的方法,中间传递简单的数值(整数)

3.标记耦合

传递的数据结构,比如数组、队列等。

Int main()
{
int b;
b=count(b[10]);
return b;
}

Int count(a[10])
{ //简单运算}

分析:两个函数之间传递的a[10]为数组(数据结构)

4.控制耦合

传递的控制变量

void main()
{
Int Q
If (age>1)
{
Q=0
Else Q=1
}
Fa(Q)
return Q
}

void count(int n)
{
If(n>1)
{printf("%d",1);}
Else
{printf("%d",2);}
}

分析:变量Q在函数count中为控制变量,可以选择不同的功能

5.外部耦合

模块间通过软件之外的环境连接,或者一组模块都访问同一全局简单变量。

Int a b
Void main()
{
Printf(ab);
}
Void count1()
{
Printf("%d",b);
}
Void count2()
{
Printf("%d",b);
}

分析:Main count1 count2 都存在外部耦合

6.公共耦合

两个程序共享一个文件

7.内容耦合

内容耦合已经基本杜绝,一个模块直接使用另外一个模块的数据

二、内聚 (模块内的联系)

内聚 (内聚性从高到低) 解释
功能内聚 最强内聚,模块内的所有元素共同完成同一个功能
顺序内聚 一个模块内的个各处理元素都密切相关且必须按顺序执行
通信内聚 模块内的所有处理元素都在同一个数据结构上操作
过程内聚 一个模块完成多个任务
时间内聚 需要同时执行的动作组合在一起形成的模块
逻辑内聚 模块内执行若干逻辑上相似的功能
偶然内聚 一个模块内的各处理元素无任何联系

例子:

1.功能内聚

int count(int n)
{
  int f;
  if (n=0) 
  {
    f=1;
  }
  else
  {
    f=n+1;
  }
  return f;
}

分析:整个模块都是为了实现求n,为功能内聚

2.顺序内聚

前一功能元素的输出就是下一功能元素的输入

int count(int n)
{
   int f,g;
   if (n=0) 
   {
    f=1;
   }
   else 
   {
    g=n
    f=g+1;
   }
   return f;
}

3.通信内聚

如果模块中所有元素都使用同一个输入数据和(或)产生同一个输出数据,则称为通信内聚

4.过程内聚

假设有一个子程序,它产生读取雇员的名字,然后是地址,最后是它的电话号码。这种顺序之所以重要,仅仅是因为它符合用户的要求,用户希望按这种顺序进行屏幕输入。另外一个子程序将读取关于雇员的其它信息。这个子程序是过程内聚性,因为是由一个特定顺序而不是其它任何原因,把这些操作组合在一起的。

5.时间内聚

编程开始时,程序员把对所有全局变量的初始化操作放在模块A中。模块A中就是时间内聚。

int a;
int b;
int c;
void main
{//客户端代码}

6.逻辑内聚

如果一个模块完成的任务在逻辑上属于相同或相似的一类(例如,一个模块产生各种类型的全部输出),称为逻辑模块;

7.偶然内聚

没有任何联系,只是被放到了一个模块里

void main()
{
int b,a;
b=1;//主函数调用fa函数
}
Int count(int n)
{
  n=n+1;
  return n;
}

三、小小检验

如果一个模块调用下层模块时传递一个数据结构,则这种耦合属于( )。

A 简单耦合 B直接耦合

C 标记耦合 D控制耦合

小结

经此一役,耦合和内聚以尽收囊中。

目录
相关文章
|
6月前
|
设计模式
耦合与内聚:软件设计中的黄金平衡
耦合与内聚:软件设计中的黄金平衡
|
JSON 数据库 数据格式
|
4月前
软件复杂度问题之什么是高内聚低耦合设计,实现一个高内聚低耦合的接口该如何解决
软件复杂度问题之什么是高内聚低耦合设计,实现一个高内聚低耦合的接口该如何解决
|
6月前
软件设计原则:耦合与内聚
软件设计原则:耦合与内聚
147 0
|
设计模式 网络协议 测试技术
你的代码是否按照高内聚、低耦合的原则来设计的?
你的代码是否按照高内聚、低耦合的原则来设计的?
|
存储 安全 程序员
软件工程的耦合和内聚
软件工程的耦合和内聚
256 0
软件架构设计原则--迪米特原则
本专栏内容参考自:咕泡学院Tom老师的《Spring5核心原理与30个类手写实战》,仅作个人学习记录使用,如有侵权,联系速删
软件架构设计原则--迪米特原则
|
XML JavaScript 前端开发
软件设计——依赖倒置
软件设计——依赖倒置
241 0
软件设计——依赖倒置
|
设计模式
【设计模式】软件设计七大原则 ( 迪米特原则 | 代码示例 )
【设计模式】软件设计七大原则 ( 迪米特原则 | 代码示例 )
121 0