内聚和耦合

模块的独立性可以由两个定性标准来衡量:内聚和耦合。

内聚:内聚描述一个模块内部各元素之间相互结合的紧密程度。

耦合:耦合描述不同模块彼此间相互依赖(连接)的紧密程度。

 

一个模块的内聚性越高,相对地,它和其他模块之间的耦合就会降低。

 

模块可以是函数也可以是类等等。

 

内聚有7种,由弱到强依次为

偶然内聚:模块内无法定义其不同功能的调用,一堆功能写在一起。

 

逻辑内聚:这种函数把几种相关的功能或数据组合在一起,每次被调用时,由传送函数参数来确定该函数应该完成哪些功能。(把 偶然内聚 的功能分开写到else if里)。

 

时间内聚:把需要同时执行的动作组合在一起形成的函数称为时间内聚函数。(一组不相关的变量在一起初始化,就是时间内聚的典型例子)

 

过程内聚:函数内的构件或操作之间的组合方式是,允许在调用前面的构件和操作之后,马上调用后面的构件和操作,即使两者之间没有数据进行传递

(比如把对文件的操作写在一个函数内,首先要打开文件,然后对文件进行各种操作,最后关闭文件。这个函数就是过程内聚。)

(注意和顺序内聚区别)

 

通信内聚:指函数内所有处理元素都在同一个数据结构上操作,或者指各个处理使用相同的输入数据或者产生相同的输出数据。

 

顺序内聚:指一个函数中各个处理元素都密切关于同一功能且必须顺序执行,前一功能元素的输出就是下一功能元素的输入,即一个函数完成多个功能,这些功能必须顺序执行。(函数内的构建和操作有数据传递)

 

功能内聚:一个函数中各部分都是某一具体功能的必不可少的组成部分,不可分割。(一个模块只实现一个功能)

 

可以说除了功能内聚是一个模块只实现一个功能,其他的内聚都有可能实现多个功能。

 

 

耦合有7种,由弱到强依次为

非直接耦合:两个函数之间没有直接的关系,之间的联系完全是依靠其他函数的调用和控制来实现的。

 

数据耦合:一个函数访问另一个函数,彼此之间通过简单数据参数来交换输入、输出信息。

 

标记耦合:如一组函数通过参数表传递记录信息,就是标记耦合。这个记录是某一结构的子结构,不是简单变量。比如结构体。

 

控制耦合:一个函数通过传递开关、标志、名字等控制信息,明显控制和选择另一个函数的功能。

(这是因为被调用的函数是逻辑内聚,这是即使传的是简单数据,调用者和被调用的函数之间也是控制耦合)

 

外部耦合:一组函数都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数传递该全局变量的信息

 

公共耦合:一组函数都访问同一公共数据环境。(这个环境是复杂数据,且不是通过参数传递)

 

内容耦合:应该函数直接修改另一个函数的数据,编写一个函数时一定要考虑另一个函数。两个内容耦合的函数几乎无法分离。

 

对于耦合:应尽量使用数据耦合,减少控制耦合,控制外部环境和公共耦合,杜绝内容耦合,降低接口的复杂度。

 

 

 

 

 

 

  • 15
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值