Day04-系统设计-结构化分析与设计
0、开篇一个被忽视的思维模式如果你问一个 2026 年的程序员你怎么做软件设计十有八九的答案是我用AI呀。AI确实赋能了这个时代。但你是否想过在AI出现之前人们怎么写软件本篇主要介系统设计方法之一的结构化分析与设计。它还有一个更精准的名字面向数据流的软件开发方法。不要因为它古老就轻视它。因为考试考。结构化方法中的很多思想——自顶向下分解、模块化、高内聚低耦合——至今仍是软件设计的基本思想。理解了 结构化分析SA、结构化设计SD有助于理解结构化分析与设计的另一种方法----面向对象设计。这个世界本质上的东西一直没变变得是表现形式。1、结构化方法三个步骤 — 分析 → 设计 → 编程结构化方法覆盖了软件生命周期的三个阶段三个阶段形成了一个完整的流水线SA 的输出数据流图 数据字典就是 SD 的输入SD 的输出模块结构图就是 SP 的输入。而这整条流水线贯穿一个核心思想自顶向下逐层分解— 把一个大问题分解成若干个小问题每个小问题再分解成若干个更小的问题直到每个问题都足够简单、可以直接实现。这句话听起来简单但它定义了结构化方法的一切。接下来我们先看一下结构化分析SA。2、SA 分析模型SA 是一个分析模型。这个模型有一个核心围绕这个核心有三层三个模型分别解决了三个问题模型工具解决的问题数据模型E-R 图系统里有哪些东西它们之间什么关系功能模型DFD数据流图数据从哪来、经过什么处理、到哪去行为模型STD状态转换图系统在什么情况下会改变状态数据字典是核心因为它记录了所有数据项、数据结构、数据流、数据存储和处理过程的精确定义。接下来先从最重要的功能模型——DFD 开始。3、DFD 数据流图 — 让数据流动看得见DFD 是结构化分析中最重要的工具。它的核心目标就一句话表达系统内数据的流动并通过数据流描述系统功能。3.1 四种基本符号DFD 只有四种图形元素极其精简符号名称表示内容图形表示数据流具有名字和流向的数据标有名字的箭头 →加工数据处理对数据流的变换圆圈数据存储可访问的存储信息直线段外部实体数据源/终点位于系统之外的信息生产者或消费者标有名字的方框图形表示如下一个快速记忆法数据从外部实体流入经过加工变换可能存取数据存储最终流向另一个外部实体。3.2 扩充符号数据流之间的逻辑关系当多条数据流汇聚到一个加工时它们之间的关系需要精确表达。于是扩充了三个符号符号含义解释*与输入所有数据流都到达才能加工输出同时产生所有数据流或输入任一到达即可加工输出至少产生其中一个⊕异或输入只有一个到达时才能加工输出仅产生其中一个⚠️ 考试曾考过这几符号的含义* 与、 或、⊕ 异或需要区分清楚。3.3 DFD 的层次从一张大饼到层层细化一个真实系统的数据流图如果全画在一张纸上结果就是一团乱麻。一张图也很难表达所有业务的细节。所以 DFD 采用自顶向下的分层策略第一步画顶层图0 层 DFD把整个系统当作一个加工画出所有外部实体和进出系统的数据流。第二步逐层分解把顶层图中的那个大加工不断拆开直到每个加工的粒度足够清晰。3.4 数据流图的平衡原则父子一致在分层分解中有一个铁律叫父子平衡上层图与下层图的数据流个数一致、方向一致。举个例子父图中有一个输入流A → 加工P → 输出流B当你把加工P分解成子图P1、P2、P3子图整体仍然应该接收 A 作为输入、产出 B 作为输出不能凭空多出或少掉数据流。同时也有一条基本约束每个加工至少有一个输入数据流和一个输出数据流。3.5 DFD 中常见的三种错误如果违反了上述约束就会出现以下三种经典错误错误类型现象通俗理解奇迹加工只有输出没有输入无中生有——数据从哪冒出来的黑洞加工只有输入没有输出数据进去就消失了——被吞噬了灰洞加工输入不足以产生输出输入给的是苹果输出却产出了橘子——信息量不够考试中经常给一张 DFD 让你找茬记住这三个词就能快速定位。DFD 定义了数据怎么流。但问题是每一条数据流到底长什么样每个数据存储里装的是什么东西每个加工到底做了什么这些问题的答案都藏在 SA 模型的核心——数据字典里。4、数据字典DD— DFD 的百科全书4.1 数据字典是什么数据字典是一种用户可以访问的、记录数据库和应用程序元数据的目录。它在结构化分析中的角色很明确为 DFD 中的每一个元素做出详细说明。包括数据项 → 数据结构 → 数据流 → 数据存储 → 处理过程最重要的作用作为分析阶段的工具。DFD 画出了骨架数据字典填上了血肉。4.2 示例图书借阅系统以下是一个完整的图书借阅系统数据字典覆盖了全部五个维度① 数据项 — 最小的不可分割单元数据项名含义数据类型长度取值范围book_id图书编号字符串10B 8位数字如 B00000001book_name书名字符串50任意reader_id读者证号字符串8R 6位数字如 R000001reader_name读者姓名字符串20任意borrow_date借书日期日期—YYYY-MM-DDreturn_date应还日期日期—YYYY-MM-DD② 数据结构 — 数据项的组合数据结构名含义组成book_info图书信息book_idbook_namereader_info读者信息reader_idreader_nameborrow_record借阅记录reader_idbook_idborrow_datereturn_date③ 数据流 — 数据在系统内外的流动数据流名说明来源去向组成流量借书请求读者提交借书申请读者借书处理reader_idbook_id100次/天还书请求读者提交还书申请读者还书处理reader_idbook_id80次/天④ 数据存储 — 持久化的数据结构数据存储名说明编号组成存取方式图书表存储图书信息D1book_info按编号查询读者表存储读者信息D2reader_info按证号查询借阅记录表存储借阅历史D3borrow_record按读者/图书查询⑤ 处理过程 — 加工的详细逻辑处理过程名说明输入输出处理说明借书处理处理借书请求借书请求借书成功/失败①检查图书是否存在 ②检查读者是否可借 ③检查库存是否充足 ④生成借阅记录还书处理处理还书请求还书请求还书成功/失败①查找借阅记录 ②计算是否逾期 ③更新库存 ④记录还书时间核心关系数据项 → 组成数据结构 → 数据结构 → 构成数据流/数据存储 → 加工处理数据流读写数据存储。到这里功能模型DFD DD已经讲清楚了。接下来看行为模型。5、状态转换图STD— 系统在事件驱动下的变化DFD 告诉你数据怎么流但还有一个问题它回答不了当某个事件发生时系统如何改变状态这就是状态转换图STD的使命。5.1 四种基本元素元素图形含义初始状态实心黑点 ●系统的起点最终状态黑点 圆圈 ⊙系统的终点中间状态圆角矩形系统在某个时刻所处的状态状态转换带箭头的线 →事件触发状态之间的转移5.2 三个核心特征系统有明确的几种状态状态之间通过事件触发转换同一事件在不同状态下可能产生不同结果最后一条尤其关键。举个例子同样是点击按钮这个事件在未登录状态下是跳转到登录页在已登录状态下是执行对应功能。同一个事件不同状态不同结果。6、E-R 图SA 分析模型中的第三个视角是数据模型对应的工具是E-R 图实体-联系图。E-R 图提供了表示实体类型、属性和联系的方法用来描述现实世界的概念模型。E-R 图在数据库设计部分会重点展开这里先做个概念铺垫。它解决的问题是系统中有哪些核心对象它们之间是什么关系1对11对多多对多到这里结构化分析SA的三个模型讲完了。总结一下分析完成了接下来进入下一个阶段结构化设计SD。7、结构化设计SD— 从画图到写代码SD 是一种面向数据流的方法以 SA 阶段产出的 DFD 和数据字典为基础是一个自顶向下、逐步求精和模块化的过程。SA 说的是What要做什么SD 说的是How怎么做。SD 的核心产物是模块结构图。7.1 模块划分的五大原则SD 的基本思想是将软件设计成由相对独立且具有单一功能的模块组成的结构。怎么划分模块有五条铁律原则核心要点具体要求目标模块规模适中避免过大或过小过大 → 功能不单一过小 → 调用频繁、独立性降低代码量50-200 行易于实现和维护扇入扇出合理控制调用层次扇出调用下级个数不宜过多需增中间控制模块扇入被上级调用次数越大复用度越高推荐平均 3~4不超过 7避免出错提升复用深度宽度适当控制层次结构深度嵌套层数过深考虑合并宽度同层最大模块数过大则系统复杂简化系统结构信息隐藏封装实现细节模块设计成黑盒仅通过接口交互隐藏内部实现模块独立易理解易维护抽象原则忽略细节抽取本质分层次抽象过程抽象、数据抽象、控制抽象降低开发复杂度7.2 耦合 — 模块之间的粘合度耦合是指模块之间相互依赖的程度。一句话原则耦合度越低越好。也就是我们常说的低耦合。低耦合意味着模块独立性强修改一个模块不会影响另一个。7 种耦合类型从低到高排列耦合度耦合类型一句话理解最低非直接耦合两个模块根本不直接打交道全靠主模块调度低数据耦合只传递简单数据值如整数、字符串较低标记耦合传递的是数据结构如一个对象/结构体中等控制耦合传递的参数中包含控制信息如一个 flag 决定对方执行哪个分支较高外部耦合多个模块访问同一个全局简单变量高公共耦合多个模块共享同一个公共数据环境全局数据结构、共享内存区等最高内容耦合一个模块直接访问另一个模块的内部数据或代码——最恶劣的耦合关键区分数据耦合 vs 标记耦合 —— 前者传简单值后者传数据结构记录/对象。这是考试高频考点。关键区分外部耦合 vs 公共耦合 —— 前者是全局简单变量后者是全局数据结构/公共环境。7.3 内聚 — 模块内部的紧密度内聚表示模块内部各成分之间的联系程度是从功能角度来度量模块内的联系。一句话原则内聚度越高越好。也就是我们常说的高内聚。高内聚意味着模块只做一件事且把这件事做好。7 种内聚类型从低到高排列内聚度内聚类型一句话理解最低偶然内聚巧合内聚模块里的功能彼此毫无关系纯粹凑在一起低逻辑内聚功能逻辑上相关但通过参数决定执行哪个如一个通用的错误处理模块较低瞬时内聚时间内聚功能在同一时间段内执行如初始化模块执行一堆初始化操作中等过程内聚功能必须按特定次序执行但没有数据传递关系较高通信内聚所有功能操作同一个数据区域如对同一张表做增删改查高顺序内聚功能必须顺序执行且存在数据传递和依赖前一步的输出是后一步的输入最高功能内聚模块的所有部分协同完成一个单一功能缺一不可关键区分过程内聚 vs 顺序内聚 —— 两者都需要顺序执行但过程内聚没有数据传递顺序内聚有数据传递和依赖。这也是考试高频区分点。关键区分通信内聚 vs 顺序内聚 —— 通信内聚操作的是同一片数据区域如都操作同一张表但不一定存在数据传递链顺序内聚强调 A 的输出是 B 的输入。7.4 耦合 内聚 模块设计的黄金法则耦合和内聚是选择题的高频考点。核心做题思路先判断描述的是模块之间选耦合还是模块内部选内聚再看传递的是简单值还是数据结构有没有控制信息是不是全局共享最后按从低到高/从高到低的级别定位正确答案

相关新闻

为效率工具注入美学:CSS样式注入实现WorkBuddy毛玻璃特效皮肤

为效率工具注入美学:CSS样式注入实现WorkBuddy毛玻璃特效皮肤

1. 项目概述:当效率工具遇上审美疲劳不知道你有没有这样的感觉:每天打开电脑,面对的第一个界面就是那些效率工具。它们功能强大,帮我们管理任务、追踪时间,但日复一日看着千篇一律的默认皮肤,总感觉少了点新…

2026/8/8 8:31:28 阅读更多 →
深入解析CAN通信矩阵:从信号属性到工程实践

深入解析CAN通信矩阵:从信号属性到工程实践

1. 项目概述:从“黑盒”到“白盒”的CAN通信认知跃迁在汽车电子、工业控制这些领域里混久了,你肯定对CAN总线不陌生。它就像设备之间的“神经系统”,负责传递各种控制指令和状态信息。但很多工程师,尤其是刚入行的朋友&#xff0c…

2026/8/8 8:30:27 阅读更多 →
函数学习总结呀

函数学习总结呀

python函数学习 多值函数模块 多值函数 拆包、组包 拆包:将容器中多个数据分别给多个变量,需要保证容器中元素个数和变量的个数一致 组包:将多个数据值组成元组的过程模块 name 1)导入模块的时候,会执行模块中所有未缩进的代码…

2026/8/8 8:30:27 阅读更多 →

最新新闻

Windows AI功能彻底移除指南:如何一键清理Copilot、Recall等AI组件,提升系统性能与隐私保护

Windows AI功能彻底移除指南:如何一键清理Copilot、Recall等AI组件,提升系统性能与隐私保护

Windows AI功能彻底移除指南:如何一键清理Copilot、Recall等AI组件,提升系统性能与隐私保护 【免费下载链接】RemoveWindowsAI Force Remove Copilot, Recall and More in Windows 11 项目地址: https://gitcode.com/GitHub_Trending/re/RemoveWindows…

2026/8/8 19:44:11 阅读更多 →
构建跨平台实时通信应用:libdatachannel轻量级WebRTC库完全指南

构建跨平台实时通信应用:libdatachannel轻量级WebRTC库完全指南

构建跨平台实时通信应用:libdatachannel轻量级WebRTC库完全指南 【免费下载链接】libdatachannel C/C WebRTC network library featuring Data Channels, Media Transport, and WebSockets 项目地址: https://gitcode.com/GitHub_Trending/li/libdatachannel …

2026/8/8 19:44:11 阅读更多 →
如何用DeepFilterNet在3分钟内实现专业级音频降噪?新手必看教程

如何用DeepFilterNet在3分钟内实现专业级音频降噪?新手必看教程

如何用DeepFilterNet在3分钟内实现专业级音频降噪?新手必看教程 【免费下载链接】DeepFilterNet Noise supression using deep filtering 项目地址: https://gitcode.com/GitHub_Trending/de/DeepFilterNet DeepFilterNet是一款基于深度学习的实时音频降噪框…

2026/8/8 19:44:11 阅读更多 →
红黑树插入后哪里失衡:三种修复路径逐层展开

红黑树插入后哪里失衡:三种修复路径逐层展开

:红黑树插入最难的不是记住左旋右旋,而是判断父节点、叔叔节点和祖父节点的颜色与方向。本文从红色新节点为何不破坏黑高讲起,逐层展开叔叔为红、内侧折线和外侧直线三类路径,并用 Java 完整插入与验证程序检查有序性、根颜色和黑…

2026/8/8 19:44:11 阅读更多 →
ZotMoov终极指南:5步实现Zotero文献附件自动化管理

ZotMoov终极指南:5步实现Zotero文献附件自动化管理

ZotMoov终极指南:5步实现Zotero文献附件自动化管理 【免费下载链接】zotmoov Zotero plugin to automatically move attachments and link them 项目地址: https://gitcode.com/gh_mirrors/zo/zotmoov 还在为Zotero中杂乱无章的文献附件而烦恼吗?…

2026/8/8 19:44:11 阅读更多 →
Flipper Zero Sub-GHz无线信号分析实战:车库门安全评估深度指南

Flipper Zero Sub-GHz无线信号分析实战:车库门安全评估深度指南

Flipper Zero Sub-GHz无线信号分析实战:车库门安全评估深度指南 【免费下载链接】Flipper Playground (and dump) of stuff I make or modify for the Flipper Zero 项目地址: https://gitcode.com/GitHub_Trending/fl/Flipper Flipper Zero作为一款多功能渗…

2026/8/8 19:43:11 阅读更多 →

日新闻

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

当下AI应用飞速普及,无数企业下场搭建智能体系统,可落地阶段难题接踵而至:上下文无限堆积频繁爆栈、AI工具调用准确率低下、Token成本居高不下、企业数据权限混乱暗藏安全隐患……很多团队卡在架构搭建环节,空有前沿技术概念&…

2026/8/8 0:00:07 阅读更多 →
PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码 【免费下载链接】php-qrcode A PHP QR Code generator and reader with a user-friendly API. 项目地址: https://gitcode.com/gh_mirrors/ph/php-qrcode 在当今数字时代,二维码已…

2026/8/8 0:00:08 阅读更多 →
UniApp微信小程序隐私保护组件开发:从原理到实战

UniApp微信小程序隐私保护组件开发:从原理到实战

1. 项目缘起:为什么我们需要一个隐私保护通用组件?最近在维护一个基于uniapp开发的微信小程序矩阵时,我遇到了一个非常棘手的问题。随着平台对用户隐私保护的要求越来越严格,几乎每一个新版本发布,或者在某些特定机型&…

2026/8/8 0:00:08 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/8 17:02:43 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/8 8:58:26 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/7 23:24:08 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/8 17:02:44 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/7 23:54:54 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/8 17:02:44 阅读更多 →