《2022年如何理解程序设计中的面向过程与面向对象 .pdf》由会员分享,可在线阅读,更多相关《2022年如何理解程序设计中的面向过程与面向对象 .pdf(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、如何理解程序设计中的面向过程与面向对象摘要程序设计语言的发展是一个不断演化的过程,其根本的推动力就是抽象机制更高的要求,以及对程序设计思想的更好的支持。具体的说, 就是把机器能够理解的语言提升到也能够很好的模仿人类思考问题的形式。“面向过程”是一种以事件为中心的编程思想。就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。随着程序规模的不段断扩大,在60 年代末期出现了软件危机,在当时的程序设计范型中都无法克服错误随着代码的扩大而级数般的扩大,以至到了无法控制的地步, 这个时候就出现了一种新的思考程序设计方式和程序设计范型-面向对象程序设计,由
2、此也诞生了一批支持此技术的程序设计语言,比如EIFFEL,C+ ,JAVA,这些语言都以新的观点去看待问题,即问题就是由各种不同属性的对象以及对象之间的消息传递构成。一、程序设计范型的演化1 过程式程序设计原始的程序设计范型是:确定需要哪些过程;采用能找到的最好的算法。这里所关注的是处理过程-执行预期的计算所需要的算法,从程序组织的观点看,函数被用于在许多算法里建立一种次序。算法本身通过函数调用和其他语言功能写出,其典型语言是 PASCAL 。2 模块程序设计设计程序的着重点已经从有关过程的设计转移到了对数据的组织,这种转移也反映了程序规模增大的情况。 相关的过程与他们所操作的数据组织在一起,
3、通称为一个模块,程序设计范型变成:确定需要哪些模块;将程序分为一些模块,使数据隐藏于模块之中。在这样的设计范型中,最重要的概念就是数据隐藏原理。3 基于对象程序设计允许程序员直接定义类型,这种类型的行为方式与内部类型几乎完全一样,这样的类型常常被称为抽象数据类型,其程序设计范型是:确定需要哪些类型;为每个类型提供完整的一组操作。支持这种范型的典型设计语言就是ADA 。4 面向对象程序设计在基于对象程序设计范型的基础上,加入继承和多态这两个组重要的概念就演变出了现在最流行的程序设计方法- 面向对象程序设计,其范型是:确定需要哪些类;为每个类提供完整的一组操作;利用继承去明确地表示共性。支持此范型
4、的典型语言就是EIFFEL,JAVA ,C+等。二、面向过程“面向过程”是一种以事件为中心的编程思想。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 5 页 - - - - - - - - - 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。按这种模型编写的程序以一系列的线性步骤( 代码 ) 为特征可被理解为作用于数据的代码。如 C 等过程化语言。面向过程的方式,其思维方式和方法布局注重深度,其调用链形成一棵链条很长的
5、树( 纵向联系 ) ,上级节点和下级节点互为上下文,上级节点单独抽出去无法完成任何工作,越核心的功能依赖层次越低的下层实现。联系太紧密, 所以很难重用, 从而导致修改时的链条也很长。面向过程其实是最为实际的一种思考方式,就是算面向对象的方法也是含有面向过程的思想。 可以说面向过程是一种基础的方法。它考虑的是实际的实现。一般的面向过程是从上往下步步求精。 所以面向过程最重要的是模块化的思想方法。对比较面向对象,面向对象的方法主要是把事物给对象化,对象包括属性与行为。当程序规模不是很大时,面向过程的方法还会体现出一种优势,因为程序的流程很清楚,按着模块与函数的方法可以很好的组织。三、面向对象。面向
6、对象的程序设计(Object-Oriented Programming,简记为OOP) “面向对象”(Object Oriented,简称 OO)是一种以事物为中心的编程思想。面向对象的方式,其方法布局是尽量把调用的级次链拉平,将方法原子化, 然后分离到独立的功能包:类里面. 更注重广度。并强调类完成功能时越孤立越好。与其它类的关系越不紧密越好 ( 斩断上下文 ) ,如果需要与其它类通信,也是通过相对固定的接口来联系( 横向联系 ) 。面向对象的过程也就是把方法布局拉平,并封装到平级对象中的过程。面向对象的特点是:封装,多态,继承。其中多态有分为重载和重写。面向对象的编程思想更加接近现实的事物
7、。有这样几点好处:1、是编程更加容易。因为面向对象更接近于现实,所以你可以从现实的东西出发,进行适当的抽象。2、在软件工程上,面向对象可以使工程更加模块化,实现更低的耦合和更高的内聚。3、在设计模式上 ( 似乎只有面向对象才设计到设计模式) ,面向对象可以更好的实现开-闭原则。也使代码更易阅读。相对而言, 面向过程的程序设计是面向对象程序设计的基础。面向对象的程序里面一定会有面向过程的程序片断的!面向对象程序设计的最基本的概念/ 机制是对象,对象可以被定义由属性(数据)和操作这些数据的方法(代码)组成的软件单元。数据不能被对象的使用者直接访问,只允许通过由对象提供的方法或者代码访问数据(也就是
8、说,函数调用它的方法)。封装 对象既包含数据又包含操作或者改变该数据的方法(代码)。对象的服务定义了其他的对象感怎样获得对其方法的访问。每一个对象都将愿意提供给所有对象的公共服务公开化。它也提供仅局限与特定对象的其他的服务(保护和私有的)。我提供服务的思想定义了面向对象范型的第二个原则- 信息隐藏。信息隐藏包含属性(数据)的对象定义什么服务(函数)可被其他对象访问,实际上,其他对象无法访问或者感知数据(属性)及其这样提供服务(方法/ 代码) 。对象通过使用消息机制发送遵守服务的原型的消息,能够使用另外一个对象的公共服务 。消息机制就构成了面向对象范型的第三个原则- 消息传递。消息传递对象只能借
9、助消息传递机制才能同其他对象通信,每个消息必须发送个指定的接受者,并且消息的解释以来于接受者。在面向对象的范型中,通常在运行时才知道给定消息的特定接受者。这样, 在消息和用名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 5 页 - - - - - - - - - 来完成对行为的轻骑的方法之间存在后期连接。命令式程序范型中的函数调用与代码片段存在的是早期连接。对后期连接的支持定义了面向对象范型的第四个原则- 后期连接。后期连接它能够在运行时对一个消息决定要执行的特定接受者及
10、其相应的方法。我们不仅将对象组织为类别,而且也将类别整理为从一般到特殊的层次结构。这将我们引入面向对象的第四个原则- 泛化。无多态的泛化可以用层次性继承结构来组织类。在该机构中,子类将从位于数结构高层的父类中继承属性,关系和方法,抽象的父类是指仅用来产生子类的超类。这样抽象类就没有直接实例。有多态的泛化可以使用层次继承结构组织类,子类可以继承位于树型结构的高层的父类的树型,关系和方法。然而,子类可以产生它自己的方法来代替其他任何超类的方法。面向对象程序设计的三大原则:1、封装封装是一种把代码和代码所操作的数据捆绑在一起,使这两者不受外界干扰和误用的机制。封装可被理解为一种用做保护的包装器,以防
11、止代码和数据被包装器外部所定义的其他代码任意访问。 对包装器内部代码与数据的访问通过一个明确定义的接口来控制。封装代码的好处是每个人都知道怎样访问代码,进而无需考虑实现细节就能直接使用它,同时不用担心不可预料的副作用。在 JAVA中,最基本的封装单元是类, 一个类定义着将由一组对象所共享的行为(数据和代码 ) 。一个类的每个对象均包含它所定义的结构与行为,这些对象就好象是一个模子铸造出来的。所以对象也叫做类的实例。在定义一个类时, 需要指定构成该类的代码与数据. 特别是 , 类所定义的对象叫做成员变量或实例变量。 操作数据的代码叫做成员方法。方法定义怎样使用成员变量,这意味着类的行为和接口要由
12、操作实例数据的方法来定义。由于类的用途是封装复杂性,所以类的内部有隐藏实现复杂性的机制。所以JAVA中提供了私有和公有的访问模式, 类的公有接口代表外部的用户应该知道或可以知道的每件东西。 私有的方法数据只能通过该类的成员代码来访问。这就可以确保不会发生不希望的事情。2、继承继承是指一个对象从另一个对象中获得属性的过程。是面向对象程序设计的三大原则之二,它支持按层次分类的概念,例如,波斯猫是猫的一种,猫又是哺乳动物的一种,哺乳动物又是动物的一种。如果不使用层次的概念,每个对象需要明确定义各自的全部特征。通过层次分类方式, 一个对象只需要在它的类中定义是它成为唯一的各个属性,然后从父类中继承它的
13、通用属性。因此, 正是由于继承机制,才使得一个对象可以成为一个通用类的一个特定实例。一个深度继承的子类将继承它在类层次中的每个祖先的所有属性。继承与封装可以互相作用。如果一个给定的类封装了某些属性,它的任何子类将会含有同样得属性, 另加各个子类所有得属性。这是面向对象程序在复杂性上呈线性而非几何增长的一个重要概念。 新的子类继承其所有祖先的所有属性。子类和系统中的其他代码不会产生无法预料的交互作用。3、多态多态是指一个方法只能有一个名称,但可以有许多形态,也就是程序中可以定义多个同名的方法,用“一个接口, 多个方法”来描述。可以通过方法的参数和类型引用。4、封装 , 继承,多态的组合使用在由封
14、装,继承, 多态所组成的环境中,程序员可以编写出比面向过程模型更健壮,更具扩展性的程序。 经过仔细设计的类层次结构是重用代码的基础。封装能让程序员不必修改公有接口的代码即可实现程序的移植。多态能使程序员开发出简洁, 易懂 , 易修改的代码。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 5 页 - - - - - - - - - 四、面向过程与面向对象的对比面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。面向对
15、象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。我认为“面向对象”是类的层次上进行的分析和设计,而“面向过程”是在系统的流程上的分析和设计例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1、开始游戏, 2、黑子先走, 3、绘制画面, 4、判断输赢, 5、轮到白子, 6、绘制画面, 7、判断输赢, 8、返回步骤2,9、输出最后结果。把上面每个步骤用分别的函数来实现,问题就解决了。而面向对象的设计则是从另外的思路来解决问题。整个五子棋可以分为 1 、黑白双方,这两方的行为是一模一样的,2、棋盘系统,负责绘制画面,3、规则
16、系统,负责判定诸如犯规、输赢等。第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化, 棋盘对象接收到了棋子的i 变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。可以明显地看出,面向对象是以功能来划分问题,而不是步骤。同样是绘制棋局,这样的行为在面向过程的设计中分散在了总多步骤中,很可能出现不同的绘制版本,因为通常设计人员会考虑到实际情况进行各种各样的简化。而面向对象的设计中,绘图只可能在棋盘对象中出现,从而保证了绘图的统一。功能上的统一保证了面向对象设计的可扩展性。比如我要加入悔棋的功能,如果要改动面向过程的设计, 那么从输
17、入到判断到显示这一连串的步骤都要改动,甚至步骤之间的循序都要进行大规模调整。如果是面向对象的话,只用改动棋盘对象就行了,棋盘系统保存了黑白双方的棋谱, 简单回溯就可以了,而显示和规则判断则不用顾及,同时整个对对象功能的调用顺序都没有变化,改动只是局部的。再比如我要把这个五子棋游戏改为围棋游戏,如果你是面向过程设计,那么五子棋的规则就分布在了你的程序的每一个角落,要改动还不如重写。但是如果你当初就是面向对象的设计, 那么你只用改动规则对象就可以了,五子棋和围棋的区别不就是规则吗?(当然棋盘大小好像也不一样, 但是你会觉得这是一个难题吗?直接在棋盘对象中进行一番小改动就可以了。 )而下棋的大致步骤
18、从面向对象的角度来看没有任何变化。小结面向对象,引入了类概念,数据和过程实行了封装,数据安全性提高了,可操作性也提高了。 整体上实现了模块化运行, 可靠性提高了。 构造大型系统时候,提高了劳动效率,但是机器运行效率却降低了c+比 c 的系统平均慢10% 左右。 不过要面向对象的结构设计好,很难。 面向对象和面向过程都挺重要的,混合起来较好。 纯的面向对象也不好,会把简单的事情搞得很复杂。 如果纯粹以面向对象的思维的话,那么会把自己局限在一个区域里的。关键是适用场合吧,比如在要求效率的场合,尽量不要用面向对象。参考:C+程序设计语言机械出版社 Stroustrup著C+ PRIMER 中文版中国
19、电力出版社 Lippman 著Object-Oriented Software Constructure机械工业出版社 Bertrand.Meyer著http:/ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 5 页 - - - - - - - - - http:/ http:/ - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 5 页 - - - - - - - - -