因为C++继承并改进了原来C语言的功能,提高了其灵活性,所以,现在处理时间紧迫的低级编程任务就有了一个丰富的功能库,还可以处理传统过程编程方法擅长处理的问题。但C++的主要优点是其强大、可扩展的面向对象功能。与以前的过程式程序相比,用C++编写的程序不易出错,维护所需的时间较短,扩展和理解起来也容易。
这两种编程方法之间有着本质的区别。下面将着重描述它们的区别,并说明面向对象方法吸引人的一些原因。
过程化编程方法和面向对象编程方法
在历史上,过程化编程方法曾是编写几乎所有程序的方式。要创建过程化编程解决方案,必须考虑程序实现的过程,由此才能解决问题。一旦需求明确地确定下来,就可以写出完成任务的大致提纲,如下所示:
● 为程序要实现的整个过程创建一个清晰的高级定义。
● 将整个过程分为可工作的计算单元,这些计算单元应尽可能是自包含的。常常称它们为函数。
● 把每个计算单元的逻辑和工作分解为更详细的动作序列。这就下降到对应于编程语言语句的一级。
● 根据正处理的数据的基本类型:数值数据、单个字符和字符串,来编写函数。
在解决相同问题时,除了开始时对问题进行清晰的说明这一点相同之外,面向对象的编程方法在其他地方都完全不同:
● 根据问题的详细说明确定该问题所涉及的对象类型。例如,如果程序处理的是**********,就应把BaseballPlayer标识为程序要处理的一个数据类型。如果程序是一个账户打包程序,就应定义Account类型和Transaction类型的对象。还要确定程序需要对每种对象执行的操作集。这将产生一组与应用程序相关的数据类型,用于编写程序。
● 为问题需要的每种新数据类型生成一个详细的设计方案,包括可以对每种对象类型执行的操作。
● 根据已定义的新数据类型及其允许的操作,编写程序的逻辑。
面向对象解决方案的程序代码完全不同于过程化解决方案,理解起来也比较容易,维护也方便得多。面向对象解决方案所需的设计时间要比过程化解决方案长一些。但是,面向对象程序的编码和测试阶段比较短,问题也比较少,所以这两种方式的整个开发时间大致相同。
下面简要论述面向对象方式。假定要实现一个处理各种盒子的程序。这个程序的一个合理要求是把几个小盒子装到另一个大一些的盒子中。在过程化程序中,需要在一组变量中存储每个盒子的长度、宽度和高度。包含几个盒子的新盒子尺寸必须根据每个被包含盒子的尺寸,按照为打包一组盒子而定义的规则进行计算。
面向对象的解决方案首先需要定义一个Box数据类型,这样就可以创建变量,引用Box类型的对象,并创建Box对象。然后定义一个操作,把两个Box对象加在一起,生成包含前两个Box对象的第三个Box对象。使用这个操作,就可以编写如下语句:
bigBox = box1 + box2 + box3;
在这个语句中,+操作的含义远远超出了简单的相加。+运算符应用于数值,会象以前那样工作,但应用于Box对象时,就有一个特殊的含义。这个语句中每个变量的类型都是Box,上述代码会创建一个Box对象,其尺寸足够包含box1、box2和box3。
编写像这样的语句要比分别处理所有的尺寸容易得多,计算过程越复杂,面向对象编程方式的优点就越明显。但这只是一个很粗略的说明,对象的功能要比这里所描述的强大得多。介绍这个例子的目的是让读者对使用面向对象方法来解决问题有一个大致的了解。面向对象的编程方法基本上是根据问题涉及到的实体来解决问题,而不是根据计算机喜欢使用的实体,即数字和字符,来解决问题。第11章将详细讨论C++中的面向对象编程方法。
|