软考高级:耦合分类(内容耦合、公共耦合、外部耦合等)概念和例题

作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。

热门文章推荐

  • (1)《为什么很多人工作 3 年 却只有 1 年经验?》
  • (2)《一文掌握大模型提示词技巧:从战略到战术巧》
  • (3)《AI 时代,程序员的出路在何方?》
  • (4)《如何写出高质量的文章:从战略到战术》
  • (5)《我的技术学习方法论》
  • (6)《我的性能方法论》
  • (7)《AI 时代的学习方式: 和文档对话》

一、AI 讲解

耦合是衡量模块间相互依赖关系紧密程度的一个指标,在软件工程中,通常希望模块之间的耦合度越低越好,以提高代码的可维护性和可重用性。下面我将用表格的形式,对您提到的耦合分类进行讲解,并为每种耦合提供一小段示例代码(使用Java语言或伪代码)以帮助理解。

耦合类型描述示例代码
无直接耦合模块之间没有直接的关系。// 模块A和模块B之间没有直接联系,彼此独立工作。
数据耦合模块之间通过参数传递基本数据类型进行通信。// 模块A调用模块B,通过参数传递数据。
public class A {
public void methodA() {
B.methodB(1);
}
}
public class B {
public static void methodB(int data) {
// 使用数据
}
}
标记耦合(Stamp Coupling)模块之间通过复合数据类型(如结构体、类)进行通信,但不使用全部数据。// 模块A调用模块B,传递对象,但B只用对象的一部分。
public class Data {
int part1;
int part2;
}
public class A {
public void methodA() {
Data data = new Data();
B.methodB(data);
}
}
public class B {
public static void methodB(Data data) {
// 只使用data的part1
}
}
控制耦合一个模块控制另一个模块的逻辑流程,通常通过传递控制参数实现。// 模块A调用模块B,并通过参数控制B的逻辑流程。
public class A {
public void methodA() {
B.methodB(true);
}
}
public class B {
public static void methodB(boolean flag) {
if (flag) {
// 逻辑1
} else {
// 逻辑2
}
}
}
外部耦合模块之间共享一个外部的环境(如全局变量、文件系统)。// 两个模块共享同一个全局变量。
public class Global {
public static int sharedData;
}
public class A {
public void methodA() {
Global.sharedData = 1;
}
}
public class B {
public void methodB() {
int data = Global.sharedData;
}
}
公共耦合两个或多个模块共享同一个全局数据结构。// 模块A和模块B都使用同一个全局数据结构。
public class SharedData {
public static int data;
}
public class A {
public void methodA() {
SharedData.data = 1;
}
}
public class B {
public void methodB() {
int useData = SharedData.data;
}
}
内容耦合一个模块直接使用另一个模块的内部数据或逻辑结构。// 模块A直接访问和修改模块B的内部数据。
public class A {
public void methodA() {
B.internalData = 1; // 直接修改B的内部数据
}
}
public class B {
public static int internalData;
}

二、AI 出题

  1. 下列哪种耦合方式的耦合度最低?
    A. 数据耦合
    B. 控制耦合
    C. 外部耦合
    D. 内容耦合

  2. 如果两个模块通过参数传递基本数据类型进行通信,这种耦合类型是?
    A. 无直接耦合
    B. 数据耦合
    C. 标记耦合
    D. 控制耦合

  3. 当模块之间共享全局变量时,这种耦合被称为?
    A. 外部耦合
    B. 公共耦合
    C. 控制耦合
    D. 内容耦合

  4. 模块A调用模块B,并通过对象传递数据,但模块B只使用了传递对象的一部分数据,这种耦合类型是?
    A. 数据耦合
    B. 标记耦合
    C. 控制耦合
    D. 内容耦合

  5. 下列哪种耦合方式耦合度最高?
    A. 数据耦合
    B. 标记耦合
    C. 外部耦合
    D. 内容耦合

  6. 当一个模块直接访问另一个模块的内部数据时,这种耦合被称为?
    A. 外部耦合
    B. 公共耦合
    C. 控制耦合
    D. 内容耦合

答案及解析:

  1. A. 数据耦合。因为数据耦合只涉及基本数据类型的传递,是耦合度最低的形式


2. B. 数据耦合。这是数据耦合的典型例子,通过基本数据类型进行模块间通信。
3. A. 外部耦合。共享全局变量属于外部耦合的范畴。
4. B. 标记耦合。因为虽然通过对象传递数据,但只使用了对象的一部分。
5. D. 内容耦合。内容耦合是耦合度最高的形式,因为一个模块直接依赖另一个模块的内部结构或数据。
6. D. 内容耦合。直接访问或修改另一个模块的内部数据是内容耦合的特征。

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

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

相关文章

docker部署在线聊天室平台Fiora

Fiora 是一款开源免费的在线聊天系统 https://github.com/yinxin630/fiora 部署 创建docker网络 docker network create fiora-networkdocker-compose部署 vim docker-compose.yml version: 3 services:fiora_redis:image: rediscontainer_name: fiora_redisrestart: alway…

Vue3 子/父组件相互调用

1&#xff1a;子组件调用父组件 父组件&#xff1a; <template><div><button style"margin: 50px">父按钮</button> <!--已clk为名称的事件传递给子组件&#xff0c;传递的是父组件的a函数/事件 --><Child clk"a" />…

huggingface实现Bark模型

目录 引言 使用半精度 使用CPU卸载 使用Better Transformer 使用Flash Attention 2 安装 使用 组合优化技术 使用技巧 BarkConfig 实例化 BarkConfig 参数说明 BarkProcessor 参数 __call__ 方法 from_pretrained 方法 save_pretrained 方法 BarkModel 生成…

电脑解锁后黑屏有鼠标--亲测!!不需要重装系统!!

问题&#xff1a;上周电脑黑屏&#xff0c;只有鼠标&#xff0c;鼠标还不能右键&#xff01;&#xff01; 中招&#xff1a;win10系统最新版火绒安全 &#xff0c;那你有概率获得开机黑屏套餐一份。 原因是&#xff1a;火绒把我们的explorer删除了导致黑屏&#xff0c;这个文…

【OpenGL手册11】材质的模型

目录 一、说明二、材质表面和光照三、设置材质四、光的属性五、不同的光源颜色练习 一、说明 在现实世界里&#xff0c;每个物体会对光产生不同的反应。比如&#xff0c;钢制物体看起来通常会比陶土花瓶更闪闪发光&#xff0c;一个木头箱子也不会与一个钢制箱子反射同样程度的…

1分钟带你学会使用装饰器编写Python函数

1.需求 向 test() 函数中&#xff0c;新增一个功能&#xff0c;多输出一句话"给他补铁" def test():print("水中放吸铁石") # test()# 第一种方式&#xff1a;重写函数 def test():print("水中放吸铁石")print("给他补铁") test()# …

Hibernate是如何处理事务的?请描述一下Hibernate的事务管理。Hibernate中的缓存机制是怎样的?如何配置和使用缓存?

Hibernate是如何处理事务的&#xff1f;请描述一下Hibernate的事务管理。 Hibernate是一个强大的Java ORM框架&#xff0c;它提供了对数据库事务的透明管理。Hibernate的事务管理基于Java的JTA&#xff08;Java Transaction API&#xff09;和JDBC&#xff08;Java Database Co…

什么是移动计算?中国Java之父余胜军被刷爆的CDN又是什么?

移动计算 移动计算通常指的是将计算任务从其原始位置转移到距离数据存储地更近的地点进行处理的概念。这个概念基于一个核心原则&#xff1a;数据传输的成本&#xff08;包括时间、带宽和资源消耗&#xff09;通常高于将计算任务移动到数据所在位置的成本。因此&#xff0c;移…

自增自减运算符 i++,++i,i--,--i小窍门

符号在前就先加/减&#xff0c;符号在后就后加/减 在写代码的过程中&#xff0c;常见的一种情况是需要某个整数类型变量增加 1 或减少 1&#xff0c;Java 提供了一种特殊的运算符&#xff0c;用于这种表达式&#xff0c;叫做自增运算符&#xff08;)和自减运算符&#xff0…

py脚本模拟json数据,StructuredStreaming接收数据存储HDFS一些小细节 ERROR:‘path‘ is not specified

很多初次接触到StructuredStreaming 应该会写一个这样的案例 - py脚本不断产生数据写入linux本地&#xff0c; 通过hdfs dfs 建目录文件来实时存储到HDFS中 1. 指定数据schema&#xff1a; 实时json数据 2. 数据源地址&#xff1a;HDFS 3. 结果落地位置&#xff1a; HDFS …

高级语言讲义2010软专(仅高级语言部分)

1.编写一程序&#xff0c;对输入的正整数&#xff0c;求他的约数和。 如&#xff1a;18的约数和为1236939 #include <stdio.h>int getsum(int n){int i,sum0;for(i1;i<n;i)if(n%i0)sumi;return sum; } int main(){int sum getsum(18);printf("%d",sum); …

NOIP2004 提高组 津津的储蓄计划(选自洛谷P1089)

题目描述 津津的零花钱一直都是自己管理。每个月的月初妈妈给津津 300300 元钱&#xff0c;津津会预算这个月的花销&#xff0c;并且总能做到实际花销和预算的相同。 为了让津津学习如何储蓄&#xff0c;妈妈提出&#xff0c;津津可以随时把整百的钱存在她那里&#xff0c;到…

PCB检测,基于YOLOV8NANO

PCB检测&#xff0c;基于YOLOV8NANO&#xff0c;训练得到PT模型&#xff0c;转换成ONNX&#xff0c;只需要OPENCV&#xff0c;支持C/PYTHON/ANDROID开发PCB检测&#xff0c;基于YOLOV8NANO&#xff0c;只需要OPENCV

每日一题leetcode第2834:找出美丽数组的最小和

目录 一.题目描述 二.思路及优化 三.C代码 一.题目描述 二.思路及优化 首先我们看到这个题&#xff0c;就是根据给出的数组元素个数N&#xff0c;从[1&#xff0c;N]找出N个元素&#xff0c;使得N个元素的和最小&#xff0c;其中随便抽两个数出来&#xff0c;两个数之和不能为…

如何查看resnet网络的中间输出特征和卷积核的参数

查看中间层的特征&#xff0c;需要在定义Model时&#xff0c;在forward时&#xff0c;将中间要显示的层输出。 def forward(self, x):outputs []x self.conv1(x)outputs.append(x)x self.bn1(x)x self.relu(x)x self.maxpool(x)x self.layer1(x)outputs.append(x)# x se…

基于MapReduce的汽车数据清洗与统计案例

数据简介 ecar168.csv&#xff08;汽车销售数据表&#xff09;&#xff1a; 字段数据类型字段说明rankingString排名manufacturerString厂商vehicle_typeString车型monthly_sales_volumeString月销量accumulated_this_yearString本年累计last_monthString上月chain_ratioStri…

BC134 蛇形矩阵

一&#xff1a;题目 二&#xff1a;思路分析 2.1 蛇形矩阵含义 首先&#xff0c;这道题我们要根据这个示例&#xff0c;找到蛇形矩阵是怎么移动的 这是&#xff0c;我们可以标记一下每次移动到方向 我们根据上图可以看出&#xff0c;蛇形矩阵一共有两种方向&#xff0c;橙色…

【Pytorch】新手入门:基于sklearn实现鸢尾花数据集的加载

【Pytorch】新手入门&#xff1a;基于sklearn实现鸢尾花数据集的加载 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希望…

数据挖掘助力零售业务增长:从数据分析到策略制定的全过程

在数字化时代,数据挖掘已经成为企业获取竞争优势的关键手段之一。通过深入挖掘和分析海量数据,企业能够洞察消费者行为、市场趋势和潜在商机,从而制定更为精准和有效的业务策略。本文将通过一个具体的零售业务案例,分析数据挖掘的应用过程,展示如何从数据中发现价值,并将…

Hadoop运行搭建——系统配置和Hadoop的安装

Hadoop运行搭建 前言&#xff1a; 本文原文发在我自己的博客小站&#xff0c;直接复制文本过来&#xff0c;所以图片不显示(我还是太懒啦&#xff01;)想看带图版的请移步我的博客小站~ Linux镜像&#xff1a;CentOS7 系统安装&#xff1a;CentOS安装参考教程 系统网卡设置…