1.2 面向对象程序设计的特点
1.2.1 面向过程程序设计的局限性
传统的程序设计是面向过程的结构化程序设计,其局限性至少有以下几个方面:
1.面向过程程序设计开发软件的生产效率低下
众所周知,从1946年第一台电子计算机问世以来,计算机的硬件已经历了四代变化,从电子管时代、晶体管时代、集成电路时代到大规模集成电路时代,其硬件性能取得了长足的发展,速度、容量等成倍地增长,而价格却一直下降,并且计算机的硬件水平还在突飞猛进地发展着。但相比之下,软件的生产能力还比较低下,开发周期长、效率低、费用不断上升,以至出现了所谓的“软件危机”。
硬件生产之所以效率高,一个重要原因就是,其生产方式已从当初的分立元件一级的设计,发展到今天的芯片(超大规模集成电路)一级的设计。这就是说,硬件有大粒度的构件,而且这些构件有很好的重用性。于是,也就便于实现生产过程的工程化和自动化,生产效率自然也就提高了。
然而,尽管传统的程序设计语言经历了第一代语言、第二代语言以及第三代语言的发展过程,但是其编制程序的主要工作还是围绕着设计解题过程来进行的,故称之为面向过程的程序设计,面向过程程序设计语言为过程性语言。这种程序设计的生产方式仍是采用较原始的方式进行,程序设计基本上还是从语句一级开始。软件的生产中缺乏大粒度、可重用的构件,软件的重用问题没有得到很好的解决,从而导致软件生产的工程化和自动化屡屡受阻。
复杂性问题也是影响软件生产效率的重要方面。传统程序设计的特点是数据与其操作分离,而且对同一数据的操作往往分散在程序的不同地方。这样,如果一个或多个数据的结构发生了变化,那么这种变化将波及程序的很多部分甚至遍及整个程序,致使许多函数和过程必须重写,严重时会导致整个软件结构的崩溃。随着计算机技术的大规模推广,软件的应用范围越来越广,软件的规模越来越大,要解决的问题越来越复杂。面向过程程序设计的复杂性控制是一个很棘手的问题,这也是传统程序难以重用的一个重要原因。
维护是软件生命周期中的最后一个环节,也是非常重要的一个环节。面向过程程序设计是面向过程的,其数据和操作相分离的结构,使得维护数据和处理数据的操作过程要花费大量的精力和时间,严重地影响了软件的生产效率。
总之,要提高软件生产的效率,就必须很好地解决软件的重用性、复杂性和可维护性问题。但是面向过程程序设计是难以解决这些问题的。
2.面向过程程序设计难以应付日益庞大的信息量和多样的信息类型
随着计算机科学与技术的飞速发展和计算机应用的普及,当代计算机的应用领域已从数值计算扩展到了人类社会的各个方面,所处理的数据已从简单的数字和字符发展为具有多种格式的多媒体数据,如文本、图形、图像、影像、声音等,描述的问题从单纯的计算问题到仿真复杂的自然现象和社会现象。于是,计算机处理的信息量与信息类型迅速增加,程序的规模日益庞大,复杂度不断增加。这些都要求程序设计语言有更强的信息处理能力。然而,面对这些庞大的信息量和多样的信息格式,面向过程程序设计方法是无法应付的。
3.面向过程程序设计难以适应各种新环境
当前,并行处理、分布式、网络和多机系统等,已经或将是程序运行的主流方式和主流环境。这些环境的一个共同特点是都具有一些有独立处理能力的结点,结点之间有通信机制,即以消息传递进行联络。显然传统的面向过程程序设计技术很难适应这些新环境。
综上所述,面向过程程序设计不能够满足计算机技术迅猛发展的需要,软件开发迫切需要一种新的程序设计范型的支持。那么,面向对象程序设计是否能担当此任呢?下面分析面向对象程序设计的主要优点。