- 内容提要
- 序 1:程序里的世界
- 序 2:最后一层表象
- 关于本书
- 致谢
- 引言:简单的本源
- 篇一:计算系统
- 第 1 章 数,以及对数据的性质的思考
- 第 2 章 逻辑
- 第 3 章 抽象
- 篇二:语言及其面临的系统
- 第 4 章 语言
- 第 5 章 从功能到系统
- 篇三:程序设计的核心思想
- 第 6 章 数据结构:顺序存储
- 第 7 章 数据结构:散列存储
- 第 8 章 执行体与它在执行过程中的环境
- 第 9 章 语法树及其执行过程
- 第 10 章 对象系统:表达、使用与模式
- 篇四:应用开发基础
- 第 11 章 应用开发的背景与成因
- 第 12 章 应用开发技术
- 第 13 章 开发视角下的工程问题
- 第 14 章 应用程序设计语言的复杂性
- 篇五:系统的基础部件
- 第 15 章 分布
- 第 16 章 依赖
- 第 17 章 消息
- 第 18 章 系统
- 篇六:系统的基本组织方法与原理
- 第 19 章 行为的组织及其抽象
- 第 20 章 领域间的组织
- 附一:主要编程范式 及其语言特性关系
- 附二:继承与混合,略谈系统的构建方式
- 附三:像大师们一样思考——从 UML 何时死掉 谈起
- 附四:VCL 已死,RAD 已死
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
17.1 函数的数据含义(返回值)只能表明 x’与 Sx 之一
我们为什么需要状态?
事实上我们是把两种时序依赖都最终归结于“数据依赖”,进而将这种依赖关系委托于这个“(数据全集中的)状态”。并且,我们要求状态本身只是纯粹的数据,而将状态的相关逻辑视作公共规约。我们其实是在讨论如图 45 所示的模型:
图 45 将状态从纯数据中剥离,并讨论与逻辑步骤(Step) 间的关系
这一模型的本质仍是基于“逻辑作用于数据”这一思想。也就是说,它是基于命令式语言设计范式:我们将状态{Sx}视为{*x’, x“*}的操作句柄,并通过某种规则在 Step1, … , StepN 之间传递该句柄的执有权(类似于一种令牌)。
既然Sx的抽象含义要求“含义与可操作性”明确,同时我们也知道,函数既包含一个数值含义的传出,也包含可操作性明确的逻辑,可见函数在抽象概念上是满足“状态”的两个要素的。那么,Sx本身为什么不能是一个函数呢?
问题仅在于,“状态”作为数据含义时是与{*x’, x“*}相关的,而“函数”作为数据含义时是指它的传出。也就是说:
1 2 3 |
|
可以在数据上表明:
foo = 5
但这也导致我们无法通过 return
来表明 foo()
这个函数的(数据含义的)状态 1 。
解决这一问题的方法,就是消息。例如:
1 2 3 4 |
|
这个例子中, foo()
向 bar()
发送了一个消息’…’,这个消息用于指明 foo
当前所持有的数据的某个状态。由于 foo()
可以持有多个数据——多个数据全集,或者由多个子集构成的集合——所以它也可以发送一个复合信息的消息,或用某个单一消息来指示所有数据的状态。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论