软考系统分析师·每日学习卡 | [日期:2025-06-27] | [今日主题:系统设计-结构化设计]

一、今日学了啥?

  • 系统设计目的:制定技术实施蓝图,权衡利弊后输出详细设计方案
  • 模块设计核心:高内聚(单一职责)+低耦合(依赖最小化)
  • 设计流程:概要设计(架构划分)→ 详细设计(算法/数据结构)
  • 核心原则:自顶向下分解、信息隐蔽、模块独立性

二、重点/要记住的!

  • 🔺 高内聚等级:功能内聚(单一完整功能)> 顺序内聚(数据流衔接)> 通信内聚(共享数据)

  • 🔺 低耦合类型:数据耦合(参数传递简单数据)→ 标记耦合(传递数据结构)→ 控制耦合(传递控制信号)

  • 🔺 模块设计准则:

    • 扇入大(复用度高)✅ / 扇出小(独立性强)✅
    • 深度≤7层(递归除外) / 宽度适中
    • 单入口单出口(避免GOTO跳转)
  • 🔺 等级排序:内聚按强度降序排列(功能→时间内聚),耦合按强度升序排列(数据→内容耦合)

    分类 等级 🔺 关键特征 ✅ 典型示例 ❌ 易混淆点
    内聚(高→低) 1. 功能内聚 完成单一完整功能,各部分缺一不可 计算器的加法函数 add(a,b) 与顺序内聚混淆(功能内聚强调单一性)
    2. 顺序内聚 数据流衔接,前段输出为后段输入 文件读取→解析→存储流程 与通信内聚混淆(顺序内聚强调流程)
    3. 通信内聚 操作同一数据源(如结构体) 用户信息模块处理增删改 与公共耦合混淆(通信内聚在模块内部)
    4. 过程内聚 按特定步骤执行(流程固定) 支付流程:验证→扣款→记录 与时间内聚混淆(过程内聚强调顺序)
    5. 时间内聚 同一时间触发(如初始化模块) 系统启动时加载配置+连接数据库 与过程内聚混淆(时间内聚强调时序)
    耦合(低→高) 类型 描述 示例 常见混淆
    1. 非直接耦合 无直接依赖,通过主控模块协调 A/B模块由主模块调用,互不干扰 与数据耦合混淆(非直接耦合无参数传递)
    2. 数据耦合 传递简单参数(原子数据) calculateTax(price) 传数值 与标记耦合混淆(数据耦合仅传基础类型)
    3. 标记耦合 传递数据结构(如对象/数组) updateUser({id, name}) 传对象 与控制耦合混淆(标记耦合不包含逻辑控制)
    4. 控制耦合 传递控制信号(如标志位决定分支) render(type='table') 控制渲染方式 与数据耦合混淆(控制耦合影响逻辑流)
    5. 公共耦合 共享全局数据(如静态变量) 多模块修改同一购物车对象 与内容耦合混淆(公共耦合依赖全局变量)
    6. 内容耦合 直接访问模块内部(如指针操作) 直接修改另一模块的私有变量 与控制耦合混淆(内容耦合破坏封装性)

    💡 记忆口诀
    内聚:功顺通,过时久(功能→顺序→通信→过程→时间)
    耦合:非数标,控公内(非直接→数据→标记→控制→公共→内容)

  • ❌ 内聚≠复杂度:高扇入模块可能功能简单但复用度高(如基础工具类)

  • ❌ 耦合强度对比:

    • 标记耦合(数据结构传递) < 控制耦合(逻辑控制)
    • 公共耦合(共享全局数据) < 内容耦合(直接访问内部)
  • ❌ 设计误区:

    • "模块大小适中"无硬性指标(按功能原子性划分)
    • 深度过浅≠设计优(递归场景例外)

三、今天的小收获/卡住的地方

  • 卡住:扇入/扇出的概念理解
    • 扇入大 = 被复用多(好!)
    • 扇出小 = 依赖关系少(好!)
    • 示例;像"快递分拣员"
      • 状态: 扇入(有多少人找你帮忙) + 扇出(你找多少人帮忙)
      • 理想状态: 高扇入(越高越好,说明你能力强) + 低扇出(越少越好,说明你独立性强)

四、明天学啥?

明天学习面向对象设计


像实干家一样思考问题,像思想家一样付诸行动。

愿你我共同进步!

posted @ 2025-06-27 23:21  梦想截留时光  阅读(54)  评论(0)    收藏  举报