week 2 我们采用一种新的视角来对比 FP 与 OOP,即将问题分解 (decompose) 与实现 (implement) 的方式
OOP Versus Functional Decomposition
对 FP 而言,常见的分解 (decomposition) 方式为:将程序拆分成一个个函数 (function),在对应的函数中执行一些操作 (perform some operation)
对 OOP 而言,我们则是将程序拆分为一个个类 (class),对某类型的数据采取行为
以我们很熟悉的算术语言 (就是之前在 ML 中编写的,又用 Racket 实现的算数小语言) 为例
这个程序中有几个要素:
- 不同种类的表达 (different variants of expressions),如
integer
类型的值,negate
类型的表达,add
类型的表达等 - 对这些表达 (expression) 的操作 (operation),例如 evaluate (即
eval
),将其转化为字符串 (toString
),表达中的值有没有零 (hasZero
) 等
我们将这些要素抽象成一个二维网格 / 矩阵 (2D matrix),那么程序编写的过程实际上就是对矩阵的每一个空格进行实现
eval | toString | hasZero | |
---|---|---|---|
Int | |||
negate | |||
add |
- The Functional Approach
- Define a datatype for expressions, with one constructor for each variant
- Define a function for each operation
- In each function, has a branch (在 ML 中通过模式匹配 pattern-matching 实现) for each variant of data