(A)-面向过程-面向对象(h)

上传人:豆浆 文档编号:50961826 上传时间:2018-08-11 格式:PPT 页数:39 大小:638KB
返回 下载 相关 举报
(A)-面向过程-面向对象(h)_第1页
第1页 / 共39页
(A)-面向过程-面向对象(h)_第2页
第2页 / 共39页
(A)-面向过程-面向对象(h)_第3页
第3页 / 共39页
(A)-面向过程-面向对象(h)_第4页
第4页 / 共39页
(A)-面向过程-面向对象(h)_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《(A)-面向过程-面向对象(h)》由会员分享,可在线阅读,更多相关《(A)-面向过程-面向对象(h)(39页珍藏版)》请在金锄头文库上搜索。

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

2、一个由低级到高级,由复杂到简单的过程。目前,主要有两种程序设计方法:面向过程程序设计面向对象程序设计使用传统程序设计语言(如:C、FORTRAN)进 行程序设计时,必须详细、准确地描述解题过程 。因 为程序设计工作主要围绕设计解题过程来进行,所以 传统的程序设计方法称为面向过程的程序设计。面向过程的程序设计对应于面向过程开发模式。1.1.1 面向过程程序设计初始化读入计算写出结束过程性系统1. 面向过程开发模式1)面向过程开发模式的概念:面向过程开发模式产生过程抽象。过程抽象的基础是把软件视为处理流,并把处理流定义成 由一系列步骤构成的算法。每一步骤都是带有预定输入和特定输出的一个过程,把这

3、些步骤串联在一起可产生贯通于整个程序的控制流,最终 产生一个具有静态结构的体系结构。S1 s2 s3 s4 s52) 面向过程开发模式的特点:过程性开发模式侧重构建解决问题的处理流。数据抽象(数据结构)根据算法步骤的要求开发, 它贯穿于过程,提供过程所要求操作的信息。系统的状态是一组全局变量,这组全局变量保存系 统的状态的值,把它们从一个过程传送到另一个过 程。算法设计数据抽象【 7.1.1 集合的实现与使用】 设有如下的要求:向整数集合的某一子集添加若干元素,从该 集合中删除某些元素,判断指定元素是否在该集合中。1分析与实现(1)数据声明:在程序中用整数数组set表示整数集合:集合 (数组)

4、最多含MAXLENGTH个元素,集合当前有count个元 素。数据定义如下: int setMAXLENGTH; unsigned count;(2)数据处理:程序中抽象出集合上的三个操作: 添加(Add) 删除(Remove) 判断(Isin) 接着设计每个操作的算法接着设计每个操作的算法-自顶向下、逐步求精自顶向下、逐步求精面向过程程序设计示例l3)面向过程设计程序的实例(1) void Add(int elem, int* pset, unsigned #define MAXLENGTH 100 void Add(int elem, int* pset, unsigned void Re

5、move(int elem, int* pset, unsigned int Isin(int elem, int* pset, unsigned count); int main() int setMAXLENGTH;/ 集合 unsigned count=0;/ 集合中当前元素个数 int element,choice;while (1) coutchoice;面向过程程序设计示例switch (choice) case 1:coutelement;Add(element, set, count); break;case 2:coutelement;Remove(element, set,

6、 count); break;case 3:coutelement;if(Isin(element, set, count)cout“元素“element“在集合中。“endl;elsecout“元素“element“不在集合中。“endl; if (choice=0) break; return 0; int Isin(int elem, int* pset, unsigned count) for(unsigned i=0; icount i+); return icount; void Add(int elem, int* pset, unsigned void Remove(int e

7、lem, int* pset, unsigned icount i+); if(icount)*(pset + i) = *(pset + (count-) - 1); elsecout“待删除元素“elem“不在集合中。“endl; 3讨论针对上面程序的实现,我们来讨论如下两个问题:(1)需求变化,程序改动是否容易?例如,若要将集合的数据表示改为用链表存储,可不要count,集合的三个函数的实现及它们的使用都得改动。也就是整个程序都得改动,修改不是局部化的。(2)能否重用?只能函数级重用,其它难以重用。问题根源:上面的程序将数据结构和数据使用混在一起,过分针对具体问题。实际上,通常需要被重用

8、的是集合,故应该把整数集合实现与使用分开,达做到修改局 部化和可重用。7.1.2 将集合的实现与使用分开整数集合的实现可以很容易地被重用,而且是模块级的重用。7.1.3 将集合用链表实现当将整数集合的实现从一维数组改写成链表时,应用程序 AppSet.cpp可以保持不变。不管如何改进,程序或多或少存在着一些问题,因为采用面向过程程序设计的模式 。面向过程程序设计示例主要问题1:是只能做到信息隐藏,而不能做到信息保护。例1、2、3,集合的使用者还是能够访问集合实现的数据表示,于是会有如下两种危险:(1)集合的使用者有意或无意地改写数据内容,比如在应用程序 AppSet.cpp直接改写s.coun

9、t的值,从而导致集合内容的破坏。(2)集合的使用者写出依赖集合实现的数据表示的代码,这样 一旦集合的实现方式改变,应用程序就会出问题。如例2应用程序中 有s.datai=5;,例3集合改用链表实现,应用程序就会出错。这个问题在面向过程的程序设计语言中不能解决,需要在语言 中增加新的信息保护机制。面向对象C+用类成员的存取权限限制来解决这样的问题。主要问题2:上述整数集合的实现中,整数集合的数据表示和函数是分开的。整数集合类型中并不包括集合上的操作,操作是全局函数 。这在概念上和实际使用中都有缺陷:(1)概念上,数据类型的数据和其上操作是密不可分的整体。离开数据,操作无从谈起。例如,有整数加法,

10、实数加法等,光谈加 法没有意义,因为不同类型的加法其实现是完全不同的。(2)使用上,不是用正确的数据调用了错误的函数,就是用错误的数据调用了正确的函数的事情时常发生。故应该将数据类型的数据和操作封装在一起。这在面向过程的程序设计语言中也是不能完全做到的。完满的解决要用面 向对象C+的类提供的封装机制。4) 面向过程开发模式的优缺点 优点:算法描述准确对每一子过程模块(函数)容易进行程序正确性证明缺点:编程复杂:主要设计算法,对于复杂应用,算法设计非常 复杂程序功能隐含在程序代码中,理解面向过程的程序相当困 难程序是静态结构的体系结构,系统维护困难程序代码可重用性差面向过程程序设计与计算机的工作

11、流程一致。模拟计算机 思维来解题(输入-运算-输出),程序设计工作主要围绕解 题过程的设计,不符合人类解决问题的习惯的思维方式。思维方式:“顾客-服务员”的工作模式(顾客发请求给服务员,服务员根据请求去完成顾客要求的服务)特点:“顾客-服务员”的工作模式不关心事件的处理流, 而是关心 “交流的对象,对象间如何交流”示例: 理发时“顾客与理发师”的交互食堂就餐时 “学生与食堂师傅”交互人类解决问题的习惯的思维方式面向对象程序设计方法模拟人类习惯的解题方法,用对对象分解象分解取代功能分解对象分解就是把程序分解成许多对象,不同对象之间通 过发消息向对方提出服务要求,接受消息的对象主动完成指 定功能(

12、顾客所要求的服务),程序中的所有对象分工协作,共同完成整个程序的功能。可以认为:面向对象的程序是由对象和对象间的相互作用构成的。面向对象的程序是对象的有机结合。1.1.2 面向对象程序设计1. 基本思想:面向对象程序设计的出发点和追求的基本目标,是使人们认识系统的方法与设计、实现这个系统的方法尽 可能接近,也就是使描述问题的问题空间和解决问题的 方法空间在结构上尽可能一致。从现实世界中客观存在的事物出发来建立软件系统。强调直接以问题域(现实世界)中的事物为中心来思考问题 、认识问题,并根据这些事物的本质特征,把它们抽象地表示 为系统中的对象,作为系统的基本构成单位。这样可以使系统 直接映射问题

13、域,保持问题域中事物及其相互关系的本来面貌 。充分运用人类日常的思维方法。强调运用人类在日常的逻辑思维中经常采用的思想方法与原 则,例如抽象、分类、继承、聚合、封装、关联等等。这使得 软件开发者能更有效地思考问题,并以其他人也能看得懂的方 式把自己的认识表达出来。基本思想分析:2.Coad & Yourdon给OO的定义:面向对象的方法学可以用下列方程来概括:OO=Objects + Classes + Inheritance + Communication With messages 分析:基于对象:仅使用对象和消息,没有继承 、多态。现在 的很多流行技术都是基于对象的,它们使用一些封装好

14、的对象,调用对象的方法,设置对象的属性。但是它们 无法让程序员派生新对象类型。他们只能使用现有对象 的方法和属性。如:VB6.0面向对象:只有同时使用对象、类、继承和消息,才是真正的面向 对象。如:C#、Java、C+、VB.NET(1)OO认为客观世界是由各种对象组成的,任何事物都 是对象,复杂的对象可以由比较简单的对象以某种方 式组合而成。面向对象的软件系统是由对象组成的, 软件中的任何元素都是对象,复杂的软件对象由比较 简单的对象组合而成。 (2)OO把所有对象都划分成各种对象类,每个对象类都定 义了一组数据和一组方法。类中定义的数据用于表示实例化对象的静态属性,用于描述特 定实例化对象

15、的状态信息。类中定义的方法,是允许施加于该类的实例化对象上的操作, 是该类所有对象共享的,并不需要为每个对象都复制操作的代 码。 l面向对象方法具有下述四个要点:(3)按照子类(或称为派生类)与父类(或称为基类)的关系,可以 把若干个对象类组成一个层次结构的系统(也称为类等级)。在这 种层次结构中,通常下层的派生类具有和上层的基类相同的特性( 包括数据和方法),这种现象称为继承(Inheritanceinheritns ) 。 (4)对象彼此之间仅能通过传递消息互相联系。面向对象的程序就是一组对象,对象之间通过消息交互,通知对 方要做些什么。向某个对象提出请求可以发一条消息给这个对象。具体讲,可以 将消息看作是请求调用对象的某个函数。 OO方法用类和对象作为系统的基本构成单位。对象对应问题域中的事物 ,其属性与服务刻画了事物的静态特征和动态特征。对象(类)之间的继承 关系、聚合关系、消息和关联如实地表达了问题域中事物之间实际存在的 各种关系。3. 面向对象方法的主要优点I.与人类习惯的思维方法比较一致;II.稳定性好;III.可重用性好;IV.可维护性好。1)与人类习惯的思维方法比较一致传统的程序设计技术是面向过程的设计方法,这种方法以算法为核心,把数据和过程作为相互独立的部分,数据代表问题空间中的实体,程序代码则用于处理这些数据 。忽略了数据和操作之间的内在联系,

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

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号