- 内容提要
- 序 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 已死
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
10.7 数据是一种抽象,所以我们可以泛化从这种抽象中得到的结论
在上述对对象系统的讨论中,我们首先考察的是剥离掉继承性之后的对象——亦即一组性质,或称之为一个复合的数据(或结构体)。对于这样的数据,GoF 模式从“数据间关系”的角度上,为每个子系统(一组数据)定义了两类可能的产出,其一为结构型,即一组有关系的 数据 ;其二为行为型,即一组有关系的 逻辑 。上述所谓 产出 的方式,既可以是指执行该子系统(而得到运算结果),也可以是指对该子系统重新结构(从而最终达到某种外观表现)。因此,GoF 模式本质上是说明:
s(f) + s(d)
即 “结构(逻辑+数据)” 这样的基本模型作用于 数据间关系 之后的产出。
这样看来,尽管我们讨论 GoF 模式时是面向(或基于)对象系统的,但其中的绝大多数模式与“对象”并没有必然关系。同样,即使我们将这些模式的应用泛化到纯粹的“数据的获取、展示与调度”这一层面,也仍然只是它——作为思维方式——的一种应用。
我们可以(也是可选地)将这一思维方式提升到系统层面,那么我们会发现,GoF 模式也可以是一种系统组织方式。这种情况下,系统中的工件并非是数据,而是各种应用与应用间的消息。其中,应用可以理解为s(f),应用间的消息则可以理解为s(d)。
以此为起点,我们事实上是在将 GoF 思想延伸到系统设计的各个领域。例如著名的系统设计模式 MVC 以及常用的插件框架,就可以视作几种 GoF 模式应用于某种、某类数据以及某个领域的结果 14 。
- 在一个语言的具体执行环境中,还涉及边界对齐问题。 ↩
- 通过地址或名字来找到数据,这是目前计算机发展中对这个问题的两个答案,但并非只有这两个可能答案。 ↩
- 所以我们看到最新的 Go 语言只支持所谓结构,而.NET 中的结构与对象之间的界线也相当模糊。 ↩
- 奥利—约翰•达尔(Ole-Johan Dah)与霍尔合写了该书的第三篇。达尔被称为面向对象之父,是 2002 年图灵奖得主。霍尔同时是该书第二篇的作者,是 1980 年图灵奖获得者。 ↩
- 这里的“结构”更适宜理解为动词。 ↩
- 注意我们并没有强调是类继承的对象系统 ,这是因为类只是实现继承的方法之一。其它的继承方式包括原型继承、元类继承等。 ↩
- 在“10.1 抽象本质上的一致性”中我们曾经将“(对象)可以作为其他对象的性质”理解为它作为数据系列时的外延。当时我们只讨论了它结构化的一方面而没有拓展这一外延性质,因为“数据的可引用性”是结构类型(Struct types)的基础,是对象之于结构类型类似之处。然而现在我们约定了系列关系之一为“继承”,其基础是“层次间的相似性”,在这一语境之下可引用性将是实现继承的一个工具,例如“封装”。不过仍然需要强调的是,“继承”是系列关系之一,而非惟一,亦非必须。 ↩
- 例如不支持 RTTI(RunTime Type Information, 运行期类型信息)、编译性的语言。 ↩
- 例如支持 RTTI 的语言。由于在运行期了解类的关系,因此类必须在 RTTI 中登记为一个类型,即类类型。 ↩
- 例如在函数式语言中实现类继承方式的面向对象系统。这时,类信息应该记录在一个构造过程(函数)中,并通过该过程向外公布。 ↩
- C 模型是 Delphi 的基本模型,并且由 C 至 B,是 Delphi 在抽象概念上从 Object 到 Component 进化的基本动力——亦即是说,“组件与组件库”是 Delphi 基于 RTTI 的成功实现。在作者的开源项目 Qomo 中,使用了 A 模型来实现“基于原型继承的类继承”,因为 JavaScript 的原型继承本身就实现了“构造过程”这一特性。 ↩
- GoF 对元类的叙述是没有的,但这不妨碍用 GoF 模式在语言去中实现元类继承。 ↩
- Adapter for Class、Interpreter 和 Template Method 的“范围”为“类”,表明它们可以是类上的行为,而并非是指它们“产生类”。 ↩
- 参考《程序员修炼之道——从小工到专家》之“29 它只是视图”中的“超越 GUI”一节。 ↩
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论