耦合与内聚
2014-04-26 11:45
288 查看
模块独立程度的两个定性标准度量:
耦合衡量不同模块彼此间互相依赖(连接)的紧密程度。耦合要低,即每个模块和其他模块之间的关系要简单;内聚衡量一个模块内部各个元素彼此结合的紧密程度。内聚要高,每个模块完成一个相对独立的特定子功能。
耦合程度的度量:
(1) 非直接耦合/完全独立(no direct coupling)
如果两个模块中的每一个都能独立地工作而不需要另一个模块的存在,那么它们完全独立。
在一个软件系统中不可能所有模块之间都没有任何连接。
(2) 数据耦合(data coupling)
如果两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据,那么这种耦合称为数据耦合。
(3) 控制耦合(control coupling)
如果两个模块彼此间传递的信息中有控制信息,这种耦合称为控制耦合。
(4) 特征耦合(stamp coupling)
当把整个数据结构作为参数传递而被调用的模块只需要使用其中一部分数据元素时,就出现了特征耦合。
评价:
被调用的模块可使用的数据多于它确实需要的数据,这将导致对数据的访问失去控制,从而给计算机犯罪提供了机会。
无论何时把指针作为参数进行传递,都应该仔细检查该耦合。
(5) 公共环境耦合(common coupling)
当两个或多个模块通过一个公共数据环境相互作用时,它们之间的耦合称为公共环境耦合。公共环境可以是全程变量、共享的通
信区、内存的公共覆盖区、任何存储介质上的文件、物理设备等等。
公共环境耦合的类型:
一个模块往公共环境送数据,另一个模块从公共环境取数据。数据耦合的一种形式,是比较松散的耦合。
两个模块都既往公共环境送数据又从里面取数据,这种耦合比较紧密,介于数据耦合和控制耦合之间。
(6) 内容耦合(content coupling)
最高程度的耦合是内容耦合。如果出现下列情况之一,两个模块间就发生了内容耦合:
一个模块访问另一个模块的内部数据;
一个模块不通过正常入口转到另一个模块的内部;
两个模块有一部分程序代码重叠;
一个模块有多个入口。
耦合是影响软件复杂程度的一个重要因素。
应该采取下述设计原则:
尽量使用数据耦合,
少用控制耦合和特征耦合,
限制公共环境耦合的范围, 完全不用内容耦合。
内聚:标志一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。简单地说,理想内聚的模块只做一件事情。
要求:设计时应该力求做到高内聚,通常中等程度的内聚也是可以采用的,而且效果和高内聚相差不多;但是,低内聚不要使用。
内聚和耦合是密切相关的,模块内的高内聚往往意味着模块间的松耦合。实践表明内聚更重要,应该把更多注意力集中到提高模块
的内聚程度上。
内聚程度的度量:
(1) 偶然内聚(coincidental cohesion)
如果一个模块完成一组任务,这些任务彼此间即使有关系,关系也是很松散的,就叫做偶然内聚。
(2) 逻辑内聚(logical cohesion)
如果一个模块完成的任务在逻辑上属于相同或相似的一类,则称为逻辑内聚。【比如都是运算】
(3) 时间内聚(temporal cohesion)
如果一个模块包含的任务必须在同一段时间内执行,就叫时间内聚。
【初始化:打开旧主文件、新主文件、事务文件和打印文件;初始化销售地区表;读第一条事务记录和第一条旧主文件记录;】
(4) 过程内聚(procedural cohesion)
如果一个模块内的处理元素是相关的,而且必须以特定次序执行,则称为过程内聚。
使用程序流程图作为工具设计软件时,常常通过研究流程图确定模块的划分,这样得到的往往是过程内聚的模块。
(5) 通信内聚(communicational cohesion)
如果模块中所有元素都使用同一个输入数据和(或)产生同一个输出数据,则称为通信内聚。即在同一个数据结构上操作。
通常,通信内聚模块时通过数据流图来定义的。如果一个模块的所有成分都操作同一数据集或生成同一数据集
(6) 顺序内聚(sequential cohesion)
如果一个模块内的处理元素和同一个功能密切相关,而且这些处理必须顺序执行,则称为顺序内聚。
(7) 功能内聚(functional cohesion)
如果模块内所有处理元素属于一个整体,完成一个单一的功能,则称为功能内聚。功能内聚是最高程度的内聚。
七种内聚的优劣评分结果:
高内聚:功能内聚 10分
顺序内聚 9分
中内聚:通信内聚 7分
过程内聚 5分
低内聚:时间内聚 3分
逻辑内聚 1分
偶然内聚 0分
设计时力争做到高内聚,并且能够辨认出低内聚的模块。
相关文章推荐
- 高内聚,低耦合
- 高内聚,低耦合
- 高内聚, 低耦合
- 耦合和内聚
- 高内聚,低耦合(整理)
- 软件工程中的内聚与耦合
- 耦合与内聚的分类整理
- 高内聚,低耦合
- 高内聚,低耦合?【转】
- 软件工程-耦合内聚
- 什么是高内聚、低耦合?
- 高内聚,低耦合
- 面向UI编程:ui.js 1.1 使用观察者模式完成组件之间数据流转,彻底分离组件之间的耦合,完成组件的高内聚
- 设计模式:高内聚,低耦合
- 关于模块化设计的内聚和耦合的个人理解
- 如何在struts+spring+hibernate的框架下构建低耦合高内聚的软件
- 高内聚,低耦合(转)
- 如何在struts+spring+hibernate的框架下构建低耦合高内聚的软件
- 理解“高内聚,低耦合”
- 计算机的模块的内聚程度和模块间的耦合程度是什么啊!