河北农业大学渤海校区理工学院 石博文
浅谈面向对象和面向过程程序设计
河北农业大学渤海校区理工学院 石博文
主要论述了面向过程程序设计的结构化思想和面向对象程序设计的抽象、封装、继承、多态技术,并详细介绍了两种思维方式的特点、优缺点以及相互联系。
程序设计;面向对象;面向过程;模块;封装;继承;多态
程序设计是给出解决特定问题程序的过程。程序设计的本质是把人们在现实生活中遇到的问题经过抽象处理,再利用计算机语言转换到机器能够理解的层面上去。如今,在程序设计中,有两个非常成熟的设计方式:面向过程的程序设计和面向对象的程序设计。
2.1 设计思想
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个调用。结构化程序设计是其核心思想。
2.2 设计特点
(1)模块化
模块化即功能分解,实质是采用自顶向下、逐步求精的设计过程把程序分解成单一处理功能的模块,进而通过调用相应模块并传递参数以实现程序的功能,此功能模块可以理解为函数、过程、子程序;每一模块内部均是由顺序、选择、循环三种基本结构组成,利用这三种结构的组合、嵌套,可以实现任何复杂的程序设计。功能分解使得系统是模块的组件即:程序=(模块+模块+模块+…)、模块=(数据结构+算法)[1]。
模块设计应坚持“高内聚,低耦合”的设计原则。其中“高内聚”是指每一个模块都执行一个完整的功能,具有一个完整功能的业务都组合在一个模块当中,而不会分散到两个或者多个模块当中;“低耦合”是指每一个模块之间的共用信息应该尽量少,每个模块之间的交集应尽可能小,应该尽量降低每个模块之间的耦合度。
(2)数据和操作分离
面向过程的程序设计把重点放在解决问题的功能模块划分上,将数据和操作这些数据的函数分开。数据处于次要地位,而过程即模块划分是关心的焦点[2]。
2.3 设计优点
早期的程序设计属于面向计算机的程序设计,程序员需要考虑大量的机器细节。面向过程的程序设计优点是相对前期程序设计而论的。
(1)模块化思想将一个较复杂的问题分解为若干个子问题,各子问题分别由不同的人员解决,提高了开发效率,便于程序的调试;
(2)面向过程的设计按解决问题的过程划分模块,直接针对求解关系,集中处理数据,运行效率很高[3];
(3)自顶向下逐步求精的方法使程序具有清晰的层次结构,容易阅读和理解,也较容易保证程序的正确性。
2.4 设计缺陷
(1)软件模块重用难。当开发一个新的软件系统时,以前开发的软件模块很难直接使用;
(2)软件系统功能扩展难。一旦用户的需求发生变化,要改进系统或升级版本时,程序员要面对调用关系复杂的许多函数模块,系统的功能扩展很困难;
(3)软件维护难。软件的模块即函数越来越多,模块间的调用关系越来越复杂,程序容易出错,而且一旦出错很难查找[4]。
3.1 设计思想
面向对象就是把构成问题的事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在整个解决问题步骤中的行为。
3.2 设计特点
(1)抽象、类、对象
抽象就是把事物共同点抽取出来,以统一的方式进行概要描述的一种过程。面向对象中,类是对现实世界事物的抽象,包括属性和方法。其中属性是对事物静态特征的描述,方法是对事物动态特性即行为的描述[5]。一旦建立了类,就可以基于类初始化成员变量,实例化出一个对象,而程序就是由这一系列对象组成即:程序=(对象+对象+对象+…)、对象=(数据结构+算法)。
(2)封装
封装又称数据隐藏,就是将一个事物的属性和方法放在一个类中,对外只提供访问该数据的方法,程序的其它部分不能直接作用于此数据。这一特性大大降低了面向过程中模块间的耦合性,从而提高了程序的可靠性,尽可能地排除了对数据进行任意访问造成的隐患[6]。
(3)继承
类的继承实质上是先定义一个基类(父类),然后用该基类派生出其它的子类,子类在沿袭父类的属性和方法的同时可以添加自己特有的属性和方法。继承性使得程序得以最大限度地实现代码重用,同时在父类上所做的改动可以直接反映到它的所有子类中,软件可维护性大为提高。
(4)多态
多态是指在一般类中定义的属性或方法被特殊类继承以后,通过重写,可以具有不同的数据类型或表现出不同的行为。多态性使得程序员可以将所定义的方法应用于多个类,同一个属性和方法在一般类及各个特殊类中具有不同的语义,并使得程序更加容易扩展[7]。
3.3 设计优点
面向对象程序设计的优越性是基于它的特点而论的。对客观现实世界事物的抽象,使软件开发可以按照人类习惯的思维方式建立起问题领域的模型从而模拟客观世界,有利于大型软件的开发;事物属性和方法的封装避免了数据的随意访问,保证了数据的安全性;类与类之间的继承关系,最大程度实现了代码的重用;继承关系下的多态性增强了程序的灵活性和扩展性。
3.4 设计缺陷
(1)运行效率较低。类的大量加载会牺牲系统性能,降低运行速度。虽然CPU速度在提高,内存容量在增加,但这一问题仍会随着系统规模变大而逐渐显示出来,变得越发严重。
(2)类库庞大。由于类库都过于庞大,程序员对它们的掌握需要一段时间,从普及、推广的角度来看,类库应在保证其功能完备的基础上进行相应的缩减。
(3)类库可靠性。越庞大的系统必会存在我们无法预知的问题隐患,程序员无法完全保证类库中的每个类在各种环境中百分之百的正确,当使用的类发生了问题,就会影响后续工作,程序员也有可能推翻原来的全部工作[8,9]。
面向对象重视对现实世界的抽象,面向过程重视对问题的功能模块化,但两种技术不是非此即彼的对立关系。面向对象的抽象、封装、继承、多态是建立在面向过程的顺序、选择、循环三种控制结构之上。因此,如果将一个软件任务分为两层,那么面向对象技术用于解决“做什么”,而面向过程技术用于解决“怎么做”。
[1]马金霞,宋传磊.面向过程和面向对象程序设计分析[J].中国新通信,2016(11).
[2]钱能.C++程序设计教程(第2版)[M].北京:清华大学出版社,2005(09):13-16.
[3]许伟刚,梁大周.面向对象程序设计[J].计算机工程与应用,1990(12).
[4]朱战立,宋新爱.面向对象程序设计与C++语言[M].北京:电子工业出版社,2010(07):31-46.
[5]张海藩.软件工程导论(第5版)[M].北京:清华大学出版社,2008(02):203-211.
[6][美]Grady Booch等.面向对象分析与设计(第3版)[M].王海鹏,潘加宇译.北京:人民邮电出版社,2009(08):35-38.
[7][加]Scott W.Ambler.面向对象软件开发教程(第2版)[M].车皓阳,刘锐译.北京:机械工业出版社,2003(06):97-130.
[8]徐向阳.面向对象程序设计现状及发展趋势研究[J].光盘技术,2006(01).
[9]胡玲.面向对象程序设计和设计技术思考[J].电子技术与软件工程,2016(06).
The Summary between Object-oriented Programming and Process-oriented Programming
ShiBowen
(College of Science and Engineering,Agricultural University of Hebei,Cangzhou,061000,China)
The summary is mainly about structured ideas of process-oriented programming and some important technologies in objectoriented programming like abstract,encapsulation,inheritance and polymorphism.At the same time,the article expatiates the feature,merits and drawbacks as well as the relationship between process-oriented and object-oriented programming.
programming;object-oriented;process-oriented,module;encapsulation;inheritance;polymorphism