耦合与内聚

2023-12-13 22:07:45

目录

?编辑

前言

耦合(Coupling):

低耦合的示例:

内聚(Cohesion):

高内聚的示例:

总结:

我的其他博客


前言

"耦合"和"内聚"是软件工程中两个关键的概念,它们描述了软件系统中组件之间关系的不同方面。

耦合(Coupling):

耦合指的是两个模块(或组件、类等)之间的依赖关系。在软件系统中,模块之间需要相互协作,但过度的依赖会导致系统变得难以维护、扩展和理解。耦合可以分为以下几种类型:

  1. 无耦合(无关联): 模块之间没有直接或间接的依赖关系,彼此独立。

  2. 最小耦合(弱关联): 模块之间有一些依赖,但是这些依赖比较简单,模块之间的影响相对较小。

  3. 数据耦合: 模块之间通过共享数据进行通信,一模块的数据直接影响另一模块。

  4. 控制耦合: 一个模块对另一个模块的控制,包括对另一个模块内部的逻辑、流程的控制。

  5. 标记耦合: 一个模块依赖于另一个模块的内部标记或命名规范。

  6. 数据结构耦合: 两个模块共享相同的数据结构,一个模块对数据结构的改变会影响另一个模块。

高度耦合的系统通常更难以维护、修改和测试,因此在设计软件时,通常倾向于降低模块之间的耦合。

低耦合的示例:

// 低耦合示例

// 模块A
public class ModuleA {
? ? public void doSomething() {
? ? ? ? System.out.println("Module A is doing something.");
? ? }
}

// 模块B
public class ModuleB {
? ? public void doAnotherThing() {
? ? ? ? System.out.println("Module B is doing another thing.");
? ? }
}

// 使用模块A和B的客户端
public class Client {
? ? public static void main(String[] args) {
? ? ? ? ModuleA moduleA = new ModuleA();
? ? ? ? ModuleB moduleB = new ModuleB();

? ? ? ? moduleA.doSomething();
? ? ? ? moduleB.doAnotherThing();
? ? }
}
?

内聚(Cohesion):

内聚度描述的是一个模块内部各个元素之间相互关联的紧密程度。一个高内聚的模块意味着模块内的各个元素紧密地协同工作,完成相同的目标。内聚可以分为以下几种类型:

  1. 功能内聚: 模块内的元素协同完成一个特定的功能。

  2. 序列内聚: 模块内的元素按照一定的顺序执行,一个元素的输出是下一个元素的输入。

  3. 通信内聚: 模块内的元素通过传递消息或参数进行通信。

  4. 过程内聚: 模块内的元素一起执行一个特定的过程。

  5. 时间内聚: 模块内的元素在同一时间段内执行,但不一定按照顺序。

  6. 逻辑内聚: 模块内的元素在逻辑上相关联,但没有物理上的联系。

高内聚的模块通常更容易理解、测试和维护,因为模块内的元素在逻辑上相关联,完成相似的任务。

高内聚的示例:

// 高内聚示例

// 模块C
public class ModuleC {
? ? public void doTask1() {
? ? ? ? System.out.println("Module C is performing task 1.");
? ? }

? ? public void doTask2() {
? ? ? ? System.out.println("Module C is performing task 2.");
? ? }
}

// 使用模块C的客户端
public class Client {
? ? public static void main(String[] args) {
? ? ? ? ModuleC moduleC = new ModuleC();

? ? ? ? moduleC.doTask1();
? ? ? ? moduleC.doTask2();
? ? }
}
?

总结:

在软件设计中,理想的情况是追求低耦合和高内聚。低耦合可以减少模块之间的依赖,提高系统的灵活性和可维护性。高内聚则确保了模块内的元素协同工作,使得模块更容易理解和维护。通过平衡耦合和内聚,可以创建更健壮、可维护且易于理解的软件系统。

我的其他博客

Git命令大全:从基础到高级应用-CSDN博客

简单介绍一些其他的树-CSDN博客

什么是tomcat?tomcat是干什么用的?-CSDN博客

TCP/IP 四层体系结构-CSDN博客

Redis新数据类型-Bitmaps-CSDN博客

腾讯-轻量应用服务器centos7中宝塔安装MySQL8.0出现内存不足-CSDN博客Synchronized 优化-CSDN博客腾讯-轻量应用服务器centos7中宝塔安装MySQL8.0出现内存不足-CSDN博客

【计算机网络】URL概念及组成-CSDN博客

【计算机网络】TCP socket编程-CSDN博客

枚举类的final修饰-CSDN博客

什么是RabbitMQ-CSDN博客

文章来源:https://blog.csdn.net/AliceNo/article/details/134981104
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。