资 源 简 介
我们编写的程序由两个主要方面组成
1 算法的集合就是将指令组织成程序来解决某个特定的问题
2 数据的集合算法在这些数据上操作以提供问题的解决方案
纵观短暂的计算机发展史这两个主要方面算法和数据一直保持不变发展演化的
是它们之间的关系就是所谓的程序设计方法programming paradigm
在过程化程序设计方法procedural programming 中一个问题可直接由一组算法来建
立模型例如公共图书馆的资料借阅/登记check out/check in 系统是由一系列过程表现
出来的其中两个主要的过程是资料的借阅和登记这些数据被独立存储起来我们既可以
在某个全局位置上访问这些数据或者把数据传递给过程以便它能够访问这些数据Fortran
C 和 Pascal 是三种著名的过程语言C++也支持过程化程序设计单独的过程如check_in()
check_out() over_due() fine()等等都被称为函数第三篇将集中讨论C++对过程化程序
设计方法的支持尤其将重点讨论函数函数模板和通用算法
在20 世纪70 年代程序设计的焦点从过程化程序设计方法转移到了抽象数据类型
abstract data type 简写为ADT 的程序设计上现在通常称之为基于对象(object based
的程序设计在基于对象的程序设计方法中我们通过一组数据抽象来建立问题的模型在
C++中我们把这些抽象称为类class 例如在这种方法下图书馆资料借阅登记系统就
由类的对象实例比如书借阅者还书时间罚款等之间的相互作用表现出来以此表
示出图书馆的抽象概念与每个类相关的算法被称为该类的公有接口public interface 数
据以私有形式被存储在每个对象中对数据的访问应与一般的程序代码隔离开来CLU Ada
和Modula-2 是三种支持抽象数据类型的程序设计语言第四篇将说明和讨论C++对抽象数据
类型程序设计方法的支持
面向对象的程序设计方法通过继承inheritance 机制和动态绑定dynamic binding 机
制扩展了抽象数据类型继承机制是对现有实现代码的重用动态绑定是指对现有的公有接
口的重用以前独立的类型现在有了类型/子类型的特定关系一本书一盒录像带一段录
音甚至孩子的宠物尽管它们有各自的借阅/登记方式但都可以成为图书馆的收藏资料
共享的公有接口和私有的数据都放在一个抽象类图书馆资料LibraryMaterial 中每个特
殊的图书馆资料类都从LibraryMaterial 抽象类继承共享的行为它们只需要提供与自身行为相
关的算法和数据Simula Smalltalk 和Java 是三种支持面向对象程序设计方法的著名语言
第五篇将集中讨论C++对面向对象程序设计方法的支持
C++是一种支持多种程序设计方法的语言虽然我们主要把它当作面向对象的语言但
实际上它也提供对过程化的和基于对象的程序设计方法的支持这样做的好处是对每个问题
都能够提供最合适的解决方案事实上没有一种程序设计方法能够