问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

软件工程中的7种耦合和内聚(详解)

创作时间:
作者:
@小白创作中心

软件工程中的7种耦合和内聚(详解)

引用
CSDN
1.
https://blog.csdn.net/m0_62056231/article/details/137977538

耦合(Coupling)和内聚(Cohesion)是软件工程中衡量模块设计质量的两个核心概念。耦合描述了模块间的依赖关系强度,而内聚则关注模块内部各部分的关联程度。理想的软件设计追求"低耦合高内聚",以实现更好的模块独立性、可维护性和可复用性。本文将详细介绍7种耦合类型和7种内聚类型,帮助读者深入理解这些概念在软件开发中的应用。

什么是耦合和内聚?

  • 内聚(Cohesion):内聚指的是模块内部各元素之间的联系紧密程度。一个模块的内聚度越高,说明其内部功能越集中,模块的独立性和可维护性越好。低内聚意味着模块的功能可以被进一步拆分,每个子功能可以独立成模块。

  • 耦合(Coupling):耦合描述了模块间的依赖关系。高耦合意味着模块间的依赖关系紧密,一个模块的变更可能会影响其他多个模块。低耦合则意味着模块间的依赖关系较弱,模块更易于独立开发和维护。

软件开发应向“低耦合高内聚”靠拢,理想的软件设计应该追求低耦合和高内聚。低耦合可以使模块更独立、更易于修改和维护;高内聚则确保模块内部逻辑清晰、专注,更易于理解和复用。

7种耦合类型

  1. 内容耦合(Content Coupling)
  • 定义:一个模块直接使用另一个模块的内部数据或控制流程。
  • 例子:一个类直接调用访问另一个类的属性信息。
  1. 公共耦合(Common Coupling)
  • 定义:当两个或更多模块共享同一个全局数据结构或全局变量时。
  • 特点:这种耦合方式比较紧密,因为模块间的共享数据使得它们的依赖关系更加显著。与数据耦合不同,公共耦合涉及的全局数据结构可能会被多个模块同时读写,增加了模块间的耦合度。
  1. 外部耦合(External Coupling)
  • 定义:当多个模块共享一个外部传来的数据结构或全局变量时。
  • 例子:I/O 将模块耦合到特定的设备、格式、通信协议上。
  1. 控制耦合(Control Coupling)
  • 定义:当一个模块控制着另一个模块的逻辑流程(比如通过传递控制参数)时。
  • 特点:存在流程控制,说明控制参数会决定接下来的流程。典型的例子就是计算电费,有个参数,是计算平均的还是最高的,平局和最高是两个独立的计算模块,因此,这两个计算模块分别和计算电费模块耦合。
  1. 标记耦合(Stamp Coupling)
  • 又叫特征耦合,当把整个数据结构作为参数传递,而被调用的模块只需要使用其中一部分数据元素时,就出现了特征耦合。
  • 代码示例:
    public class Main {
        private static void 特征耦合(Dog d) {//这里的参数即被“特征耦合”模块引用的Dog模块(类)的数据结构。
            System.out.println(d.getName());
        }
        private static void 非特征耦合(String name) {
            System.out.println(name);
        }
        public static void main(String[] args) {
            Dog d = new Dog("旺财");//这里可以看作main模块和Dog模块的数据耦合
            特征耦合(d);
            非特征耦合(d.getName());
        }
    }
    
  1. 数据耦合(Data Coupling)
  • 定义:当模块间的交互仅仅通过参数来传递基本数据类型时。
  • 特点:这是最佳的耦合方式。如上面的赋值操作,或者如下的电费计算。
  1. 无耦合(No Coupling)
  • 定义:模块之间没有任何直接的关系。
  • 特点:这是最理想的状态,但在实际应用中很难完全实现。(也经常说6种耦合7种内聚,所以也可以说这不算是一种耦合)

7种内聚类型

  1. 偶然内聚(Coincidental Cohesion)
  • 定义:模块内部各个部分之间没有明显的关联,仅仅是偶然放在一起。
  • 特点:通常会导致代码难以维护和理解。这里提一嘴,我认为代码生成器就是一种偶然内聚,只是因为其他模块都有执行若干不相干的语句,我们将之提取,并作为独立模块。
  1. 逻辑内聚(Logical Cohesion)
  • 定义:当一个模块中的元素被组织在一起,因为它们在逻辑上分类相似,通常通过一个控制语句(如 if-else 或 switch)来选择执行。
  • 特点:一些不相干的功能被组织在同一个模块中,通过外部参数来控制实现哪个功能。简单记为,通过逻辑语句联系在一起的内聚。
  1. 时间内聚(Temporal Cohesion)
  • 定义:模块中的元素相关联,因为它们需要在同一时间段内被执行。
  • 特点:顾名思义,就是单纯在时段上重合,也称为瞬时内聚,关键词就是同时执行。
  1. 过程内聚(Procedural Cohesion)
  • 定义:当模块中的元素协同工作执行一个任务序列,彼此之间按照特定顺序执行。
  • 特点:例如:先写姓名 → 电话 → 家庭住址,先后顺序符合客户需求。关键词就是特定顺序执行。
  1. 通信内聚(Communication Cohesion)
  • 定义:模块中的所有功能都操作相同的数据结构。
  • 特点:即指模块内各个组成部分都使用相同的数据结构或产生相同的数据结构。例如:一个模块根据员工生日计算员工年龄和退休时间。
  1. 顺序内聚(Sequential Cohesion)
  • 定义:当一个模块内的操作必须按特定顺序执行,输出数据成为下一步操作的输入数据时。
  • 特点:前一功能元素的输出就是下一功能元素的输入。例如:先计算员工的年龄再计算退休时间。例如某要完成获取订单信息的功能,前一个功能获取用户信息,后一个执行计算均价操作,显然该模块内两部分紧密关联。过程内聚与顺序内聚的区别是:顺序内聚中是数据流从一个处理单元流到另一个处理单元,而过程内聚是控制流从一个动作流向另一个动作。
  1. 功能内聚(Functional Cohesion)
  • 定义:当一个模块内的所有功能都是围绕一个单一的功能组织的,这是最高级别的内聚。
  • 特点:ALL for ONE,所有处理元素只为完成某一个功能,缺一不可。

模块独立性排序

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号