7 以数据为中心的程序设计
2011-05-26 11:31
162 查看
7 以数据为中心的程序设计
本章介绍
■ 表示和处理文档
■ 设计不可变数据结构
■ 数据表示形式之间的转换
■ 使用记录和递归差别联合
在设计函数式程序时,首先考虑程序处理的数据。由于重要的程序都使用数据,因此,在应用程序设计中,这一阶段是极为重要的。在函数语言中,实现程序时,我们也从在代码中会用到的数据结构开始,然后,第二步,写操作处理数据。
这是不同于面向对象的设计,它把数据封装在对象的状态中;处理表示为方法,是对象的一部分,并与这个操作中其他有关的对象进行交互。大多数函数式程序是以数据为中心的,这意味着,数据与操作明确分开。添加一个新的操作去处理数据,大体上就是写一个函数。
注意
以数据为中心、 以行为为中心程序(Data-centric and behavior-centric programs)
虽然,大多数函数式程序是以数据为中心的,但是,仍有一些应用程序和组件并不只考虑数据,因为,关注的主要问题是行为。能够在一个使用滤镜来批处理图像的应用程序中,主要的数据结构可能是滤镜列表,从函数的角度看,滤镜就是一个函数。
这表明,我们有两种主要方式看函数式代码。这些方法往往组合在一个应用程序的不同部分,我们将会分别讨论它们。在本章中,我们看一看以数据为中心的程序,在第8 章中,我们将讨论以行为为中心的程序。
这一章的主要目的,是要教你会如何以函数方式,思考应用程序设计。我们会在一个应用程序环境中演示这个思想,这个程序处理简单的文档,包含文本、图像和标题。在这一章,我们将使用 F# 作为主要语言。虽然我们可以在 C# 中,以函数风格编程,但是,以函数方式设计应用程序的整个结构,仍然有些不便,因为,函数式数据结构严重依赖数据类型,比如,差别联合。我们将提到几个相关的面向对象的设计模式,亦会考虑如何在 C# 中处理不可变类型。
使用数据表示形式
在函数式编程中,通常使用多个数据结构来表示相同的程序数据。这意味着,我们设计不同的数据结构,然后,写表示形式之间的转换。通常,这些转换计算有关数据的其他信息。
使用不同的数据表示形式,不同的操作可以更容易实现。在这一章中,我们将处理文档的两种表示形式。在 7.2 节中,我们会实现平面数据结构,它适合绘制文档。在 7.3 节中,我们将添加结构化的表示形式,它更适合存储和处理文档。这种方法还支持共享,因为,影响不同表示形式的操作可以被开发和维持,由不同的开发人员独立地进行一些扩展。
我们将首先讨论另一个 F# 类型,对于表示程序数据很重要,然后,我们就会把注意力放到示例应用程序上。
本章介绍
■ 表示和处理文档
■ 设计不可变数据结构
■ 数据表示形式之间的转换
■ 使用记录和递归差别联合
在设计函数式程序时,首先考虑程序处理的数据。由于重要的程序都使用数据,因此,在应用程序设计中,这一阶段是极为重要的。在函数语言中,实现程序时,我们也从在代码中会用到的数据结构开始,然后,第二步,写操作处理数据。
这是不同于面向对象的设计,它把数据封装在对象的状态中;处理表示为方法,是对象的一部分,并与这个操作中其他有关的对象进行交互。大多数函数式程序是以数据为中心的,这意味着,数据与操作明确分开。添加一个新的操作去处理数据,大体上就是写一个函数。
注意
以数据为中心、 以行为为中心程序(Data-centric and behavior-centric programs)
虽然,大多数函数式程序是以数据为中心的,但是,仍有一些应用程序和组件并不只考虑数据,因为,关注的主要问题是行为。能够在一个使用滤镜来批处理图像的应用程序中,主要的数据结构可能是滤镜列表,从函数的角度看,滤镜就是一个函数。
这表明,我们有两种主要方式看函数式代码。这些方法往往组合在一个应用程序的不同部分,我们将会分别讨论它们。在本章中,我们看一看以数据为中心的程序,在第8 章中,我们将讨论以行为为中心的程序。
这一章的主要目的,是要教你会如何以函数方式,思考应用程序设计。我们会在一个应用程序环境中演示这个思想,这个程序处理简单的文档,包含文本、图像和标题。在这一章,我们将使用 F# 作为主要语言。虽然我们可以在 C# 中,以函数风格编程,但是,以函数方式设计应用程序的整个结构,仍然有些不便,因为,函数式数据结构严重依赖数据类型,比如,差别联合。我们将提到几个相关的面向对象的设计模式,亦会考虑如何在 C# 中处理不可变类型。
使用数据表示形式
在函数式编程中,通常使用多个数据结构来表示相同的程序数据。这意味着,我们设计不同的数据结构,然后,写表示形式之间的转换。通常,这些转换计算有关数据的其他信息。
使用不同的数据表示形式,不同的操作可以更容易实现。在这一章中,我们将处理文档的两种表示形式。在 7.2 节中,我们会实现平面数据结构,它适合绘制文档。在 7.3 节中,我们将添加结构化的表示形式,它更适合存储和处理文档。这种方法还支持共享,因为,影响不同表示形式的操作可以被开发和维持,由不同的开发人员独立地进行一些扩展。
我们将首先讨论另一个 F# 类型,对于表示程序数据很重要,然后,我们就会把注意力放到示例应用程序上。
相关文章推荐
- 第七章 以数据为中心的程序设计
- 7 以数据为中心的程序设计
- 面面俱到 数据中心网络规划要点
- 数据结构与程序设计 练习3.3 E7
- 阿里“三活”数据中心实践经验:没人能做,我们就自己做
- 企业数据中心设计建议方案
- Exercise2.1 E4(数据结构与程序设计)
- [程序设计语言]-[核心概念]-04:数据类型
- 通过 Azure IoT 中心实现互联网设备数据的可视化分析
- Google要改进OpenOffice 并公布其搜索计算数据中心细节(zz)
- 工信部划分数据中心规模等级
- 工业与IT的融合:数据中心平地起 推荐
- 【实战案例】微软网络犯罪防范中心:大数据抓出恶意攻击和盗版
- 不懂这37个数据中心术语,怎么混数据圈饭局!
- 程序设计就像盖房子,数据结构就像砖瓦,而算法就是设计图纸
- C++程序设计-第6周 const用法及指针数据成员
- 运维中心建设--数据管理 推荐
- lua程序设计(1) - 数据类型和操作符
- 太原市社会保险新数据中心建设及系统搬迁项目
- 谷歌全球最大数据中心揭秘 预计花费6亿美元