第八章 以行为为中心的程序设计
2014-11-28 17:15
141 查看
第八章 以行为为中心的程序设计 本章介绍■ 用函数表示行为■ 扩展程序行为■ 处理函数和闭包■ 用决策树测试客户端在第七章,我们讨论了以数据中心的应用程序,知道了,设计函数式程序的第一步是定义相关的数据结构。还有一种情况,数据结构中包含了某种形式的行为,既可能是用户调用的命令,也可能是程序在某一点执行的任务。对这种情况,我们想统一处理,而不是为每一种行为的功能进行硬编码,因此,在数据结构的设计上,需要容易修改,不论是编译时,还是运行时。我们在第七章讨论过的以行为为中心的应用程序示例,是使用图形滤镜处理图像。应用程序需要保存滤镜,根据应用的需要添加或删除滤镜。在程序中表示滤镜时,我们可以使用列表来表示实际应用的滤镜集合;更难的问题是,我们应该使用什么数据结构来表示滤镜本身。显然,滤镜不是真正的数据,尽管它可能以某种方式进行参数化;相反,它表示行为,在函数式语言中表示行为,最简单的方法是使用函数。在第五章,我们已经知道,函数可以看作是值,因此,可以把函数与其他任何数据类型一样来处理。这样,用函数的列表来表示图形滤镜,是完全合理的数据结构。以行为为中心和以数据为中心之间的区别,更多的是概念上,而非技术上。理解设计的应用程序是哪种类型,对于创建适当的设计,是有帮助的。如果应用程序符合下列任何一个条件,可能应该设计成以行为为中心的应用程序:■
事先不(不可能)知道所需功能的确切集。■ 用户或程序员应该能够轻松地添加新的行为。■ 程序可以使用外部插件进行扩展。■ 用户可以通过组合简单的功能,创建任务。从前面几章我们知道,以数据为中心的函数式程序设计,很大程度上依赖函数式数据类型,最重要的就是差别联合。在 C# 中,这不特别合乎习惯,所以,我们主要讨论 F#。另一方面,在 C# 3.0 中,使用函数表示简单的行为,是完全有可能。由于在 C# 中可以用 Func 委托表示函数,因此,这一章中的大多数示例,C# 和 F# 都能写。注意在一个相当庞大的应用程序中,通常会结合两种方法。大型的图形编辑器既支持矢量图形滤镜,也支持光栅图形滤镜,可能使用以数据为中心的方法来表示形状,以行为为中心的方法,把图形滤镜应用到图像。实现图形处的内容理超出本章范围,但可以在 http://www.functional-programming.net 找到图形处理的示例应用程序。在这一章,我们将使用一个不断扩展的示例,演示面向行为的应用程序;我们将开发一个应用程序,检查是否应该为客户提供贷款。
事先不(不可能)知道所需功能的确切集。■ 用户或程序员应该能够轻松地添加新的行为。■ 程序可以使用外部插件进行扩展。■ 用户可以通过组合简单的功能,创建任务。从前面几章我们知道,以数据为中心的函数式程序设计,很大程度上依赖函数式数据类型,最重要的就是差别联合。在 C# 中,这不特别合乎习惯,所以,我们主要讨论 F#。另一方面,在 C# 3.0 中,使用函数表示简单的行为,是完全有可能。由于在 C# 中可以用 Func 委托表示函数,因此,这一章中的大多数示例,C# 和 F# 都能写。注意在一个相当庞大的应用程序中,通常会结合两种方法。大型的图形编辑器既支持矢量图形滤镜,也支持光栅图形滤镜,可能使用以数据为中心的方法来表示形状,以行为为中心的方法,把图形滤镜应用到图像。实现图形处的内容理超出本章范围,但可以在 http://www.functional-programming.net 找到图形处理的示例应用程序。在这一章,我们将使用一个不断扩展的示例,演示面向行为的应用程序;我们将开发一个应用程序,检查是否应该为客户提供贷款。
相关文章推荐
- JavaScript高级程序设计:第八章
- C程序设计(第二版) 第八章习题
- 【linux高级程序设计】(第八章)进程管理与程序开发 4
- Python程序设计与算法基础教程·第八章上机实践
- 读书笔记 - js高级程序设计 - 第八章 BOM
- Javascript高级程序设计第二版第八章--BOM--笔记
- 白话SpringCloud | 第八章:分布式配置中心的服务化及动态刷新
- JavaScript高级程序设计(第3版)第八章读书笔记
- java语言程序设计 第八章部分代码(8.9、8.11、8.20)
- linux程序设计——运行SQL语句(第八章)
- [Effective Java]第八章 通用程序设计
- Linux程序设计笔记第八章 MySQL
- JAVA程序设计 第八章编程规范和JAVADoc
- linux程序设计——安装MySQL(第八章)
- 【linux高级程序设计】(第八章)进程管理与程序开发 5
- 7 以数据为中心的程序设计
- 读书笔记_GDI+程序设计_第八章(变换)
- 《Erlang 程序设计》练习答案 -- 第八章 顺序编程补遗
- EffectiveJava第八章:通用程序设计
- Objective-C程序设计第八章----继承