软件工程中的7种耦合和内聚(详解)
创作时间:
作者:
@小白创作中心
软件工程中的7种耦合和内聚(详解)
引用
CSDN
1.
https://blog.csdn.net/m0_62056231/article/details/137977538
耦合(Coupling)和内聚(Cohesion)是软件工程中衡量模块设计质量的两个核心概念。耦合描述了模块间的依赖关系强度,而内聚则关注模块内部各部分的关联程度。理想的软件设计追求"低耦合高内聚",以实现更好的模块独立性、可维护性和可复用性。本文将详细介绍7种耦合类型和7种内聚类型,帮助读者深入理解这些概念在软件开发中的应用。
什么是耦合和内聚?
内聚(Cohesion):内聚指的是模块内部各元素之间的联系紧密程度。一个模块的内聚度越高,说明其内部功能越集中,模块的独立性和可维护性越好。低内聚意味着模块的功能可以被进一步拆分,每个子功能可以独立成模块。
耦合(Coupling):耦合描述了模块间的依赖关系。高耦合意味着模块间的依赖关系紧密,一个模块的变更可能会影响其他多个模块。低耦合则意味着模块间的依赖关系较弱,模块更易于独立开发和维护。
软件开发应向“低耦合高内聚”靠拢,理想的软件设计应该追求低耦合和高内聚。低耦合可以使模块更独立、更易于修改和维护;高内聚则确保模块内部逻辑清晰、专注,更易于理解和复用。
7种耦合类型
- 内容耦合(Content Coupling)
- 定义:一个模块直接使用另一个模块的内部数据或控制流程。
- 例子:一个类直接调用访问另一个类的属性信息。
- 公共耦合(Common Coupling)
- 定义:当两个或更多模块共享同一个全局数据结构或全局变量时。
- 特点:这种耦合方式比较紧密,因为模块间的共享数据使得它们的依赖关系更加显著。与数据耦合不同,公共耦合涉及的全局数据结构可能会被多个模块同时读写,增加了模块间的耦合度。
- 外部耦合(External Coupling)
- 定义:当多个模块共享一个外部传来的数据结构或全局变量时。
- 例子:I/O 将模块耦合到特定的设备、格式、通信协议上。
- 控制耦合(Control Coupling)
- 定义:当一个模块控制着另一个模块的逻辑流程(比如通过传递控制参数)时。
- 特点:存在流程控制,说明控制参数会决定接下来的流程。典型的例子就是计算电费,有个参数,是计算平均的还是最高的,平局和最高是两个独立的计算模块,因此,这两个计算模块分别和计算电费模块耦合。
- 标记耦合(Stamp Coupling)
- 又叫特征耦合,当把整个数据结构作为参数传递,而被调用的模块只需要使用其中一部分数据元素时,就出现了特征耦合。
- 代码示例:
public class Main { private static void 特征耦合(Dog d) {//这里的参数即被“特征耦合”模块引用的Dog模块(类)的数据结构。 System.out.println(d.getName()); } private static void 非特征耦合(String name) { System.out.println(name); } public static void main(String[] args) { Dog d = new Dog("旺财");//这里可以看作main模块和Dog模块的数据耦合 特征耦合(d); 非特征耦合(d.getName()); } }
- 数据耦合(Data Coupling)
- 定义:当模块间的交互仅仅通过参数来传递基本数据类型时。
- 特点:这是最佳的耦合方式。如上面的赋值操作,或者如下的电费计算。
- 无耦合(No Coupling)
- 定义:模块之间没有任何直接的关系。
- 特点:这是最理想的状态,但在实际应用中很难完全实现。(也经常说6种耦合7种内聚,所以也可以说这不算是一种耦合)
7种内聚类型
- 偶然内聚(Coincidental Cohesion)
- 定义:模块内部各个部分之间没有明显的关联,仅仅是偶然放在一起。
- 特点:通常会导致代码难以维护和理解。这里提一嘴,我认为代码生成器就是一种偶然内聚,只是因为其他模块都有执行若干不相干的语句,我们将之提取,并作为独立模块。
- 逻辑内聚(Logical Cohesion)
- 定义:当一个模块中的元素被组织在一起,因为它们在逻辑上分类相似,通常通过一个控制语句(如 if-else 或 switch)来选择执行。
- 特点:一些不相干的功能被组织在同一个模块中,通过外部参数来控制实现哪个功能。简单记为,通过逻辑语句联系在一起的内聚。
- 时间内聚(Temporal Cohesion)
- 定义:模块中的元素相关联,因为它们需要在同一时间段内被执行。
- 特点:顾名思义,就是单纯在时段上重合,也称为瞬时内聚,关键词就是同时执行。
- 过程内聚(Procedural Cohesion)
- 定义:当模块中的元素协同工作执行一个任务序列,彼此之间按照特定顺序执行。
- 特点:例如:先写姓名 → 电话 → 家庭住址,先后顺序符合客户需求。关键词就是特定顺序执行。
- 通信内聚(Communication Cohesion)
- 定义:模块中的所有功能都操作相同的数据结构。
- 特点:即指模块内各个组成部分都使用相同的数据结构或产生相同的数据结构。例如:一个模块根据员工生日计算员工年龄和退休时间。
- 顺序内聚(Sequential Cohesion)
- 定义:当一个模块内的操作必须按特定顺序执行,输出数据成为下一步操作的输入数据时。
- 特点:前一功能元素的输出就是下一功能元素的输入。例如:先计算员工的年龄再计算退休时间。例如某要完成获取订单信息的功能,前一个功能获取用户信息,后一个执行计算均价操作,显然该模块内两部分紧密关联。过程内聚与顺序内聚的区别是:顺序内聚中是数据流从一个处理单元流到另一个处理单元,而过程内聚是控制流从一个动作流向另一个动作。
- 功能内聚(Functional Cohesion)
- 定义:当一个模块内的所有功能都是围绕一个单一的功能组织的,这是最高级别的内聚。
- 特点:ALL for ONE,所有处理元素只为完成某一个功能,缺一不可。
模块独立性排序
热门推荐
文件被病毒隐藏了怎么恢复?最多4步成功显示隐藏文件
承德医学院2025年招生简章(含招生计划、录取分数线)
夫妻财产分开怎么办理?对方拒绝怎么办?律师教你解法!
异地报警是怎么受理的?异地报警的受理流程和注意事项是什么?
变暖加速?2024全球刷新高温纪录,首破巴黎协定1.5度温控目标
探秘拉布拉多智商高的神奇之处(揭秘拉布拉多智商高的原因和培养方法)
破百亿、产量增速超20%!清远西牛麻竹笋产业为什么能?
Spring Bean生命周期详解:检查Aware相关接口
如何连接另一台电脑上的打印机?连接共享打印机的详细教程
曾获奥斯卡奖的争议电影《弱点》遭网友吐槽:改编不是乱编
企业如何打击商标侵权行为
服务器安全基线检查的详细解析
黄金价格反映了什么?如何分析这一时期的价格走势?
榴莲长毛了还能吃吗 不小心吃了发霉的榴莲怎么办
专业性岗位面试攻略:如何有效展示你的专业技能
2025年天津楼市趋势解析:购房者的保值增值指南
姐妹共侍一帝,地位天壤之别,那些姐妹后妃最终都是什么结局?
Circulation:法洛四联症术后心脏再同步治疗的长期疗效
如何降低论文查重率?
三种风味炸鸡翅制作方法详解
08年奥运安保有多严?被美国纳入学习教材,礼仪小姐身份不简单!
公章的备案证明丢了怎么办理
哪些蜜蜂是有毒的?毒性最大最凶猛的几种蜂类盘点
肺炎输液儿童护理全攻略:从输液到家庭护理的全方位指南
溴吡斯的明(Pyridostigminbromid)会出现副作用吗
两年前,一位57岁男子移植猪心脏,手术很成功,如今他怎么样了?
动物医学专业职业规划:不仅仅是宠物医生
Abaqus使用机器学习优化焊接完整性
胰岛素依赖性:真相与误解
藿香正气滴丸说明书主要包含哪些成分及功效是什么