耦合是什么意思(彻底理解什么是内聚和耦合?)
软件设计应坚持模块独立的原则。有两个标准来反映模块的独立性:内聚性和耦合性。内聚性度量模块中每个元素相互结合的紧密程度,耦合性度量模块之间相互依赖的程度。
耦合
耦合是指模块之间的关联程度。模块之间的关联程度取决于以下几点:
从一个模块到另一个模块的访问。例如,模块A可能调用模块B来完成一个功能,所以模块A依赖模块B来完成其功能。
模块之间传输的数据量。
从一个模块传输到另一个模块的控制信息。
模块间接口的复杂。
根据这几点,耦合可以分为七类:
内容耦合:
如果一个模块直接引用另一个模块的内容,则这两个模块是内容耦合的。
公共耦合:
如果多个模块访问相同的公共数据环境,它们被称为公共耦合。公共数据环境可以是全局数据结构、共享通信区域、内存的公共覆盖区域等。因为多个模块共享同一个公共数据环境,如果一个模块修改数据,会影响所有相关模块。
外部耦合:
如果两个模块访问同一个全局简单变量而不是同一个全局数据结构,那么这两个模块属于外部耦合。
控制耦合:
如果模块A向模块B发送控制消息,则称这两个模块是控制耦合的。例如,当一个函数名作为参数传递给另一个模块时,它实际上控制着另一个模块的执行逻辑。控制的主要问题是两个模块不是相互独立的,调用模块必须知道被调用模块的内部结构和逻辑,这不符合信息隐藏和抽象的设计原则,也降低了模块的可重用性。
数据结构耦合:
当一个模块调用另一个模块时,整个数据结构被传递,因此两个模块之间存在数据结构耦合。
数据耦合:
如果两个模块传输数据项,那么两个模块就是数据耦合。
间接耦合:
如果两个模块之间没有直接的联系,那么它们之间的联系完全是通过主模块的控制和调用来实现的,这就是间接耦合。
以上耦合中,内容耦合是模块间最紧密的耦合,间接耦合是模块间最松散的耦合。软件设计的目标是降低模块之间的耦合度。设计原则应该是:尽量使用数据耦合,少用控制耦合,限制公共耦合,坚决不使用内容耦合。
内聚力
内聚性是指模块内元素之间关系的紧密程度。衔接分为七种类型。下面讨论内聚的含义及其对软件独立性的影响。
巧合凝聚力:
如果一个模块执行几个完全不相关的动作,那么这个模块就具有重合内聚性。
逻辑衔接:
当一个模块执行一系列相关的动作时,就被称为具有逻辑内聚性。例如,模块可以插入、删除和修改主文件。通常,逻辑内聚的模块包含太多相关的功能。当一个模块包含的功能较多时,模块的入口参数必然较多,模块中的哪些功能通常是根据入口参数来决定的。因此,逻辑内聚模块带来两个问题:一是接口参数复杂,难以理解;二是多种功能交织,降低了模块的可维护性。
时间凝聚力:
当一个模块中的多个任务与时间相关时,这个模块具有时间内聚性。最常见的时间聚合模块是初始化模块。除了时间需要在系统初始启动时完成之外,本模块中的动作之间没有其他关系。
流程衔接:
模块执行的几个动作是相互关联的,并且具有顺序关系。例如,从输入接口读取数据,然后更新数据库记录。它仍然是通过将几个相关的功能放在一个模块中来实现的。信息网络
沟通凝聚力:
模块中的所有元素使用相同的输入数据或产生相同的输出数据。
顺序衔接:
如果一个模块中的处理元素与同一个功能密切相关,并且这些过程必须按顺序执行,那么这个模块就具有顺序内聚性。
功能衔接:
模块的每个部分都是完成特定功能的必要组件。这些部分相互协调工作,密切相关,不可分割,旨在完成一项完整的功能。具有内聚功能的模块是最理想的模块,易于理解和维护,具有良好的可重用性。
在以上七种衔接中,功能衔接模块的独立性最强,重合衔接模块的独立性最弱。设计时,要尽量保证模块的功能衔接。
凝聚力和耦合是相互关联的。在整体设计中,要尽量提高模块的内聚性,减少模块之间的耦合。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 ZLME@xxxxxxxx@hotmail.com 举报,一经查实,立刻删除。