您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 薪酬管理 > 面向对象与面向过程程序设计的思考与解释
面向对象与面向过程程序设计的思考与解释(蒋世贤电子商务071山东工商学院)面向过程程序设计与面向对象程序设计都是一种设计程序的方法,由于其对对象操作的不同而产生了不同的设计思想。本文在笔者学习了《面向对象程序设计——C++语言描述》这门课后,由笔者整理总结面向对象程序设计与面向过程程序设计的区别与联系后,写下此文,主要阐明笔者对两种程序设计思想的思考与理解。一、面向对象与面向过程程序设计简介面向对象程序设计中的以“对象”作为编程实体最早可以追溯到1960年的Simula67语言。而面向过程程序设计则诞生的比面向对象程序设计要早的多。两者都有着各自的核心思想结构。面向过程设计的思想发展较早,当今的C语言就是面向过程的一个典型,而面向对象则以其独特的程序设计视角被当今人广泛接受,C++就是其典型的代表。(一)面向过程程序设计面向过程的结构化程序设计方法就是采用面向过程的方法来设计结构化程序。结构化程序通常包含一个主过程和若干个子过程,其中每个子过程都描述了某一个小问题的解决方法再由主过程自顶向下调用各子过程,来逐步解决整个问题。整个执行过程是从主过程开始,再在主过程的结束语句处结束。因此,结构化程序设计方法是一种数学思维或计算机思维方法,和人们认识世界时所习惯使用的方法不同。面向过程程序设计通常采用自顶向下设计方法进行设计。在这种设计方法中,程序的每一个步骤直接的函数依赖关系是非常紧密的。要解决一个问题,就要通过一个个所设计好的函数步骤进行,每一个环节都是环环相扣的,都不能出错。一旦一个环节出错,将影响至整个问题的解决结果。面向过程设计语言以C语言、Pascal语言为主。而关于相关代码的举例说明,我们将在下面进行对比介绍。(二)面向对象程序设计面向对象程序设计(英语:Object-orientedprogramming,缩写:OOP),指一种程序设计范型,同时也是一种程序开发的方法论。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。[1]在面向对象程序设计中,程序是由一个个的模块构成的。程序设计过程中,我们先对这些模块分别进行设计、编码和测试,最后再将这些模块有机的组合在一起,构成一个完整的应用程序。在面向对象程序设计中最主要的概念就是类、对象、方法、详细传递机制、继承性、封装性、多态性、抽象性等了。而它与面向过程设计的不同也体现在这些概念之上。早期,完全面向对象的语言主要包括Smalltalk等语言,目前较为流行的语言中有Java、C#、Eiffel等[2]。二、面向对象与面向过程程序设计之间的联系面向过程的程序设计思想诞生于面向对象的程序设计思想之前,两者都是在了为了更加方便的编写程序的过程中应运而生的。面向对象的设计思想核心是对象,而面向过程程序设计则强调于程序的过程。但是两者之间又有联系。下面的部分则是着重说明面向对象与面向过程程序设计之间的联系。(一)面向过程程序设计的思想正如之前所叙述的,面向过程程序设计的核心思想是对程序自顶向下的设计。下面以设计通讯录这一具体实例为例。在编程人员设计通讯录时,首先要定义通讯录所涉及的变量的类型。其中,对于存储通讯录人名的变量我们会使用char型进行定义,而对存储号码的变量我们会使用int型进行定义。但是在实际操作中,我们不用对所存储的电话号码进行数值上的大小比较,所以为了便于操作,对于电话号码,我们也用字符型char型进行定义。这样,一个姓名对应多个电话号码,而每一个姓名也对应着一个朋友条目,所以在开始之前,我们定义了所有变量的类型,这些变量涉及到姓名、电话号码、朋友条目等内容。而这个设计思想如下图1所示:而为了方便管理朋友条目等变量内容,我们还要使用到指针参数。这样就方便将一个联系人姓名从一个朋友条目而转移至另一个朋友条目了。(二)面向对象程序设计的思想面向对象编程和面向对象设计着眼于解决在面向过程编程和自顶向下设计方法中出现的一些问题,如串联改变等。[3]在面向对象编程中,构成模块的基本单元是类,而不是过程。再拿通讯录为例,如果以面向对象设计语言来编写的话,我们首先要为各个对象创建适合他们的类。通过对通讯录的研究,我们首先要为通讯录创建一个类。这个类包含了姓名、电话、Email等属性。其相关代码如下:#includeCommEntry.hvoidCommEntry::input(){coutName:;cinname;coutTel:;cintel;}voidCommEntry::output(){coutName:nameendl;coutTel:telendl;}voidCommEntry::setName(stringnm){name=nm;}voidCommEntry::setTel(stringt){tel=t;}stringCommEntry::getName(){returnname;}stringCommEntry::getTel(){returntel;}voidFriendEntry::input(){CommEntry::input();coutEmail:;cinEmail;}voidFriendEntry::output(){CommEntry::output();coutEmail:Emailendl;}voidFriendEntry::setEmail(stringem){Email=em;}stringFriendEntry::getEmail(){returnEmail;}而关于对姓名、电话输入、输出的代码如下:#includestring#includeiostreamusingnamespacestd;classCommEntry{public:voidinput();voidoutput();voidsetName(stringnm);voidsetTel(stringt);stringgetName();stringgetTel();private:stringname;stringtel;};classFriendEntry:publicCommEntry{public:voidinput();voidoutput();voidsetEmail(stringem);stringgetEmail();private:stringEmail;};而相应的主程序的代码如下:#includecstdlib#includeiostream#includeCommEntry.husingnamespacestd;intdisplayMenu(){inti;coutendl;cout================endl;cout1.输入通讯录条目endl;cout2.输出通讯录条目endl;cout3.修改姓名endl;cout4.修改电话endl;cout0.退出endl;cout================endl;cout请选择(0-4):;cini;returni;}intmain(intargc,char*argv[]){intiChoice=1;FriendEntryce;while(iChoice!=0){iChoice=displayMenu();switch(iChoice){case1:ce.input();break;case2:ce.output();break;case3:{stringnm;coutname:;cinnm;ce.setName(nm);break;}case4:{stringt;couttel:;cint;ce.setTel(t);break;}case0:break;}}system(PAUSE);returnEXIT_SUCCESS;}由此我们可以知道,我们先定义了通讯录这个类,然后再完善了其中姓名、电话、Email等内容的属性。而各个属性之间的关系我们又用了相关代码加以定义。(三)面向对象与面向过程程序设计之间的联系由上述通过创建通讯录的实例我们可以看出,在面向对象程序设计中,程序的模块结构和可读性比面向过程的要好,同时有关通讯录类(CommEntry)能在程序中直接反映出来,其概念和处理方法比较符合人类认识问题、分析问题和解决问题的一般规律。从对比中可以看出,面向对象的程序设计方法所得到的程序是类的集合,而面向过程的程序设计方法所得到的程序是函数的集合。因此在设计面向对象的程序时,不要使用独立的函数去构造程序。面向对象的程序设计方法与面向过程的结构化程序设计方法相比较,面向对象的方法至少有三个优点:第一,面向对象的程序容易阅读和理解,程序员只需了解必要的细节,降低了程序的复杂性,使其具有较好的可维护性;第二,程序员通过修改、添加或删除对象,可以很容易的修改、添加或删除程序的属性,使程序具有易修改的特性;第三,程序员可以将某些公用的类和对象保存起来,随时插入到应用程序中,不需做什么修改就能使用,具有很好的可重用性。因此,面向对象的设计方法是提高软件开发效率,解决软件重用的有效方法在[4]。参考文献:[1]KennethC.Laudon,JaneP.Laudon.ManagementInformationSystems[M].东华书局,2002.[2]维基百科.电子文献题名[电子文献及载体类型标识].电子文献出处或网址,发表或更新日期/引用日期(年-月-日).[3]RichardJohnsonbaugh,MartinKalin.面向对象程序设计[M].北京:机械工业出版社.2002.[4]朱树人,贺株莉.面向对象与面向过程的程序设计方法比较[J].长沙电力学院学报,1998,13:22.
本文标题:面向对象与面向过程程序设计的思考与解释
链接地址:https://www.777doc.com/doc-5823178 .html