您的位置:首页 > 其它

7 以数据为中心的程序设计

2011-05-26 11:31 162 查看
7 以数据为中心的程序设计

本章介绍

■ 表示和处理文档

■ 设计不可变数据结构

■ 数据表示形式之间的转换

■ 使用记录和递归差别联合

在设计函数式程序时,首先考虑程序处理的数据。由于重要的程序都使用数据,因此,在应用程序设计中,这一阶段是极为重要的。在函数语言中,实现程序时,我们也从在代码中会用到的数据结构开始,然后,第二步,写操作处理数据。

这是不同于面向对象的设计,它把数据封装在对象的状态中;处理表示为方法,是对象的一部分,并与这个操作中其他有关的对象进行交互。大多数函数式程序是以数据为中心的,这意味着,数据与操作明确分开。添加一个新的操作去处理数据,大体上就是写一个函数。

注意

以数据为中心、 以行为为中心程序(Data-centric and behavior-centric programs)

虽然,大多数函数式程序是以数据为中心的,但是,仍有一些应用程序和组件并不只考虑数据,因为,关注的主要问题是行为。能够在一个使用滤镜来批处理图像的应用程序中,主要的数据结构可能是滤镜列表,从函数的角度看,滤镜就是一个函数。

这表明,我们有两种主要方式看函数式代码。这些方法往往组合在一个应用程序的不同部分,我们将会分别讨论它们。在本章中,我们看一看以数据为中心的程序,在第8 章中,我们将讨论以行为为中心的程序。

这一章的主要目的,是要教你会如何以函数方式,思考应用程序设计。我们会在一个应用程序环境中演示这个思想,这个程序处理简单的文档,包含文本、图像和标题。在这一章,我们将使用 F# 作为主要语言。虽然我们可以在 C# 中,以函数风格编程,但是,以函数方式设计应用程序的整个结构,仍然有些不便,因为,函数式数据结构严重依赖数据类型,比如,差别联合。我们将提到几个相关的面向对象的设计模式,亦会考虑如何在 C# 中处理不可变类型。

使用数据表示形式

在函数式编程中,通常使用多个数据结构来表示相同的程序数据。这意味着,我们设计不同的数据结构,然后,写表示形式之间的转换。通常,这些转换计算有关数据的其他信息。

使用不同的数据表示形式,不同的操作可以更容易实现。在这一章中,我们将处理文档的两种表示形式。在 7.2 节中,我们会实现平面数据结构,它适合绘制文档。在 7.3 节中,我们将添加结构化的表示形式,它更适合存储和处理文档。这种方法还支持共享,因为,影响不同表示形式的操作可以被开发和维持,由不同的开发人员独立地进行一些扩展。

我们将首先讨论另一个 F# 类型,对于表示程序数据很重要,然后,我们就会把注意力放到示例应用程序上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: