【软件工程 | 模块耦合】什么是模块耦合及分类
概念
耦合(coupling)是对两个模块之间联接程度的一种度量。模块间的依赖程度越大,则其耦合程度也就越大;
反之,模块间的依赖程度越小,则其耦合程度也就越小。
很显然,为了使软件具有较好的可维护性和可修改性,模块间的关联程度即耦合程度应越小越好。因为耦合程度越小,表明模块间的独立程度越大,这样在修改一个模块时,对其它模块的影响程度就越小,从而使模块的修改工作局限于一个最小范围之内。
分类
内容耦合
概念
⼀个模块直接修改或操作另⼀个模块的数据,或者直接转⼊另⼀个模块。
例子
模块A中定义了变量a,在模块B中直接使⽤了。这种情况下模块A和模块B就是内容耦合。
公共耦合
概念
两个以上的模块共同引⽤⼀个全局数据项。
例子
定义了⼀个全局变量a,在A、B、C模块中均调⽤了a,这种情况下模块A、模块B、模块C就是公共耦合。
数据耦合
概念
数据耦合是指两个或多个数据元素之间存在相互依赖的关系,其中一个数据元素的变化会影响到其他数据元素的值或状态。在软件开发中,数据耦合是一个非常重要的概念,因为它可以帮助我们更好地理解和设计软件系统
具体例子
1. 订单系统中的数据耦合
在一个订单系统中,订单信息、客户信息、产品信息等数据元素之间存在相互依赖的关系。例如,当一个客户下单时,订单信息中需要包含客户的姓名、地址、电话等信息,同时还需要查询产品信息来获取产品的价格、库存等信息。这些数据元素之间的耦合关系非常紧密,一个数据元素的变化会直接影响到其他数据元素的值或状态。
2. 财务系统中的数据耦合
在一个财务系统中,账户信息、交易信息、报表信息等数据元素之间存在相互依赖的关系。例如,当一个账户发生交易时,交易信息中需要包含账户的余额、交易金额等信息,同时还需要更新账户信息中的余额等数据元素。这些数据元素之间的耦合关系也非常紧密,一个数据元素的变化会直接影响到其他数据元素的值或状态。
3. 医疗系统中的数据耦合
在一个医疗系统中,病人信息、医生信息、药品信息等数据元素之间存在相互依赖的关系。例如,当一个病人看病时,医生需要查询病人的病史、药品过敏等信息,同时还需要开具处方来获取药品信息。这些数据元素之间的耦合关系也非常紧密,一个数据元素的变化会直接影响到其他数据元素的值或状态。
4. 物流系统中的数据耦合
在一个物流系统中,货物信息、车辆信息、路线信息等数据元素之间存在相互依赖的关系。例如,当一个货物需要运输时,需要查询车辆的状态、路线的情况等信息,同时还需要更新货物信息中的状态等数据元素。这些数据元素之间的耦合关系也非常紧密,一个数据元素的变化会直接影响到其他数据元素的值或状态。
5. 社交网络中的数据耦合
在一个社交网络中,用户信息、好友关系、消息信息等数据元素之间存在相互依赖的关系。例如,当一个用户发送消息时,需要查询好友的信息、消息的状态等信息,同时还需要更新消息信息中的状态等数据元素。这些数据元素之间的耦合关系也非常紧密,一个数据元素的变化会直接影响到其他数据元素的值或状态。
6. 游戏系统中的数据耦合
在一个游戏系统中,玩家信息、游戏关卡、游戏道具等数据元素之间存在相互依赖的关系。例如,当一个玩家通过一个关卡时,需要查询玩家的信息、关卡的状态等信息,同时还需要更新玩家信息中的经验值、金币等数据元素。这些数据元素之间的耦合关系也非常紧密,一个数据元素的变化会直接影响到其他数据元素的值或状态。
控制耦合
概念
⼀个模块在界⾯上传递⼀个信号控制另⼀个模块,接收信号的模块的动作根据信号值进⾏调整。
例子
模块A获取⽤户类型(普通⽤户、⾼级⽤户)传递给模块B,模块B根据不同类型的⽤户提供不同的服务。这种情况下模块A和模块B就是控制耦合。
标记耦合
概念
模块间通过参数传递复杂的内部数据结构。
例子
模块A向模块B传递Object类型的数据。这种情况下模块A和模块B就是标记耦合
启发式规则
尽量用数据耦合,少用控制耦合,限制公共耦合的范围,避免使用内容耦合。
高内聚、低耦合。
(1)改进软件结构,提高软件独立性。模块分解
(2)模块规模适中
(3)力求深度、宽度、扇出、扇入适中。
深度:表示其控制的层数。
宽度:同一层次上模块总数的最大值。
扇出:一个模块直接控制的下级模块的数目。
扇入:有多少个上级模块直接调用它。
原则:顶层模块扇出比较大,中间层模块扇出较小,底层模块具有较大的扇入。
(4)尽量使模块的作用域在其控制域内。
模块的控制域:这个模块本身以及所有直接或间接从属它的模块的集合。
模块的作用域:受该模块内一个判断所影响的所有模块的集合。
(5)尽力降低模块接口的复杂度
(6)力求模块功能可以预测
相关文章:
【软件工程 | 模块耦合】什么是模块耦合及分类
概念 耦合(coupling)是对两个模块之间联接程度的一种度量。模块间的依赖程度越大,则其耦合程度也就越大; 反之,模块间的依赖程度越小,则其耦合程度也就越小。 很显然,为了使软件具有较好的可维护性和可修改性…...
OCT介绍和分类
前言:研究方向和OCT有关,为了方便以后回顾,所以整理了OCT相关的一些内容。 OCT介绍和分类 OCT介绍分类时域OCT频域OCT扫频OCT谱域OCT OCT介绍 名称:OCT、光学相干层析成像术、Optical Coherence Tomography。 概念:O…...
07-2_Qt 5.9 C++开发指南_二进制文件读写(stm和dat格式)
文章目录 1. 实例功能概述2. Qt预定义编码文件的读写2.1 保存为stm文件2.2 stm文件格式2.3 读取stm文件 3. 标准编码文件的读写3.1 保存为dat文件3.2 dat文件格式3.3 读取dat文件 4. 框架及源码4.1 可视化UI设计4.2 mainwindow.cpp 1. 实例功能概述 除了文本文件之外ÿ…...
SpringBoot复习:(41)配置文件中配置的server开头的属性是怎么配置到Servlet容器中起作用的?
ServletWebServerFactoryAutoConfiguration类: 可以看到其中使用了EnableConfigurationProperties导入了ServerProperties 而ServerProperties通过使用ConfigurationProperties注解导入了配置文件中已server开头的那些配置项。 可以看到ServletWebServerFactory定…...
深入解读网络协议:原理与重要概念
目录 TCP/IP协议 IP地址 子网掩码 DNS 网关 网络端口 TCP/IP协议 TCP/IP是互联网通信的基础协议。它由两个部分组成:TCP负责数据的可靠传输,确保数据按序到达目标;IP负责寻址和路由,确保数据在网络中正确传递。TCP/IP协议簇…...
O型圈不同类型的应用指南
O型圈因其优异的密封性能而广泛应用于各个行业和应用。它们简单、经济高效且密封可靠,下面我们了解一下适合每种应用的特定类型的O型圈。 1、汽车行业 在汽车行业中,O型圈在密封发动机部件和防止机油或冷却剂泄漏方面发挥着至关重要的作用。常见应用包…...
Mysql 搭建MHA高可用架构,实现自动failover,完成主从切换
目录 自动failover MHA: MHA 服务 项目:搭建Mysql主从复制、MHA高可用架构 实验项目IP地址配置: MHA下载地址 项目步骤: 一、修改主机名 二、编写一键安装mha node脚本和一键安装mha mangaer脚本,并执行安装…...
Python:列表、元组、集合、字典,数据类型之间的 5 个差异
Python:列表、元组、集合、字典,数据类型之间的 5 个差异 1. 相同点2. 不同点2.1 排序2.2 索引2.3 可变性2.5 允许的类型2.4 允许重复 源码 这篇博客将介绍列表、元组、集合、字典(lists, tuples, sets, and dictionaries)数据类型…...
redis学习笔记(四)
文章目录 list(数组)(1)添加子成员(2)基于索引获取列表成员(3)获取列表的切片(4)获取列表的长度(5)按索引设置值(6&#x…...
-L和-rpath-link和-rpath
知识点 现代连接器在处理动态库时将链接时路径(Link-time path)和运行时路径(Run-time path)分开,用户可以通过-L指定连接时库的路径,通过-R(或-rpath)指定程序运行时库的路径,大大提…...
chatGPT小白快速入门培训课程-001
一、前言 本文是《chatGPT小白快速入门培训课程》的第001篇文章,全部内容采用chatGPT和chatGPT开源平替软件生成。完整内容大纲详见:《chatGPT小白快速入门课程大纲》。 本系列文章,参与: AIGC征文活动 #AIGC技术创作内容征文# …...
【Linux操作系统】深入理解Linux系统编程中的传入参数、传出参数和传入传出参数
在Linux系统编程中,函数的参数扮演着至关重要的角色。参数的传递方式可以分为传入参数、传出参数和传入传出参数。本文将详细解释这三种参数的概念、特点以及如何使用它们来实现灵活和高效的函数调用和数据传递。 文章目录 1. 解释和举例1.1 传入参数(i…...
(二)结构型模式:3、过滤器模式(Filter、Criteria Pattern)(C++示例)设计模式
目录 1、过滤器模式(Filter、Criteria Pattern)含义 2、过滤器模式应用场景 3、过滤器模式主要几个关键角色 4、C实现过滤器模式的示例 1、过滤器模式(Filter、Criteria Pattern)含义 (1)过滤器模式是…...
欧拉OS 使用 CentOS 7 yum repo
一、下载CentOS的repo的yum文件 任何基于CentOS的yum的repo 的url是这样的: 但欧拉OS输出这个变量为:openEuler 20.03 (LTS-SP3) 那明显欧拉想要使用这个yum的url找不到这个版本, 所以直接讲这个变量替换为 7, Centos 7的7 然后执行&…...
C进阶(1/7)——数据在内存中的存储
目录 前言: 一.数据类型介绍 类型基本归类: 整型家族: 浮点数家族: 构造类型: 指针类型: 空类型: 二.整型在内存中的存储 1.原码,反码,补码 2.大小端介绍 3.练…...
如何初始化Git仓库
如何将目录初始化为Git仓库 一级目录二级目录三级目录 一、准备1、安装 gh2、登录 二、初始化 Git 仓库 一级目录 二级目录 三级目录 一、准备 在这里,我们需要借助一个非常好用的工具,大家也可以参照官方文档进行阅读,下面介绍常用的…...
面试攻略,Java 基础面试 100 问(十三)
什么时候用 assert? assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。一般来说,assertion 用于保证程序最基本、关键的正确性。assertion 检查通常在开发和测试时开启。为了提高性能,在软件发布…...
将el-table中的展开列(expand)修改成slots自定义插槽
用过element-ui的有知道,展开这个箭头无法自定义,一点办法都没有,官方根本就没提供预留任何位置给你操作。 从下面图中,可以看到有两个插槽,默认插槽和表头插槽。 我们来扩展一个自定义插槽来实现我们想要的功能。…...
接入网概述
接入网概述 接入网基本概念接入网“最后一公里”解决方案数字用户线xDSL技术的发展与特点xDSL的局限性PON网络架构小结 接入网基本概念 在家里终端设备连接ONT然后进入接入网,这个接入网大概在2-20km左右,中间是通过光纤进行连接,是无源的&a…...
嵌入式要卷成下一个Java了吗?
不会! 说不会也是有自己的原因的 前几天写了一篇 Linux 和单片机的文章 不做Linux就没前途吗? 单片机容易,门槛低,无非不就是单片机技术知识点比较少,特别是面向过程式的编程也更容易掌握。嵌入式 Linux 是多任务式的&…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
