什么是内聚和耦合? 耦合是什么意思


在软件设计中应该保持模块的独立性原则 。反映模块独立性有两个标准:内聚和耦合 。内聚衡量一个模块内部各个元素彼此结合的紧密程度 , 耦合衡量模块之间彼此依赖的程度 。
耦合耦合是指模块间相互关联的程度 。模块间的关联程度取决于下面几点:
一个模块对另百思特网一个模块的访问 。比如 , 模块A可能要调用模块B来完成一个功能 , 所以说模块A要依赖于模块B完成它的功能 。
模块间传递的数据量 。
一个模块传递给另一个模块的控制信息 。
模块间接口的复杂程度 。
根据这几点可将耦合分为7类:

什么是内聚和耦合? 耦合是什么意思

文章插图


内容耦合:
如果一个模块直接引用另一个模块的内容 , 则这两个模块是内容耦合 。
公共耦合:
如果多个模块都访问同一个公共数据环境 , 则称它们是公共耦合 。公共数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等 。由于多个模块共享同一个公共数据环境 , 如果其中一个模块对数据进行了修改 , 则会影响到所有相关模块 。
外部耦合:
如果两个模块都访问同一个全局简单变量而不是同一全局数据结构 , 则这两个模块属于外部耦合 。
控制耦合:
如果模块A向模块B传递一个控制信息 , 则称这两个模块是控制耦合的 。例如 , 把一个函数名作为参数传递给另一个模块时 , 实际上就控制了另一个模块的执行逻辑 。控制耦合的主百思特网要问题是两个模块不是相互独立的 , 调用模块必须知道被调用模块的内部结构和逻辑 , 这样就不符合信息隐藏和抽象的设计原则 , 并且也降低了模块的可重用性 。
数据结构耦合:
当一个模块调用另一个模块时传递了整个数据结构 , 那么这两个模块之间具有数据结构耦合 。
数据耦合:
如果两个模块传递的是数据项 , 则这两个模块是数据耦合 。
非直接耦合:
如果两个模块之间没有直接关系 , 它们之间的联系完全通过主模块的控制和调用来实现 , 这就是非直接耦合 。
上面的几种耦合中 , 内容耦合是模块间最紧密的耦合 , 非直接耦合是模块间最松散的耦合 。软件设计的目标是降低模块间的耦合程度 , 设计时应该采取这样的设计原则:尽量使用数据耦合 , 少用控制耦合 , 限制公共耦合 , 坚决不用内容耦合 。
内聚内聚是指一个模块内部各元素之间关系的紧密程度 。内聚分为7种类型 。下面分别讨论各种内聚的含义及其对软件独立性的影响 。
什么是内聚和耦合? 耦合是什么意思

文章插图


巧合内聚:
一个模块执行多个完全互不相关的动作 , 那么这个模块就有巧合内聚 。
逻辑内聚:
当一个模块执行一系列相关的动作时 , 称其有逻辑内聚 。例如 , 一个模块执行对主文件的插入、删除和修改操作 。一般逻辑内聚的模块含有太多的相关功能 , 一个模块含有较多的功能时 , 模块的入口参数一定比较多 , 通常是根据入口参数决定执行百思特网模块中的哪个功能 。所以 , 逻辑内聚模块带来两个问题:一个是接口参数复杂 , 难于理解;另一个是多个功能纠缠在一起 , 使得模块的可维护性降低 。
时间内聚:
当一个模块内的多个任务与时间有关时 , 这个模块具有时间内聚 。最常见的时间内聚模块是初始化模块 , 在这个模块中的动作之间 , 除了时间上需要在系统初启时完成之外 , 没有其他的关系 。
过程内聚:
模块执行的若干动作之间相互关联并且有顺序关系 。例如 , 从录入界面读取数据 , 然后更新数据库记录 。它仍然是将多个相关的功能放在一个模块中实现 。
通讯内聚:
模块中所有元素都使用同一个输入数据或产生同一个输出数据 。
顺序内聚:
如果一个模块中的处理元素和同一个功能密切相关 , 并且这些处理必须是顺序执行的 , 那么这个模块具有顺序内聚 。
功能内聚:
一个模块中各个部分都是完成某一具体功能必不可少的组成部分 。这些部分相互协调工作 , 紧密联系 , 不可分割 , 目的是完成一个完整的功能 。具有功能内聚的模块是最理想的模块 , 这种模块易于理解和维护 , 并且它的可重用性好 。

推荐阅读