第七章 以数据为中心的程序设计

本章介绍

■ 表示和处理文档

■ 设计不可变数据结构

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

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

在设计函数式程序时,首先要考虑的是程序处理的数据;由于重要的程序都使用数据,因此,在应用程序设计中,这个方面极为重要。用函数语言实现程序,我们也是从设计在代码中用到的数据结构开始;下一步才会写处理数据的运算。

但是不同于面向对象的设计,它是把数据封装在对象的状态中;处理用方法表示,是对象的一部分,在运算中还可以和其他有关对象进行交互。而大多数函数式程序是以数据为中心的,因此,数据与运算明确分开。添加新的处理数据的运算,大体上就是写一个函数。

注意

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

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

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

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

使用数据表示形式

在函数式编程中,通常使用多种数据结构来表示相同的程序数据。就是说,我们设计不同的数据结构,然后,可以在不同的表示形式之间进行转换,这些转换通常会计算出数据的其他信息。

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

我们将首先讨论另一种 F# 类型,对于表示程序数据很重要,然后,会把注意力放到示例应用程序上。

时间: 2024-11-06 09:19:35

第七章 以数据为中心的程序设计的相关文章

第五章 以数据为中心—数据存取(1)

第五章以数据为中心-数据存取 典型的桌面操作系统提供一种公共文件系统--任何应用软件可以使用它来存储和读取文件,该文件也可以被其它的应用软件所读取(会有一些权限控制设定).而Android 采用了一种不同的系统.在Android 中,所有的应用软件数据(包括文件)为该应用软件所私有.然而,Android 同样也提供了一种标准方式供应用软件将私有数据开放给其它应用软件.这一章将描述一个应用软件存储和获取数据.开放数据给其他应用软件.从其他应用软件请求数据并且开放它们的多种方式. 可供选择的存储方式

第五章 以数据为中心—数据存取(5)

5.2.3添加.删除和修改操作 下面具体说明如何进行添加.删除.修改的操作.下面我们将这些动作封装在一个类DBHelper中,通过这个类的几个方法,可以具体看到如何进行数据库的各种操作. // import略 public class DBHelper { private static final String[] COLS = new String[] { "_id","name"}; private SQLiteDatabase db; private fina

第五章 以数据为中心—数据存取(2)

5.1.2结构性的文件-读写XML文件 通过上面的介绍我们可以自由的操作Android中普通的文本文件了,下面我们来介绍下Android中比较常用的结构性的文件-XML文件. XML,可扩展标记语言(Extensible Markup Language),用于标记电子文件,使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. AndroidSDK提供了如下package来支持XML的读写: l  javax.xml  根据XML规范定义核心X

第五章 以数据为中心—数据存取(6)

5.3安全方便简单-使用SharedPreferences 前面操作文件和数据库都相对比较复杂,需要打开,读取,关闭等等操作.可能有人就想,如果我只是需要存取几个简单的数据,有没有简单点的方法呢?的确,在Android中也封装了一种轻便的数据存取的方法-Preferences. Preferences是一种轻量级的数据存储机制,它将一些简单数据类型的数据,包括boolean类型.int类型.float类型.long类型以及String类型的数据,以键值对的形式存储在应用程序的私有Preferen

第五章 以数据为中心—数据存取(3)

5.1.3自由操作随心所欲-序列化和反序列化 在Android开发中,除了经常会操作普通的文本文件和XML文件以外,也会经常使用序列化和反序列化的方式传递或者存取数据. Android序列化对象主要有两种方法,实现Serializable接口.或者实现Parcelable接口.实现Serializable接口是Java SE本身就支持的,而Parcelable是Android特有的功能,效率比实现Serializable接口高,而且还可以用在IPC中.实现Serializable接口非常简单,声

第五章 以数据为中心—数据存取(4)

5.2通用的数据操作方式-数据库 说到数据的存取,数据库肯定是一个常用的解决方案.Android中也有它自己的数据库,下面我们来看看Android中的数据库与一般的数据库有什么不一样的地方. 5.2.1SQLite数据库介绍 目前在Android系统中集成的是SQLite3版本,它支持SQL语句,它是一个轻量级的嵌入式数据库.SQLite支持NULL.INTEGER.REAL.TEXT和BLOB数据类型,不支持静态数据类型,而是使用列关系.可以把SQLite数据库近似看成是一种无数据类型的数据库

《mysql必知必会》学习_第七章_20180730_欢

第七章:数据过滤 P43 select prod_id,prod_price,prod_name from products where vend_id =1003 and prod_price <=10;  #检索vend_id=1003 并且prod_price<=10 # select prod_name,prod_price from products where vend_id=1002 or vend_id =1003; #检索的条件只要满足vend_id=1002 ,vend_i

Laxcus大数据管理系统2.0(9)- 第七章 分布任务组件

第七章 分布任务组件 Laxcus 2.0版本的分布任务组件,是在1.x版本的基础上,重新整合中间件和分布计算技术,按照新增加的功能,设计的一套新的.分布状态下运行的数据计算组件和数据构建组件,以及依此建立的新的运行框架.操作管理规范.API接口等. 新分布任务组件的改变主要体现在数据处理能力方面.经过重新调整后的运行架构,原来因为架构问题受到的诸多限制被全部取消,分布任务组件可以随着集群的不断扩充,同步提供无限制的数据处理能力.这足以满足我们当前以及未来相当长一段时间内,对各种大规模数据处理业

第七章 KinectV2结合MFC显示和处理图像数据(下)

第七章  KinectV2结合MFC显示和处理图像数据(下) 首先声明一下,本系统所使用的开发环境版本是计算机系统Windows 10.Visual Studio 2013.Opencv3.0和Kinect SDK v2.0.这些都可以在百度上找到,download下来安装一下即可. 一.在MFC中如何显示OpenCV的图像Mat 前段时间一直在学习opencv,但学习过程中写的例子都是基于控制台的.今天打算把之前写的一些例子都移植到MFC中,基本上就是复制以前的代码,唯一的区别在于在控制台中,