正向建模:具体 → 抽象 → 模型

正向建模回答「模型从哪里来」。第一次遇到一类问题时,我们不是直接拿到模型,而是先看到很多具体事物,观察、比较、提取共同结构,最后抽象成模型。这是所有知识的产生方式——循环、函数、分层、系统,都是从具体例子里长出来的。


一、模型不是凭空发明的

教材常直接给出定义:「循环 = 对某个状态反复执行某种操作」。但第一次学习时,我们看到的不是定义,而是具体的东西:

1
2
3
4
例子 1:打印 1、2、3、4、5
例子 2:遍历数组中的每个元素
例子 3:不断读取用户输入,直到输入 q
例子 4:游戏主循环(更新 → 碰撞检测 → 渲染 → 更新 → ...)

这些例子看起来完全不同。但观察久了会发现共同结构:

1
2
3
4
5
6
7
8
9
具体程序

重复行为

循环结构

for / while / loop

「循环」模型

模型是从具体例子里抽象出来的,不是先有定义再有例子。


二、正向建模的四个步骤

1
2
3
4
5
6
7
8
具体事物
↓ ① 观察:看到了什么
多个例子
↓ ② 比较:有什么相同
共同结构
↓ ③ 抽象:把共同点提炼出来
模型
↓ ④ 命名:给它一个名字,可以复用了

以「循环」为例:

1
2
3
4
① 观察:打印 1~5、遍历数组、读输入直到 q、游戏主循环
② 比较:都有「重复执行某个过程」
③ 抽象:重复执行 = 循环结构
④ 命名:for / while / loop

以「函数」为例:

1
2
3
4
① 观察:多处需要同样的加法、同样的读取、同样的格式化
② 比较:都是「一段逻辑被多处调用」
③ 抽象:跳过去执行再跳回来
④ 命名:函数 / CALL / RET

三、从指令到系统就是正向建模的完整实例

主线「从指令到系统」的每一步,都是正向建模:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
顺序执行 + 判断跳转
↓ 观察:程序需要根据情况选择不同处理
↓ 抽象
if-else 模型

多个重复步骤
↓ 观察:反复做同一件事
↓ 抽象
循环模型

多段可复用逻辑
↓ 观察:多处需要同一段逻辑
↓ 抽象
函数模型

main 膨胀
↓ 观察:职责混在一起
↓ 抽象
分层模型 / 模块模型 / 系统模型

主线的每一步都是「具体 → 抽象 → 模型」——概念不是某天被发明的,是从具体程序的「扛不住」里长出来的。


四、正向建模的产物:知识体系

多次正向建模后,模型之间形成结构:

1
2
3
4
5
6
7
8
9
10
模型 M1(函数)
├── 应用 A
├── 应用 B
└── 边界:M1 解释不了什么

模型 M2(文件)
├── 应用 C
└── 边界

模型 M3(分层)……

这就是知识体系——模型为什么递进、依赖、扩展,背后有原因:

1
2
3
4
M2 为什么在 M1 基础上产生?
哪些问题 M1 能解释?
哪些解释不了?
为什么必须扩大模型?

知识体系 = 模型演化的结构。 正向建模产生了模型,也产生了模型之间的关系。


五、正向建模的陷阱

1
2
3
4
5
6
7
8
9
10
❌ 只观察不抽象:看到一堆例子,提取不出共同结构
→ 每个例子单独记忆,无法复用

❌ 过早抽象:例子还不够就急着下定义
→ 模型太粗糙,解释不了新例子

❌ 把例子当模型:记住「打印 1~5」的代码,没提炼出「循环」
→ 换个场景就不会了

✅ 足够多的例子 + 找到共同结构 + 抽象 + 命名

六、和其他内容的关系

1
2
3
4
5
6
7
8
9
10
11
12
正向建模 ←→ 从指令到系统
主线是正向建模在软件组织的完整实例

正向建模 ←→ 拆解与组织
正向建模的第一步是拆解:把具体事物拆开看结构
抽象 = 从拆开的零件里提取共同结构

正向建模 ←→ 领域对象分析
领域对象分析 = 从业务现实里正向抽象出对象模型

正向建模 ←→ 认知与语言主题(09,01 认知语言智能)
语言理解的前半段(语言 → 概念 → 结构)是正向建模

收束

1
2
3
4
5
6
7
8
9
10
模型不是凭空发明的,是从具体例子里长出来的

四步:观察 → 比较 → 抽象 → 命名

从指令到系统 = 正向建模的完整实例
每一步都是「具体 → 抽象 → 模型」

多次正向建模 → 模型之间形成知识体系

陷阱:只观察不抽象 / 过早抽象 / 把例子当模型

正向建模是知识的产生方式。 先看具体,再找共同结构,最后形成可复用的模型。