- 内容提要
- 序 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 已死
5.3 方向 1:计算要素的结构化
第一种结构化方向是指:通过在 计算要素 上的结构化来 增强计算能力 。在这一方向上的努力,将我们的开发规模推进到 程序 (program)这一等级。我所见过的,对于程序的最初、最正确和最直观的定义为:
a + s(d)
即,“算法 + 数据结构 = 程序” 1 :
Algorithm + Structured(Data)
但是这里的结构(structure)主要作用于数据(data),所描述的是对算法(algorithms) 中所用数据的抽象。而在更大的计算规模中,计算对象——数据的复杂性固然是一个问题,而计算本身的复杂性也是一个问题。因此对于a+s(d)这个定义来说,Dijkstra 在《结构程序设计》中的描述更为完善,即:
s(f) + s(d)
显而易见,后者用 计算的结构化 s(f)来替代了算法 a。原意为 2 :对于一个计算过程,(通过提炼)抽去每次计算所处理的特殊值,余下的不变的东西就是这个“算法”自身。由于对过程中的每一步都进行了“动态提炼(算法)和静态提炼(数据结构)”,因此这里的提炼结果(结构s)在计算过程f和数据d上是匹配的、共生的,即 3
s ( f ( d ) )
其三,程序代码本身在组织上也还存在复杂性的问题。对于这第三个问题,Dijkstra 以“组织和编排程序”为主题加以了讨论。不过在具体背景之下,他所讨论的仅仅是对“函数/过程” 4 进行结构化地组织与编排。
这里需要明确一下在该背景下的 函数 这一概念。在上一小节的 计算语言 中,函数是与数学公理类同的、面向“数”或“数据”的一个计算过程。而在本小节所讨论的程序(program)这个规模之下(以及该规模下的语言之中),函数是算法或算法中的一个子步骤的代名词。在 program 这一语境下的函数,与确定的结构有关,既包括计算逻辑的结构,也包括计算数据的结构,是
s ( f ( d ) )
中三者合一的概念。如同《结构程序设计》用 “珍珠”和“项链” 来做的比喻一样,从 珍珠 的角度来看,是可以在整个程序中被替代、被优选的 5 ;从 项链 的角度来看,可以是暂时不完整的 6 ;从 串起项链 这件事上来看,顺序是确定的 7 。
我将这一等级上的语言统称为 “编程语言”(programming languages) 。我使用这个具有歧义的称谓的原因在于 8 :这一类语言仍然是在 计算要素 上加以增强——尽管对于函数来说也存在着代码的组织与编排上的增强,但归根结底是针对计算要素的,并且是在该抽象上的自然延伸。
在这一阶段中,计算机主要在专业领域中使用,计算量的增加是程序规模变化的主要原因,同时又要求对目标系统有足够的抽象表达能力,因此在数据抽象程度变高的同时仍然强调语言具有完备的计算能力。我们可以将操作系统、网络系统、通信调度、分布式运算环境等绝大多数基础系统的核心部分,以及其中大量利用系统特性的工具软件,都归于这类语言所面向的开发规模。其主要特点是:大量的计算、数据抽象与计算环境相关,主要算法可以在不同的软硬件环境中通用或重现,并且通常用户主要入口是操作系统的约定或直接的硬件系统界面。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论