🧩 第九章 建模:填补现实世界和软件之间的沟壑
📄 一句话概括

三类软件的建模重点完全不同:业务系统看数据与流程、嵌入式看状态与实时、科学计算几乎不用 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. 说出你项目最怕的是哪件事:漏、错、还是不准。

常见误区

  1. 以为一种建模方法通吃所有软件。三类的重点不一样。
  2. 给算法类项目画一堆类图。图画得漂亮,精度一点没提高。
自测三问(点开对答案) 1. 三类软件各自的重点? —— 业务系统看数据与流程,嵌入式看状态与实时,科学计算看算法与精度。 2. 嵌入式为什么用状态机图? —— 它要回答设备处在什么状态、什么事件让它变,这正是状态机图的内容。 3. 选图之前该问什么? —— 这类软件的难点在哪——图要画在难点上,不是画在别人都在用的地方。

相关笔记