📄 一句话概括
三类软件的建模重点完全不同:业务系统看数据与流程、嵌入式看状态与实时、科学计算几乎不用 UML——选图之前先问【这类软件的难点在哪】。
📝 本节和前面几节的关系
9.3~9.4 讲的建模偏业务系统,这一节提醒别拿一套模子套所有软件。
一、三类软件三套重点
业务系统:重点是数据与流程,图用用例图和类图,成败标准是【记全、别漏】。 嵌入式:重点是状态与实时,图用状态机图,成败标准是【不能错、不能停】。 科学计算:重点是算法与精度,基本不用 UML,成败标准是【算得快、算得准】。
二、嵌入式为什么用状态机图
它要回答的是【设备处在什么状态、什么事件让它变】——这正是状态机图。 业务系统的核心问题是【数据对不对】;嵌入式的核心问题是【状态会不会卡死】。 9.13 会拿洗衣机做实测:7 条迁移里只有 1 条需要人按。
三、科学计算为什么几乎不用 UML
它的结构通常很简单(几个函数、几个数组),难点全在算法与误差。 给科学计算画类图是浪费时间——图画得很漂亮,精度一点没提高。 所以工具要匹配难点,不是匹配【别人都在用】。
四、选图之前先问一句
这类软件的【难点】在哪? 图要画在难点上。 难点在数据与流程 → 用例图、概念模型、类图。 难点在状态与实时 → 状态机图。 难点在算法 → 别画图,去推导、去测误差。
五、动手 Demo:应用程序不同,建模的内容也不一样
三类软件各自的建模重点、主要用图、成败标准列成表。 数一数其中有多少类真的用得上 UML。
rows = [("业务系统", "数据与流程", "用例图/类图", "记全、别漏"),
("嵌入式", "状态与实时", "状态机图", "不能错、不能停"),
("科学计算", "算法与精度", "(很少用 UML)", "算得快、算得准")]
use_uml = [r for r in rows if r[2] != "(很少用 UML)"]
print(len(rows), len(use_uml)) # 3 2
实跑输出:
--------------------------------------------------------------------
应用程序不同,建模的内容也不一样
--------------------------------------------------------------------
同样是建模,**三类软件的重点完全不同**:
类型 建模重点 主要用图 成败标准
--------------------------------------------------------------
业务系统 数据与流程 用例图/类图 记全、别漏
嵌入式 状态与实时 状态机图 不能错、不能停
科学计算 算法与精度 (很少用 UML) 算得快、算得准
三类软件 3 类
用 UML 图的两类 2 类(业务/嵌入式)
基本不用 UML 的 1 类(科学计算)
**嵌入式为什么用状态机图**:它要处理的是【设备处在什么状态、什么事件让它变】。
**科学计算为什么不用 UML**:它的难点在算法与误差,**结构本身很简单。**
**所以选图之前先问**:这类软件的【难点】在哪?图要画在难点上。
实测对照:三类软件,只有两类主要用 UML,科学计算几乎不用。 业务系统怕漏、嵌入式怕错、科学计算怕不准——三句就是三套标准。 所以选图之前先问:这类软件的难点在哪?
30 秒实验
- 把你做过的项目按这三类归一次,看有没有用错图。
- 说出你项目最怕的是哪件事:漏、错、还是不准。
常见误区
- 以为一种建模方法通吃所有软件。三类的重点不一样。
- 给算法类项目画一堆类图。图画得漂亮,精度一点没提高。
自测三问(点开对答案)
1. 三类软件各自的重点? —— 业务系统看数据与流程,嵌入式看状态与实时,科学计算看算法与精度。 2. 嵌入式为什么用状态机图? —— 它要回答设备处在什么状态、什么事件让它变,这正是状态机图的内容。 3. 选图之前该问什么? —— 这类软件的难点在哪——图要画在难点上,不是画在别人都在用的地方。- ☐ 9.6 业务应用程序记录现实中的事情
相关笔记
- 建模是顺利推进这三个阶段的工作的技术 — 建模的通用做法
- UML有13种图形 — 可选的那些图
- 嵌入式软件替代现实世界的工作 — 另一类的展开
- 🧩 面向对象是怎样工作的 · 索引