构造过程抽象
《计算机程序的构造和解释》
心智的活动,除了尽力产生各种简单的认识之外,主要表现如下三个方面: - 将若干简单认识组合为一个复合认识,由此产生出各种复杂的认识 - 将两个人时放在一起对照,得到有关它们的互相关系的认识 - 将有关认识与那些在实际中和它们同在的所有其他认识隔离开,这就是抽象,所有普遍性的认识都是这样得到的
计算过程是存在计算机里的一种抽象事物,在其演化进程中,这些过程会去操作一些被称为数据的抽象事物。
程序设计语言除了能让计算机执行任务,也同时是一种表达我们关于计算过程的思想的工具,所以要关注程序设计语言提供的将简单认识组合起来,形成更复杂认识的方法。每一种强有力的设计语言都提供了三种机制: - 基本表达式:用于表达语言所关心的最简单的个体 - 组合的方法:从简单的东西出发构造出复合的元素 - 抽象的方法:为复合对象命名,并将它们当作单元去操作
在程序设计中,我们主要处理两类要素:过程和数据。数据是一种我们希望去操作的东西,过程则是有关操作这些数据的规则的描述。
在程序语言中提供了:表达式、命名和环境、组合式、复合过程、条件表达式和谓词。
表达式是程序设计语言所关心的最简单的个体,命名和环境、组合式、复合过程、条件表达式和谓词提供了组合与抽象的方法。
过程是一种强大的抽象,它可以为复合操作提供名字,这样复合操作就可以作为一个单元使用了。在过程应用的时候,我们可以采用过程应用的代换模型进行展开,过程应用的代换模型分为:应用序和正则序。应用序是指:先求值参数而后应用,正则序是指:完全展开而后规约。
过程是一种分解复杂任务的手段,通过过程进行分解,每一个过程是独立的,我们可以将它作为黑盒,不需要关心其内部实现,而且每一个过程完成了一件可以清楚标明的工作。这也体现着程序设计中通常所说的单一职责原则。
不同的过程会产生不同的计算形状,它们主要分为两类:递归和迭代。递归又分为:线性递归和树形递归。
递归一种强大的思想,可以直观的描述解决问题的思路。普通的递归起时间和空间成本比迭代要高。尾递归可以在常量空间中执行迭代型计算过程。
过程可以作为参数传递,解决了公共的基础模式问题,提高了程序的扩展性和开闭原则。过程还可以作为返回值,这中方式可以构造算法表,在抽象的基础上建立抽象。很像设计模式中的门面模式。