面向过程面向对象课件.ppt

上传人:石*** 文档编号:87211287 上传时间:2023-04-16 格式:PPT 页数:42 大小:963KB
返回 下载 相关 举报
面向过程面向对象课件.ppt_第1页
第1页 / 共42页
面向过程面向对象课件.ppt_第2页
第2页 / 共42页
点击查看更多>>
资源描述

《面向过程面向对象课件.ppt》由会员分享,可在线阅读,更多相关《面向过程面向对象课件.ppt(42页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、关于面向过程面向对象第1页,此课件共42页哦主要内容程序设计方法 结构化程序设计方法与面向对象程序设计方法各自特点、区别和相互联系面向对象的基本概念类、对象、封装、消息、继承、多态面向对象分析与设计(OOA、OOD)面向对象程序设计和C+语言第一章 从过程抽象到数据抽象第2页,此课件共42页哦第一章 从过程抽象到数据抽象1.1 从:面向过程的程序设计从:面向过程的程序设计 到:面向对象的程序设计到:面向对象的程序设计第3页,此课件共42页哦程序设计方法的发展程序设计=算法+数据结构+程序设计方法+语言工具和环境随着计算机软、硬件技术的不断发展,出现了许许多多的程序设计语言,程序设计方法也得到不

2、断发展。程序设计方法经历了一个由低级到高级,由复杂到简单的过程。目前,主要有两种程序设计方法:面向过程程序设计面向对象程序设计第4页,此课件共42页哦 使用传统程序设计语言(如:C、FORTRAN)进行程序设计时,必须详细、准确地描述解题过程。因为程序设计工作主要围绕程序设计工作主要围绕设计解题过程设计解题过程来进行的来进行的,所以传统的程序设计方法称为面向过程的程序设计。1.1.1 面向过程程序设计第5页,此课件共42页哦1.面向过程程序设计开发思想采用自顶向下、分而治之的方法进行模块分解与功能抽象,从而有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的函数(在此泛指例程、函数、

3、过程),解决问题的焦点集中于函数,便于开发和维护。函数是面向过程的,即它关注如何根据规定的条件完成指定的任务。结构化程序使用三种结构:顺序结构、分支结构和循环结构。第6页,此课件共42页哦2)面向过程程序设计的特点面向过程的开发侧重于构建解决问题的处理流:1)自顶向下,逐步求精。将较复杂任务分解为简单任务。2)模块化。根据任务需完成的功能,将应用程序划分为相对独立的若干模块。模块之间关系简单、相对独立。数据结构根据处理流的要求开发。数据结构贯穿于算法过程,提供算法过程所要求操作的信息。数据结构的设计就是选择数据存储方式(如确定问题中的信息是用数组存储还是用普通的变量存储或其他更加复杂的数据结构

4、)。算法设计就是在选定的存储结构上设计一个好的算法。不同的数据结构的设计将导致差异很大的算法。系统的状态是一组全局变量。这组全局变量保存系统的状态值,把状态值从一个过程传送到另一个过程。功能抽象数据抽象数据抽象模块分解第7页,此课件共42页哦【7.1.1 集合的实现与使用集合的实现与使用】设有如下的要求:向整数集合的某一子集添加若干元素,从该集合中删除某些元素,判断指定元素是否在该集合中。1.功能抽象,模块分解:自顶向下,逐步求精构建解决问题的处理流整数集合操作-(集合的建立-集合的处理-集合的输出)集合的处理-(添加元素,删除元素,搜索元素)添加元素-(添加新元素elem到集合pset。若元

5、素elem不在集合pset中,elem加到pset尾部,集合的元素个数count加1;否则,元素elem已在pset中。).2.数据结构设计:根据处理流的要求开发在程序中用整数数组set表示整数集合:集合(数组)最多含MAXLENGTH个元素,集合当前有count个元素。数据定义如下:int setMAXLENGTH;unsigned count;3)面向过程设计程序的实例第8页,此课件共42页哦3.算法设计:在选定的存储结构上对每一个模块设计一个好的算法。好算法的标准:正确性;可读性;健壮性:当输入非法数据时,算法应做出适当反映或处理;执行算法所耗费的时间(时间复杂度)好;执行算法所耗费的存

6、储空间(空间复杂度)好。描述算法的方法有很多:流程图自然语言伪码描述4.程序设计:用选定的程序设计语言将算法进行代码化。第9页,此课件共42页哦(1)void Add(int elem,int*pset,unsigned&count)这个函数的功能是:添加新元素elem到集合pset。若元素elem不在集合pset中,elem加到pset尾部,集合的元素个数count加1;否则,元素elem已在pset中,结束。函数定义如下:void Add(int elem,int*pset,unsigned&count)if(countMAXLENGTH)if(!Isin(elem,pset,count)

7、*(pset+(count)+)=elem;第10页,此课件共42页哦(2)Remove(int elem,int*pset,unsigned&count)这个函数的功能是:从集合pset中删除元素elem。若元素elem在集合pset中且位于pseti,则将pset中最后一个元素psetcount-1替换pseti,集合的元素个数count减1;否则,给出元素不在集合中的提示信息。函数定义如下:void Remove(int elem,int*pset,unsigned&count)for(unsigned i=0;icount&*(pset+i)!=elem;i+);if(icount)*

8、(pset+i)=*(pset+(count-)-1);/集合无顺序,最后一 个移到删除之处elsecout待删除元素elem不在集合中。endl;第11页,此课件共42页哦(3)Isin(int elem,int*pset,unsigned count)这个函数的功能是:判断元素elem是否在集合pset中。从头至尾检查集合pset中的元素,若有元素elem,返回1;否则,返回0。函数定义如下:int Isin(int elem,int*pset,unsigned count)for(unsigned i=0;icount&*(pset+i)!=elem;i+);return(icount)

9、;第12页,此课件共42页哦2完整的源程序#include using namespace std;#define MAXLENGTH 100void Add(int elem,int*pset,unsigned&count);void Remove(int elem,int*pset,unsigned&count);int Isin(int elem,int*pset,unsigned count);int main()int setMAXLENGTH;/集合 unsigned count=0;/集合中当前元素个数 int element,choice;while(1)cout 操作选择:e

10、ndl;cout1-添加元素 endl;cout2-删除元素 endl;cout3-判断元素 endl;cout0-退出 endl;coutchoice;第13页,此课件共42页哦switch(choice)case 1:coutelement;Add(element,set,count);break;case 2:coutelement;Remove(element,set,count);break;case 3:coutelement;if(Isin(element,set,count)cout元素element在集合中。endl;else cout元素element不在集合中。endl;

11、if(choice=0)break;return 0;第14页,此课件共42页哦int Isin(int elem,int*pset,unsigned count)for(unsigned i=0;icount&*(pset+i)!=elem;i+);return icount;void Add(int elem,int*pset,unsigned&count)if(countMAXLENGTH)if(!Isin(elem,pset,count)*(pset+(count)+)=elem;void Remove(int elem,int*pset,unsigned&count)for(unsi

12、gned i=0;icount&*(pset+i)!=elem;i+);if(icount)*(pset+i)=*(pset+(count-)-1);else cout待删除元素elem不在集合中。endl;第15页,此课件共42页哦针对上面程序的实现,讨论如下两个问题:(1)需求变化,程序改动是否容易?例如,若要将集合的数据表示改为用链表存储:不要不要count,集合的三个函数的实现及它们的使用都得改动。也就是整个程序都得改动,修改不是局部化的。问题根源:数据结构贯穿于整个算法过程。(2)集合和代码能否重用?只能重用函数,其它的难以重用。问题根源:具体的整数集合实现(数据结构)和集合的使用(

13、数据管理)混在一起。实际上,通常需要被重用的是集合,故应该把集合的实现与集合的使用分开,达做到修改局部化和可重用。改进方案:7.1.2 将集合的实现与使用分开将集合的实现与使用分开整数集合的实现可以很容易地被重用,而且是模块级的重用。整数集合的实现可以很容易地被重用,而且是模块级的重用。7.1.3 将集合用链表实现将集合用链表实现当将整数集合的实现从一维数组改写成链表时,应用程序当将整数集合的实现从一维数组改写成链表时,应用程序AppSet.cpp可以保持不变。可以保持不变。面向过程程序设计讨论面向过程程序设计讨论第16页,此课件共42页哦不管如何改进,程序或多或少存在着一些问题:不管如何改进

14、,程序或多或少存在着一些问题:主要问题主要问题1:是只能做到信息隐藏,而不能做到信息保护。例1、2、3,集合的使用者还是能够访问集合实现的数据表示,于是会有如下两种危险:(1)集合的使用者有意或无意地改写数据内容,比如在应用程序AppSet.cpp直接改写s.count的值,从而导致集合内容的破坏。(2)集合的使用者写出的代码 依赖集合实现的数据表示,这样一旦集合的实现方式改变,应用程序就会出问题。如例2应用程序中有s.datai=5;,例3集合改用链表实现,应用程序就会出错。这个问题在面向过程的程序设计语言中不能解决,需要在语言中增加新的信息保护机制。面向对象用类成员的存取权限限制来解决这样

15、的问题。第17页,此课件共42页哦主要问题主要问题2:上述整数集合的实现中,整数集合的数据表示和操作函数是分开的(非统一体)。整数集合类型中并不包括集合上的操作,操作是全局函数。这在概念上和实际使用中都有缺陷:(1)概念上,数据类型的数据和其上操作是密不可分的整体。离开数据,操作无从谈起。例如,有整数加法,实数加法等,光谈加法没有意义,因为不同类型的加法其实现是完全不同的。(2)实际使用上,因为数据表示和操作函数独立,故时常发生这样的错误:用正确的数据调用了错误的函数,或用错误的数据调用了正确的函数。解决办法:应该将数据类型的数据和操作封装在一起作为一个统一体。-这在面向过程的程序设计语言中是

16、不能完全做到的。圆满的解决要用面向对象的类提供的封装机制。第18页,此课件共42页哦4)面向过程开发模式的优缺点优点:算法描述准确对每一子过程模块(函数)容易进行程序正确性证明缺点:编程复杂:主要设计算法,对于复杂应用,算法设计非常复杂程序功能隐含在程序代码中,理解面向过程的程序相当困难程序是静态结构的体系结构,系统维护困难程序代码可重用性差面向过程程序设计与计算机的工作流程一致。模拟计算机思维来解题(输入-运算-输出),程序设计工作主要围绕解题过程的设计,不符合人类解决问题的习惯的思维方式。第19页,此课件共42页哦饭店订餐客人向服务员提出菜单服务员接待客人,并把菜单送给厨师厨师只管烹炒客人

17、要的美食采购员只管按客人需求采购原料服务员、厨师、采购员各负其责共同协作为客人提供美食顾客服务员厨师采购员饭饭店店人类解决问题的习惯的思维方式人类解决问题的习惯的思维方式第20页,此课件共42页哦“顾客-服务员”的工作模式:顾客发请求给服务员,服务员根据顾客请求去完成顾客要求的服务特点:“顾客-服务员”的工作模式不关心事件的处理流,而是关心“交流的对象,及对象间如何交流”人类解决问题的习惯的思维方式人类解决问题的习惯的思维方式“顾客顾客-服务员服务员”的工作模式的工作模式第21页,此课件共42页哦 面向对象程序设计方法模拟人类习惯的解题方法,用对象分对象分解解取代功能分解(将一个较复杂的程序系

18、统设计任务分解成许多易于控制和处理的函数)对象分解就是:(1)把程序分解成许多对象(2)不同对象之间通过发消息向对方提出服务要求,接受消息的对象主动完成指定功能(顾客所要求的服务)。程序中的所有对象分工协作,共同完成整个程序的功能。可以认为:面向对象的程序是由对象和对象间的相互作用构成的。面向对象的程序是对象的有机结合。第22页,此课件共42页哦1.1.2 面向对象程序设计1.基本思想:面向对象程序设计的出发点和追求的基本目标,是使人们认识系统的方法与设计、实现这个系统的方法尽可能接近,也就是使描述问题的问题空间和解决问题的方法空间在结构上尽可能一致。第23页,此课件共42页哦OO从现实世界中

19、客观存在的事物出发来建立软件系统。强调直接以问题域(现实世界)中的事物为中心来思考问题、认识问题,并根据这些事物的本质特征,把它们抽象地表示为系统中的对象,作为系统的基本构成单位。这样可以使系统直接映射问题域,保持问题域中事物及其相互关系的本来面貌。OO充分运用人类日常的思维方法。强调运用人类在日常的逻辑思维中经常采用的思想方法与原则,例如抽象、分类、继承、聚合、封装、关联等等。这使得软件开发者能更有效地思考问题,并以其他人也能看得懂的方式把自己的认识表达出来。基本思想分析:第24页,此课件共42页哦2.Coad&Yourdon给OO的定义:面向对象的方法学可以用下列方程来概括:OO=Obje

20、cts+Classes+Inheritance+Communication With messages分析分析:面向对象:只有同时使用对象、类、继承和消息,才是真正的面向对象。如:C+、Java、C#、VB.NET基于对象:仅使用对象和消息,没有继承、多态。现在的很多流行技术都是基于对象的,它们使用一些封装好的对象,调用对象的方法,设置对象的属性。但是它们无法让程序员派生新对象类型。他们只能使用现有对象的方法和属性。如:VB6.0第25页,此课件共42页哦 (1)OO认为客观世界是由各种对象组成的,任何事物都是对象,复杂的对象可以由比较简单的对象以某种方式组合而成。面向对象的软件系统是由对象组

21、成的,软件中的任何元素都是对象,复杂的软件对象由比较简单的对象组合而成。(2)OO把所有对象都划分成各种对象类,每个对象类都定义了一组数据和一组方法。类中定义的数据用于表示实例化对象的静态属性,用于描述特定实例化对象的状态信息。类中定义的方法,是允许施加于该类的实例化对象上的操作,是该类所有对象共享的,并不需要为每个对象都复制操作的代码。面向对象方法具有下述四个要点:第26页,此课件共42页哦(3)按照子类(或称为派生类)与父类(或称为基类)的关系,可以把若干个对象类组成一个层次结构的系统(也称为类等级)。在这种层次结构中,通常下层的派生类具有和上层的基类相同的特性(包括数据和方法),这种现象

22、称为继承(Inheritance inheritns)。(4)对象彼此之间仅能通过传递消息互相联系。面向对象的程序就是一组对象,对象之间仅通过消息交互,通知对方要做些什么。向某个对象提出请求可以发一条消息给这个对象。具体讲,可以将消息看作是请求调用对象的某个函数。OO方法用类和对象作为系统的基本构成单位。对象对应问题域中的事物,其属性与服务刻画了事物的静态特征和动态特征。对象(类)之间的继承关系、聚合关系、消息和关联如实地表达了问题域中事物之间实际存在的各种关系。第27页,此课件共42页哦3.面向对象方法的主要优点I.分析、设计、实现的方法和与人类习惯的思维方法比较一致;II.系统稳定性好;I

23、II.系统可重用性好;IV.系统可维护性好。第28页,此课件共42页哦(1)与人类习惯的思维方法比较一致 传统的程序设计技术是面向过程的设计方法,这种方法以算法为核心,把数据和过程作为相互独立的部分,数据代表问题空间中的实体,程序代码则用于处理这些数据。忽略了数据和操作之间的内在联系,用这种方法所设计出来的软件系统其解空间与问题空间并不一致(因为是彼此独立的),令人感到难于理解。面向对象的软件技术以对象(Object)为核心,用这种技术开发出的软件系统由对象组成。对象是对现实世界实体的正确抽象。对象之间通过传递消息互相联系,以模拟现实世界中不同事物彼此之间的联系。第29页,此课件共42页哦(2

24、)系统稳定性好 传统的软件开发方法:软件系统的结构紧密依赖于系统所要完成的功能,当功能需求发生变化时将引起软件结构的整体修改。面向对象方法:当对系统的功能需求变化时并不会引起软件结构的整体变化,往往仅需要作一些局部性的修改。第30页,此课件共42页哦(3)可重用性好 传统的软件重用技术是利用标准函数库。面向对象有更好的方法重用:一种方法是可以创建该类的多个实例,从而直接使用它。另一种方法是从它派生出一个满足当前需要的新类。继承性机制使得子类不仅可以重用其父类的数据结构和程序代码,而且可以在父类代码的基础上方便地修改和扩充,这种修改并不影响对原有类的使用。第31页,此课件共42页哦(4)可维护性

25、好(包括对软件功能的:增加、修改、删除等)用传统的面向过程语言开发出来的软件很难维护,是软件危机的突出表现。用面向对象方法所开发的软件可维护性较好:(1)面向对象软件稳定性比较好。(2)面向对象的软件比较容易修改。(3)面向对象的软件比较容易理解。(4)易于测试和调试。第32页,此课件共42页哦3)面向对象方法的由来和发展OO方法是从面向对象的程序设计语言发展演变而来的 第33页,此课件共42页哦面向对象的程序设计语言发展最早的OOPL:1960s,Simula67,最早引入了类和继承的概念,被认为是面向对象语言的先驱。最纯粹的OOPL:1970s,Smalltalk,继Smalltalk72

26、之后,经过不断改进,1981年推出了商用的Smalltalk80。它已经具备了面向对象语言的特征:对象、类、继承、多态性、元类等,这标志着面向对象程序设计语言已经发展成熟。至今,Smalltalk仍被认为是面向对象理念最纯粹的实现推动OOPL发展的基于对象的语言:其他许多基于对象的语言对面向对象程序设计语言的形成和发展也起到了积极的作用,如Lisp、Object Pascal、CLU、Modula-2和Ada83等等。第34页,此课件共42页哦加入OO概念形成的混合型语言:在已有过程程序设计语言的基础上加入OO概念形成的语言,如Objective-C和C+。混合型语言是在传统的过程式语言基础上

27、增加OO语言成分,在实用性方面具有更大的优势。第35页,此课件共42页哦目前流行OOPL及开发平台:C+:C+对面向对象技术的发展起了很重要的作用,它的流行促进了面向对象技术的普及,使之被广为接受。Java.Java是印度尼西亚爪哇岛的英文名称,因盛产咖啡而闻名。实现跨平台、动态的Web、Internet计算。【Borland J Builder,Eclipse】C#.C#根植于C和C+语言之上。C#的目的就是综合Visual Basic(简称VB)的高生产率和C+的行动力。【Visual Studio.NET】Visual Basic.NET:【Visual Studio.NET】Delph

28、i:Delphi其实是一个Object Pascal编译器。【Borland Delphi】第36页,此课件共42页哦OO不单纯是一种技术,更是一种理念,一种方法学.OO首先出现在编程领域,目前OO思想已经广泛应用于计算机的各个领域:Software Technology:OOA&D&P&TOODB:eg.oracleOS 设计:eg.windows NT面向对象方法的出现和应用第37页,此课件共42页哦面向机器面向代数面向过程面向数据面向人面向文件面向信息面向应用面向功能面向数据流 面向对象是面向对象是软件方法学软件方法学的的返朴归真返朴归真软件科学的发展历程中出软件科学的发展历程中出现过许

29、多现过许多“面向面向”软件开发从过分专业化的方法、规则和技巧中回到了客观世界,回到了人们的日常思维,是软件理论的返朴归真。面向面向对象对象第38页,此课件共42页哦4)OOPL的局限OO不是任何领域的灵丹妙药(1)效率和规模不是最优(2)重用难于在程序员中推广(3)OOPL支持持久性对象不好第39页,此课件共42页哦本节小 结1.面向过程程序设计基本思想、基本方法和优点;2.面向对象程序设计基本思想、基本方法和优点;第40页,此课件共42页哦补充作业:1.为什么说面向对象方法与人类习惯的思维方法比较一致?2.试比较面向过程的程序设计方法和面向对象程序设计方法的不同。3.面向对象方法的定义是什么?其要点有那些?其特点是什么?4.简述面向对象程序设计语言的发展与分类。第41页,此课件共42页哦2023/4/11感感谢谢大大家家观观看看第42页,此课件共42页哦

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com