• 内聚与耦合


    一.内聚

    1. 偶然内聚(Coincidental Cohesion)

    • 例子1:一个模块包含了处理用户输入、计算工资和生成报表的功能。这些功能之间没有直接的相关性,仅因为它们被随意地放在同一个模块中。
    • 例子2:一个工具类包括一个日期转换方法、一个发送电子邮件的功能和一个计算数组平均值的方法。这些操作聚集在一起没有任何逻辑上的联系。

    2. 逻辑内聚(Logical Cohesion)

    • 例子1:一个模块用于处理不同类型的报告生成,例如财务报告、员工绩效报告和销售报告,根据传入的参数来决定生成哪种报告。
    • 例子2:一个图形界面的组件,根据用户的选择,可以绘制圆形、正方形或三角形。

    3. 时间内聚(Temporal Cohesion)

    • 例子1:启动应用程序时,一个模块负责初始化日志系统、读取配置文件和建立数据库连接。
    • 例子2:在程序关闭时执行的清理操作,比如关闭文件流、释放资源和记录关闭日志。

    4. 过程内聚(Procedural Cohesion)

    • 例子1:一个模块按顺序执行注册新用户的步骤:验证用户信息、保存用户信息到数据库和发送欢迎电子邮件。
    • 例子2:处理订单的模块,其中包括验证订单信息、计算费用、更新库存和生成发货单的步骤。

    5. 通讯内聚(Communication Cohesion)

    • 例子1:一个模块负责处理所有与客户信息相关的操作,如查询客户信息、更新客户地址和记录客户交易。
    • 例子2:一个报表模块,它可以生成、打印和发送有关销售数据的报表。

    6. 顺序内聚(Sequential Cohesion)

    • 例子1:一个图像处理模块,首先读取图像文件,然后压缩图像,最后保存处理后的图像到磁盘。
    • 例子2:处理文本文件的模块,先打开文件,然后读取文件内容,对内容进行处理(如文本替换),最后将更新的内容写回文件。

    7. 功能内聚(Functional Cohesion)

    • 例子1:一个计算模块,专门负责执行数学计算,如加法、减法、乘法和除法。
    • 例子2:一个身份验证模块,仅包含与用户身份验证相关的功能,如登录验证、密码重置和权限检查。

    二.耦合

    1. 内容耦合(Content Coupling)

    最紧密的耦合形式,其中一个模块直接访问或修改另一个模块的内部数据。

    • 例子1:模块A直接修改模块B的内部变量值或数据结构。
    • 例子2:模块A中的函数直接跳转到模块B中的某个特定位置执行(例如,通过使用模块B内部的跳转语句或标签)。

    2. 公共耦合(Common Coupling)

    两个或多个模块共享同一个全局数据区。

    • 例子1:模块A和模块B都读写同一个全局变量,如用户的登录状态。
    • 例子2:多个模块共享同一个配置文件的访问权限,其中每个模块都可以修改配置文件,影响其他模块的行为。

    3. 外部耦合(External Coupling)

    模块之间共享一个外部传递的数据结构或资源。

    • 例子1:两个模块使用同一个数据库表的结构来进行操作,其中表的结构由数据库定义。
    • 例子2:两个服务共享同一个消息队列或日志文件进行通信和记录,这个队列或文件由操作系统或中间件管理。

    4. 控制耦合(Control Coupling)

    一个模块控制另一个模块的逻辑流程,通常通过传递控制参数。

    • 例子1:模块A调用模块B的函数,并传递一个标志参数来决定模块B中哪部分代码将被执行。
    • 例子2:一个函数根据传入的枚举值来决定调用另一个模块中的哪个函数。

    5. 印记耦合(Stamp Coupling)

    模块之间通过结构化数据(如,记录或对象)进行通信,但不使用全部数据。

    • 例子1:模块A调用模块B的函数,并传递一个对象,但模块B仅使用该对象中的部分字段或属性。
    • 例子2:两个模块通过传递数据记录来交换信息,尽管每个模块只关心记录中的特定部分。

    6. 数据耦合(Data Coupling)

    最松散的耦合形式,模块间通过参数进行通信,仅仅交换基本数据类型。

    • 例子1:模块A调用模块B的函数,仅传递简单的整型或字符串参数。
    • 例子2:两个模块通过API接口交互,接口参数仅包括基本数据类型,没有复杂的对象或结构体。
  • 相关阅读:
    备战蓝桥杯---动态规划的一些思想2
    Part 10:iOS的数据持久化(1),文件,归档
    【Python笔记-设计模式】命令模式
    OID的编解码
    计算机组原,系统总线,总线概念,结构,分类,特性指标,举例
    C#常量.
    将 SAP 表格数据转换为 Excel 文件
    第一章 使用管理门户(一)
    安全事件管理处置——操作实例
    【Vim】VSCode下 Vim 插件配置自动切换中英文输入法
  • 原文地址:https://blog.csdn.net/qq_51976556/article/details/136765795