软考系统分析师·每日学习卡 | [日期: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. 内容耦合 直接访问模块内部(如指针操作) 直接修改另一模块的私有变量 与控制耦合混淆(内容耦合破坏封装性) 💡 记忆口诀:
内聚:功顺通,过时久(功能→顺序→通信→过程→时间)
耦合:非数标,控公内(非直接→数据→标记→控制→公共→内容) -
❌ 内聚≠复杂度:高扇入模块可能功能简单但复用度高(如基础工具类)
-
❌ 耦合强度对比:
- 标记耦合(数据结构传递) < 控制耦合(逻辑控制)
- 公共耦合(共享全局数据) < 内容耦合(直接访问内部)
-
❌ 设计误区:
- "模块大小适中"无硬性指标(按功能原子性划分)
- 深度过浅≠设计优(递归场景例外)
三、今天的小收获/卡住的地方
- 卡住:扇入/扇出的概念理解
- 扇入大 = 被复用多(好!)
- 扇出小 = 依赖关系少(好!)
- 示例;像"快递分拣员"
- 状态: 扇入(有多少人找你帮忙) + 扇出(你找多少人帮忙)
- 理想状态: 高扇入(越高越好,说明你能力强) + 低扇出(越少越好,说明你独立性强)
四、明天学啥?
明天学习面向对象设计
像实干家一样思考问题,像思想家一样付诸行动。
愿你我共同进步!

浙公网安备 33010602011771号