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

news2024/11/28 2:33:45

文章目录

    • 一、前言
    • 二、内聚
      • 1、定义
      • 2、7 种内聚类型及其描述
      • 3、设计要求
    • 三、耦合
      • 1、定义
      • 2、7 种耦合类型及其描述
      • 3、设计要求
    • 四、总结

一、前言

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

二、内聚

1、定义

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

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

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

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

3、设计要求

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

三、耦合

1、定义

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

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

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

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

3、设计要求

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

四、总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1985214.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024实验班选拔考试(热身赛)

比赛传送门 邀请码&#xff1a;2024wksyb A. 简单的数列问题 签到&#xff0c;记得开long long。 #include<bits/stdc.h> #define rep(i,a,b) for (int ia;i<b;i) #define per(i,a,b) for (int ia;i>b;--i) #define se second #define fi first #define endl …

linux进程篇总结——实战——自定义shell

前言&#xff1a;经过过去两章十二篇文章的学习&#xff0c;我们已经知道了进程的基本概念以及进程的控制方法。 本篇内容就是使用过去学习的内容自己写一个功能简单的shell外壳程序&#xff0c; 也就是我们使用的bash命令行。 本篇内容是过去进程知识的集大成者。 我们在这个实…

智慧能源管理:助力公共机构节能增效

一、背景&#xff1a; 在全球倡导绿色发展、节能减排的时代浪潮下&#xff0c;公共机构作为社会服务的重要提供者&#xff0c;能源消耗量大&#xff0c;特别是在照明方面能源消耗问题尤为突出。从政府办公楼的日常照明&#xff0c;到学校教室的学习照明&#xff0c;再到医院走…

计算机组成原理 - 存储系统

存储系统 考纲内容 存储器的分类层次化存储器的基本结构半导体随机存储器(RAM) SRAM、DRAM、Flash存储器主存储器 DRAM芯片和内存条、多模块存储器、主存储器和CPU之间的连接外部存储器 磁盘存储器、固态硬盘(SSD)高速缓冲存储器(Cache) Cache的基本原理&#xff1a;Cache和主…

解读智慧车间生产线的智慧大脑:ARMxy 工业计算机边缘控制器

在现代工业制造中&#xff0c;智慧车间生产线的建设已成为提高生产效率、降低成本、提升产品质量的关键。而 ARMxy 工业计算机边缘控制器作为智慧车间生产线的智慧大脑&#xff0c;正发挥着越来越重要的作用。 ARMxy 工业计算机边缘控制器是一种基于 ARM 架构的嵌入式工业计算机…

JavaWeb基础1:HTML/CSS/JS/HTTP

JavaWeb基础1&#xff1a;HTML/CSS/JS/HTTP (qq.com)

C-sharp-console-gui-framework:C#控制台应用程序的GUI框架

推荐一个.Net开源项目&#xff0c;方便我们基于控制台创建图形用户界面&#xff08;GUI&#xff09;应用程序。 01 项目简介 ConsoleGUI是一个简单的布局驱动.NET框架&#xff0c;用于创建基于控制台的GUI应用程序。 核心功能&#xff1a; **布局驱动&#xff1a;**与WPF或H…

WCN7851 WIFI7适配RK3588实战

一、平台信息 平台:触觉智能IDO-EVB3588-V1 WIFI模组:欧飞信O7851PM Kernel版本:GNU/Linux 5.10.110 aarch64 系统版本:Ubuntu 20.04.6 LTS 搭载RK3588高性能SOC,集成了四核Cortex-A76和四核Cortex-A55 CPU,主频高达2.4G O7851PM与开发板连接实物图如下,模块通过M.2转…

ctfhub文件上传

⽆验证 上传⼀句话⽊⻢&#xff0c;发现上传成功 1.php ⼀句话⽊⻢内容&#xff1a; <?php eval($_POST[cmd]);?> 上传⼀句话⽊⻢&#xff0c;发现上传成功 http://challenge-8b27d18368ecc25c.sandbox.ctfhub.com:10800/upload/1.ph p 前端验证 开启题⽬ 上传⼀个…

学习日志8.5--ARP攻击与防范

目录 ARP欺骗攻击 ARP泛洪防范&#xff08;动态ARP检测&#xff09; ARP欺骗攻击 ARP中间人攻击&#xff0c;中间人可以通过交换机查询交换表获取主机和网关的IP地址信息中间者通过ARP的查询可以知道PC2的IP地址和MAC地址&#xff0c;知道R2的IP地址和MAC地址&#xff0c;攻…

CVE-2023-1313

开启靶场 url访问/install来运行安装 http://eci-2ze0wqx38em0qticuhug.cloudeci1.ichunqiu.com/install/ 得知其用户和密码为admin 登录 查找文件上传位置 上传一句话木马文件 <?php echo phpinfo();eval($_POST[flw]);?> 下载查看上传木马路径 复制路径 /storag…

59 函数参数——默认值参数

在定义函数时&#xff0c;Python 支持默认值参数&#xff0c;在定义函数时可以为形参设置默认值。 在调用带有默认值参数的函数时&#xff0c;可以不用为设置了默认值的形参进行传递&#xff0c;此时函数将会直接使用函数定义时设置的默认值&#xff0c;当然也可以通过显式赋值…

第四届机械制造与智能控制国际学术会议(ICMMIC 2024,9月27-29)

2024年第四届机械制造与智能控制国际学术会议&#xff08;ICMMIC 2024&#xff09;将于2024年9月27-29日在中国沈阳沈阳理工大学举行。 本会议将围绕“机械制造、智能控制”的最新研究领域&#xff0c;促进机械工程、兵器科学与技术、控制科学与工程等相关学科的发展与交叉融合…

AUTOSAR之ECUM

1、EcuM简介 EcuM&#xff08;ECU State Management&#xff09;ECU状态管理模块属于AUTOSAR系统服务中模式管理部分&#xff0c;主要功能是管理ECU的上下电&#xff0c;初始化和反初始化OS&#xff0c;SchM&#xff0c;BswM以及其他一些驱动模块。 AUTOSAR 4.4版本前Ec…

WPF学习(5)- Border控件(边框布局)+GridSplitter分割窗口

严格来说&#xff0c;Border并不是一个布局控件&#xff0c;因为它并不是Panel的子类&#xff0c;而是Decorator装饰器的子类&#xff0c;而Decorator继承于FrameworkElement。我们要先看看它的父类Decorator。 public class Decorator : FrameworkElement, IAddChild {public…

【区块链+医疗健康】医保监管飞检魔方可信链 | FISCO BCOS应用案例

《“十四五”全民医疗保障规划》提出加快健全基金监管体制机制&#xff0c;要求飞行检查全覆盖。近年来&#xff0c;国家医保局 飞行检查专项行动&#xff0c;累计发现问题 70 多万家次&#xff0c;累计追回医保基金 340 多亿元。而飞行检查面临检查时间短、 工作任务重、数据多…

Linux 使用kickstart创建脚本实现新建虚拟机自动安装

Linux版本&#xff1a;红帽7.9 确保网络配置可用&#xff0c;本地仓库可用&#xff0c;同时已经挂载/dev/cdrom,可用yum list查看 一、环境配置&#xff1a; 1、首先保证是有图形界面 利用hostnamectl 查看 如果没有安装图形界面可以使用yum group install "Server wi…

源码编译安装LAMP(HTTP服务,MYSQL ,PHP)

一、安装Apache 可在生产环境使 下载在 下面两个插件是httpd2.4以后的版本所需要 tar xf apr-1.6.2.tar.gz tar xf apr-util-1.6.0.tar.gz 虽然xf通常足够&#xff0c;但使用与压缩算法对应的选项可以提供更好的控制。 tar xjf httpd-2.4.29.tar.bz2 mv apr-1.6.2 httpd-2.4.…

How to run OpenAI Gym .render() over a server

题意&#xff1a;怎样在服务器上运行 OpenAI Gym 的 .render() 方法 问题背景&#xff1a; I am running a python 2.7 script on a p2.xlarge AWS server through Jupyter (Ubuntu 14.04). I would like to be able to render my simulations. 通过 Jupyter&#xff08;在 U…

鸿蒙Navigator跳转不生效的问题

新增配置文件&#xff1a; 注意&#xff1a;该文件要在moudle中配置引用&#xff0c;非则跳转无法生效&#xff1a;