第 8 课导读

介绍第 8 课「赋值、状态与环境」的学习内容、阅读材料与模块化思想。

警告

警告

本课的阅读材料密度很高,还需要大幅修订。如果你觉得任何内容令人困惑或难以理解,请随时提问,不要犹豫。

先修知识与课程预期

请务必理解本课之前的所有内容,尤其是消息传递(Message Passing)。

本课将讨论变量状态和环境的变化。你会亲手绘制一些漂亮的图,直观展示 Scheme 存储变量和过程的方式。请做好准备,你将接触相当多的信息,并需要把它们融会贯通!

阅读材料

本课包含以下阅读材料:

欢迎提前阅读!

此外,这里还有往届课程的网络授课视频。环境图的主要示例只出现在网络授课中,因此我们强烈建议你观看:

模块化

我们通常把世界看作由一个个独立的对象组成,每个对象都有自己的状态,并随时间不断变化。如果一个对象的行为受它的历史影响,我们就说这个对象「有状态」。例如,银行账户是有状态的:「我能取出 100 美元吗?」这个问题的答案取决于存取款交易的历史。我们可以用一个或多个状态变量(state variable)来刻画一个对象的状态,这些变量合起来保存了足够的历史信息,足以决定对象当前的行为。在一个简单的银行系统里,我们可以用「当前余额」而不是「账户交易的全部历史」来刻画账户的状态。

模块化

在由许多对象组成的系统中,对象很少完全独立。对象之间通过交互相互影响彼此的状态,这种交互把一个对象的状态变量与其他对象的状态变量耦合起来。事实上,只有当系统中各个对象的状态变量可以分成内部紧密耦合、彼此之间松散耦合的子系统时,「系统由独立对象构成」这一观点才最为有用。

这种系统观可以成为组织系统计算模型的强大框架。要让这样的模型做到模块化,就应该把它分解成若干计算对象,让它们模拟系统中的真实对象。每个计算对象必须拥有自己的局部状态变量(local state variable),用来描述对应真实对象的状态。既然被模拟系统中对象的状态随时间变化,相应计算对象的状态变量也必须随之变化。如果我们选择用计算机的运行时间来模拟系统中时间的流逝,就必须有办法构造出行为随程序运行而改变的计算对象。特别地,如果我们希望用程序设计语言中普通的名字来表示状态变量,那么这种语言就必须提供赋值运算符,让我们能够改变与名字关联的值。

在面向对象编程(object-oriented programming,OOP)中,模块化是对象模型的七项基本原则之一。模块化原则(modularity principle)指出:程序应当由一组内部高内聚的单元(称为对象)构成,这些单元之间可以通信和协作,而不需要了解彼此的内部结构。

要点回顾

本课你学习了:

  1. 模块化的定义

接下来

进入下一课,看看如何利用模块化思想来编程!