当前位置: 首页 > news >正文

软件模块设计质量之内聚

文章目录

  • 前言
  • 一、内聚是什么?
  • 二、内聚的7种类型(从低到高)
    • 1.偶然内聚(Coincidental Cohesion)
    • 2.逻辑内聚(Logical Cohesion)
    • 3.时间内聚(Temporal Cohesion)
    • 4.过程内聚(Procedural Cohesion)
    • 5.通信内聚(Communicational Cohesion)
    • 6.顺序内聚(Sequential Cohesion
    • 7.功能内聚(Functional Cohesion)
  • 总结


前言

在模块化软件设计中,衡量一个模块设计质量的重要指标之一便是内聚性(Cohesion)。高内聚的模块往往具有明确的职责边界、紧密的内部逻辑以及良好的可维护性和可重用性。随着软件规模和复杂度的增长,合理划分模块、提升内聚性已成为提高软件质量、降低维护成本的关键手段。

内聚可分为多个层次,从最差的偶然内聚到最理想的功能内聚,每种类型都体现了模块内部组成元素之间的结合程度及其合理性。深入理解各种内聚类型的特点、适用场景以及它们在实际开发中的表现,有助于我们在架构设计和代码重构过程中作出更加科学的判断与优化。


一、内聚是什么?

“内聚”是衡量软件设计中模块内部各个元素彼此关联程度的重要指标,内聚度越高,模块内部功能越专一、职责越明确,模块的可维护性、可重用性就越好。

二、内聚的7种类型(从低到高)

1.偶然内聚(Coincidental Cohesion)

  • 描述: 模块内部多个任务之间没有逻辑关联,只是偶然放在一起。
  • 内聚程度:最低 ❌
  • 例子:一个模块中有打印日志、计算总和、发送邮件等毫无关联的功能。

2.逻辑内聚(Logical Cohesion)

  • 描述:模块执行一类相似的功能,通过参数决定具体执行哪一个。
  • 内聚程度:最低 ❌
  • 例子:如一个模块根据传入标志执行不同操作(打印/排序/写文件等)。

3.时间内聚(Temporal Cohesion)

  • 描述:模块中操作需要在相同时间段执行(如启动或关闭时)。
  • 内聚程度:最低 ❌
  • 例子:初始化模块:打开文件、读配置、启动服务等放在一起。

4.过程内聚(Procedural Cohesion)

  • 描述:模块中任务按照特定顺序执行,彼此有关联但功能不一致。
  • 内聚程度:最低 ❌
  • 例子:先验证用户,再写日志,再跳转页面。

5.通信内聚(Communicational Cohesion)

  • 描述:模块内操作使用相同的数据结构。
  • 内聚程度:中等 ✅
  • 例子:对同一数据表进行查询、统计、修改。

6.顺序内聚(Sequential Cohesion

  • 描述:模块的一个输出作为另一个操作的输入。
  • 内聚程度:较高 ✅
  • 例子:读取数据 → 处理数据 → 输出结果。

7.功能内聚(Functional Cohesion)

  • 描述:模块完成单一、明确的功能,内部操作紧密协作完成这个功能。
  • 内聚程度:最高 ✅✅
  • 例子:纯粹实现一个功能,如只做“计算税额”。

总结

内聚性是评价模块设计优劣的重要维度之一。通过对偶然内聚、逻辑内聚、时间内聚、功能内聚等常见类型的对比分析,我们可以看出:

  • 偶然内聚和逻辑内聚结构松散,应尽量避免;

  • 时间内聚和过程内聚虽然有一定逻辑,但职责仍不够单一;

  • 通信内聚和顺序内聚已具备一定结构性,是可接受的设计;

  • 功能内聚作为最高级别,强调模块应只做一件事,追求最小职责单元,是高质量模块设计的目标。

在实际开发中,我们应尽量设计高内聚、低耦合的模块体系,以提升系统的可维护性、可测试性和可扩展性。

http://www.xdnf.cn/news/69067.html

相关文章:

  • 大模型AI的运行逻辑与准确性保障机制——以DeepSeek与豆包为例
  • 当socket的状态为SOCK_SYNSENT时,不可能同时存在Sn_IR_TIMEOUT中断标志被置位的情况
  • 基于SpringBoot的高校体育馆场地预约管理系统-项目分享
  • jinjia2将后端传至前端的字典变量转换为JS变量
  • 使用 Flutter 遇坑小计
  • 经典文献阅读之--SSR:(端到端的自动驾驶真的需要感知任务吗?)
  • 纷析云开源财务软件:助力企业实现数字化自主权
  • 跳跃游戏(每日一题-中等)
  • 【leetcode题解】算法练习
  • 零基础上手Python数据分析 (20):Seaborn 统计数据可视化 - 轻松绘制精美统计图表!
  • 使用Python可视化莫比乌斯带
  • 数据库—MySQL事务
  • 基于Python Socket的多线程聊天程序案例分析
  • 一页概览:虚拟机的备份
  • 一周学会Pandas2 Python数据处理与分析-Pandas2索引标签操作
  • 多模态大语言模型arxiv论文略读(三十三)
  • 实时进程简单说明
  • Vue-组件的懒加载,按需加载
  • Vue的模板语法——指令语法
  • OpenCV第5课 图像的基本操作
  • 模拟车辆变道 python 可视化
  • Redis——持久化
  • odoo-047 ValueError: 字段 `attachment_location` 不存在
  • 解锁编程新技能:深入理解泛型类型和函数
  • 【图像标注技巧】目标检测图像标注技巧
  • MySQL5.7 生成日期工具表
  • day2 python训练营
  • 智能照明系统:照亮智慧生活的多重价值
  • 华为盒式交换机堆叠配置
  • llama-webui docker实现界面部署