软件工程——内聚性和耦合性

一、耦合性

耦合性指软件结构中模块相互紧密连接的紧密程度。

耦合性由高到低分别为:内容耦合、公共耦合、外部耦合、控制耦合、标记耦合、数据耦合、非直接耦合。

1.内容耦合:

一个模块直接访问另一个模块的内部数据;

一个模块不通过正常入口转到另一模块的内部;

一个模块有多个入口;

两个模块有部分代码重叠。

内容耦合是程度最高的耦合,内容的非正常访问可能造成内容耦合

2.公共耦合:

若干模块访问一个公共的数据环境(全局数据结构、共享的通信区、内存的公共覆盖区等),耦合的复杂程度随耦合模块的数量的增加而显著增加。

3.外部耦合:

一组模块都访问同一公共变量(这里特指基本数据类型,而不是那种复杂的数据结构),而不是通过参数表达传递该全局变量的信息。

虽然。外部耦合和公共耦合都涉及到模块对公共资源的访问,但他们在访问资源类型、模块之间的关联度以及维护的复杂性上都有所区别。

4.控制耦合:

一个模块传递给另一模块的信息是用于控制该模块内部逻辑的控制信号。对被控制模块的任何修改,都会影响控制模块。

5.标记耦合:

当两个模块之间传递的是数据结构,比如高级语言的数组名、记录名、文件名等,这些名字就好像是标记一样,但实际上传递的是这个数据结构的地址。这种耦合方式需要模块之间共享这些标记或标识符,并且依赖于这些标记或标识符的具体实现。因此,标记耦合的模块之间耦合度较高,因为它们需要共享并理解这些标记的含义和作用。

6.数据耦合:

数据耦合是指两个模块之间通过参数传递数据来进行通信。这种耦合方式只需要模块之间共享数据,但并不依赖于数据的具体实现。也就是说,模块之间传递的是数据的值,而不是数据的地址或结构。因此,数据耦合的模块之间耦合度较低,因为它们只需要理解数据的含义和作用,而不需要关心数据的具体实现。这种耦合方式使得模块更加独立,易于重用和修改。

标记耦合和数据耦合的主要区别在于模块之间的通信方式不同,有些类似于引用传递和值传递。

7.非直接耦合:

两个模块间没有直接的关系,它们分别从属于不同模块的控制与调用,它们之间不传递任何信息。这种耦合程度最弱,模块的独立性最高。

二、内聚性

内聚性表示一个模块内部各个元素(数据、处理)之间的紧密程度。

内聚性由低到高分别为:巧合型内聚、逻辑型内聚、时间型内聚、过程型内聚、通信型内聚、顺序型内聚、功能型内聚。

1.巧合型:

又称为偶然型内聚,单纯为了节省空间,将毫无联系或联系不多的各元素放在一个模块中。模块元素关系松散,不易于理解和修改。

2.逻辑型:

将几个逻辑上相似的功能放在一个模块中,当模块被调用时,他会根据传送给他的参数来确定应该完成哪一个功能。

3.时间型:

把需要同属执行的成分放在一个模块中。

4.过程型:

一个模块内的处理元素是相关的,而且必须以特定的次序执行。

5.通信型:

模块中的成分引用的输入数据,或者产生相同的输出数据。

6.顺序型:

一个模块内的处理元素都密切相关于同一功能,模块中某个成分的输出是另一成分的输入。这类模块按顺序执行,模块的一部分依赖于另外一部分。

通信型内聚类似于并联关系,顺序型内聚类似于串联关系。

7.功能型:

一个模块包括且仅包括完成某一功能所必需的所有成分。即模块的所有成分都是为完成该功能而协同工作的、紧密联系、不可分割。

在编写模块时,要符合"高内聚、低耦合"的原则。

相关推荐
記億揺晃着的那天7 小时前
【Agent 架构实战】大模型长期项目开发:决策文档生命周期管理与 CI 门禁治理
软件工程·devops·架构设计·ai agent·文档管理
rolt8 小时前
智能机床-06 机械 ISO 23704-4-2026-用UML表示的行业标准
软件工程·产品经理·架构师·uml
️公子10 小时前
Claude Code 2.1.289 补上四个 deny 缺口:Agent 权限匹配器的规范化、分层裁决与回归语料
软件工程·ai agent·权限控制·claude code·安全工程
对讲机数码科普2 天前
数字集群对讲工程全流程拆解:DMR/ePDT 制式选型、组网落地与运维实战
运维·软件工程
硅谷秋水2 天前
EmbodiedSWE:面向长时程灵巧机器人的编程智能体
人工智能·机器学习·语言模型·机器人·软件工程
郝学胜-神的一滴2 天前
C++ Templates 03:手写一个Stack看透模板核心机制
开发语言·c++·产品运营·软件工程·产品经理
rolt2 天前
05 医学 ISO 13940-用UML表示的行业标准,健康信息学 — 支持照护连续性的概念体系
软件工程·架构师·uml
️公子2 天前
决策模型开战:Jev / Decisions API / Strands Decider 的 ClosedSet、置信度闸门与混合 Agent
人工智能·大模型·软件工程·agent·决策模型
蜗牛互联网3 天前
从Barclays扩大Claude部署看受监管软件工程的责任重分配
java·大数据·人工智能·后端·软件工程
rolt3 天前
3GPP-5G-用UML表示的行业标准-04电信移动通信
软件工程·ddd·uml·ontology