【架构设计】软件设计原则中的7种耦合和内聚(详解)

<> 博客简介:Linux、rtos系统,arm、stm32等芯片,嵌入式高级工程师、面试官、架构师,日常技术干货、个人总结、职场经验分享

<> 公众号:嵌入式技术部落

<> 系列专栏:C/C++、Linux、rtos、嵌入式开发、流媒体、数据结构、网络协议、开源库、CMake、Makefile、架构设计模式等

一、前言

耦合(Coupling)和内聚(Cohesion)是衡量软件模块设计质量的两个非常重要的概念。高内聚、低耦合是我们在软件设计过程中必须遵循的一个重要原则,在整个软件工程中占有很大的比重。而对于内聚和耦合你是否还是仅仅局限于“高内聚,低耦合”的模糊概念吗?如何判断何为高低呢?本篇文章将带你分别深度剖析和总结内聚与耦合的 7 种类型和描述,为在以后的项目软件开发中助你一臂之力!

二、内聚

1、定义

内聚指的是模块的内部关系,是一个模块内部各成分之间相关联程度的度量,即模块内部各元素之间联系的紧密程度。通俗来说,如果一个模块的功能能被拆分成很多小功能,那么这个模块的内聚度就不高。

2、7 种内聚类型及其描述

模块的内聚类型通常可以分为 7 种,我们根据内聚度从高到低排序,如下所示:

  • 功能内聚:模块内所有元素都紧密围绕一个单一的功能组织,共同完成一个特定的任务,所有处理元素只为完成某一个功能,缺一不可,这是最高级别的内聚。
  • 顺序内聚:一个模块内的操作必须按特定顺序执行,输出数据成为下一步操作的输入数据时。前一功能元素的输出就是下一功能元素的输入。
  • 通信内聚:模块中的所有功能都操作相同的数据结构,即指模块内各个组成部分都使用相同的数据结构或产生相同的数据结构。
  • 过程内聚:当模块中的元素协同工作执行一个任务序列,彼此之间按照特定顺序执行。
  • 时间内聚:模块中的元素相关联,因为它们需要在同一时间段内被执行。顾名思义,就是单纯在时段上重合(如:初始化模块)。
  • 逻辑内聚:当一个模块中的元素被组织在一起,因为它们在逻辑上分类相似,通常通过一个控制语句(如 if-else 或 switch)来选择执行。
  • 偶然内聚:模块内部各个部分之间没有明显的关联,仅仅是偶然放在一起,这是最低级别的内聚。
    在这里插入图片描述

3、设计要求

在软件模块设计中,追求高内聚,即模块内部各元素之间的联系越紧密越好,这样有助于模块功能的清晰和专注,提高模块的可理解性和复用性。

三、耦合

1、定义

耦合指的是各个模块之间的关系,是模块之间依赖程度的度量,即模块之间相互联系的紧密程度。通俗来说,如果两个模块的功能相互依赖,没有他我就不能做事,说明两个模块的联系非常紧密,依赖度高,耦合度高。

2、7 种耦合类型及其描述

模块的耦合性类型通常分为 7 种,我们根据耦合度从低到高排序,如下所示:

  • 非直接耦合:模块之间没有直接联系,互相不依赖对方。
  • 数据耦合:模块间的交互仅仅通过参数来传递基本类型的数据,这是最佳的耦合方式。
  • 标记耦合:模块间通过参数传递复杂的内部数据结构,这种数据结构的变化将使相关的模块发生变化。又叫特征耦合,当把整个数据结构作为参数传递,而被调用的模块只需要使用其中一部分数据元素时,就出现了特征耦合。
  • 控制耦合:当一个模块控制着另一个模块的逻辑流程(比如通过传递控制参数)时。存在流程控制,说明控制参数会决定接下来的流程。
  • 外部耦合:当多个模块共享一个外部传来的数据结构或者全局变量时。如 I/O 将模块耦合到特定的设备、格式、 通信协议上。
  • 公共耦合:两个或更多的模块共享同一个全局数据结构时,这些模块被认为具有公共耦合。公共环境可以是全局变量、共享数据、任何存储介质上的文件等。这种耦合的紧密程度取决于模块对公共数据的存取方式。
  • 内容耦合:一个模块直接使用另一个模块的内部数据或者控制流程时,这是最强的耦合类型,模块独立性最弱。
    在这里插入图片描述

3、设计要求

在模块设计中,追求低耦合,即模块之间的依赖关系越弱越好,这样有助于模块的独立性和可维护性,降低模块间相互影响的风险。

四、总结

本文给大家介绍了软件设计原则中两个核心概念——内聚、耦合,并对两个概念进行了阐述。同时分别补充了内聚与耦合各自的 7 种类型,便于我们判别其程度,在软件开发中更好地设计性能优良的软件系统,尽量的减少由于内聚、耦合度差带来后期维护和升级的困扰。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值