《面向对象程序设计》讲义1-5.ppt

上传人:本田雅阁 文档编号:2156253 上传时间:2019-02-23 格式:PPT 页数:62 大小:835.51KB
返回 下载 相关 举报
《面向对象程序设计》讲义1-5.ppt_第1页
第1页 / 共62页
《面向对象程序设计》讲义1-5.ppt_第2页
第2页 / 共62页
《面向对象程序设计》讲义1-5.ppt_第3页
第3页 / 共62页
亲,该文档总共62页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《《面向对象程序设计》讲义1-5.ppt》由会员分享,可在线阅读,更多相关《《面向对象程序设计》讲义1-5.ppt(62页珍藏版)》请在三一文库上搜索。

1、面向对象程序设计讲义,第1-5章,面向对象的理论 与C+实践 王燕 编著 清华大学出版社,第1章 绪 论,1.1 面向对象思想的由来,图1-1 现实世界与面向对象系统之间的对应关系,1.2 面向对象程序设计,1. 什么是结构化程序设计(Structure Programming) 2. 什么是面向对象程序设计(Object Oriented Programming-简称OOP) 面向对象程序设计能支持的软件开发策略: 编写可重用的代码 编写可维护的代码 共享代码 精化已有的代码,1.3 面向对象程序设计语言,1. LISP家族 2. Simula 3. Smalltalk 它是第一个真正的面向

2、对象程序语言,体现了纯 粹的OOP设计思想,是最纯的OOP语言。 4. C家族 MS-C+,Turbo C+,Borland C+和Visual C+ 等。,1.5 面向对象程序设计范型,程序设计范型: (1)过程式程序设计范型 (2)函数式程序设计范型 (3)面向约束程序设计范型 (4)面向对象程序设计范型 (5)进程式程序设计范型 (6)类型系统程序设计范型 (7)事件程序设计范型,1.4 面向对象方法在大型程序设 计中的应用,1.6 面向对象方法的思维科学基础,1.6.1 建立模型 抽象思维过程: 1. 知性思维阶段 2. 具体思维阶段,被模拟系统与模型间的关系: 1.6.2 抽象思维的

3、方法 1. 分类法 2. 综合法 3. 普遍化方法(归纳方法),第 2 章 面向对象的基本概念,2.1 对 象 2.1.2 对象的定义 对象是现实世界中的一个实体,它有如下特征: 1. 有一个名字以区别其它对象; 2. 有一个状态用来描述它的某些特征; 3. 有一组操作,每一个操作决定对象的一种功能或 行为; 4. 对象的操作分为两类:一类是自身所乘受的操作, 一类是施加于其他对象的操作。,2.1.2 对象的划分 2.1.3 对象的状态 在C+中用成员变量来存放一个对象的状态。 2.1.4 对象的特征 1. 模块的独立性 2. 动态连接性 3. 易维护性,2.2 消 息 2.2.1 消息及其性

4、质 1. 消息 消息是对象之间相互请求或相互协作的途经,是要求某个对象执行其中某个功能操作的规格的说明。 2. 消息的性质 同一对象可以接收不同形式的多个消息,产生不同的响应; 相同形式的消息可以送给不同对象,产生不同的响应; 消息的发送可以不考虑具体的接收者,对象可以响应消息,也可以不响应消息。,2.2.2 公有消息和私有消息 若有一批消息同属于一个对象,其中有一部分是由外界对象直接向它发送的,称之为公有消息; 还有一部分则是它自己向本身发送的,这些消息是不对外开放的,外界不必了解它,称之为私有消息。,例如在C+中有一个对象类的定义如下: class person private: char

5、 name20; int age; char add40; char sex10; void printName() void printage() ,void printadd() void printsex() public: void print() printName() printage() printadd() printsex() ,2.2.3 特定于对象的消息 将所有能支持此对象可接受消息的函数集中在一起,形成一个大消息。 消息的类型 可以返回对象的内部状态的消息; 可以改变对象的内部状态的消息; 可以做一些特定的操作,改变系统状态的消息;,2.2.4 消息序列 class p

6、erson char Name20; int Age; char Major20; char Goodat20; public: void print()coutName AgeMajor Goodat; void printName()coutName; void printAge()cout Age;,void printMajor()coutMajor; void printGoodat()coutGoodat; ; void f1(person P) P.printName(); P.printAge(); P.printMajor(); P.printGoodat(); ,2.3 类

7、 2.3.1 类的定义 它是对一组客观对象的抽象,它将该组对象所具有的共同点特征(包括结构特征和行为特征)集中起来,以说明该组对象的能力和性质。 2.3.2 类与实例的关系 类是多个实例的综合抽象,实例是类的个体实物。 同类不同实例应有如下特点: 相同的操作集合; 相同的属性集合; 不同的对象名。,2.3.3 类的确定与描述 1. 确定方法:归纳法 2. 描述: 例如:用C+语言对马类的描述: class horse int color; /结构特征 char *sort; /结构特征 public: void move(); /行为特征 void shift(); /行为特征 ;,第 3 章

8、 面向对象系统的特性,面向对象系统的主要特性: 1. 封装性; 2. 继承性; 3.多态性。 3.1 封 装 性 3.1.1 什么是封装 封装是指将一个数据和与这个数据有关的操作集合放在一起,形成一个能动的实体对象,用户不必知道对象行为的实现细节,只需根据对象提供的外部特性接口访问对象即可。,封装应具备的条件: 1. 具有一个清楚的边界,对象的所有私有数据、内部程序(成员函数)细节都被固定在这个边界内。 2. 具有一个接口,这个接口描述了对象之间的相互作用,请求和响应,它就是消息。 3. 对象内部的实现代码受到封装壳的保护,其它对象不能直接修改本对象所拥有的数据和代码。,3.1.2 什么是协议

9、 协议是一个对象对外服务的说明,它声明这个对象可以为外界做什么。 协议实际上是一个对象所能接受的所有公有消息的集合。 例如:用C+语言定义的对象类 class student private: char *name; int mark; char *major;,void changemark(); protected: int getmark(); public: char *getname(); char *getmajor(); ; 3.1.3 面向对象系统的封装性 面向对象系统中的封装单位为对象。,3.2 继 承 性 3.2.1 继承的引入 若类间具有继承关系,则它们之间应具有如下特性

10、: 类间具有共享特征(包括数据和程序代码的共享) 类间具有细微的差别或新增部分(包括非共享的程 序代码和数据); 类间具有层次结构。,继承的作用: a. 减少代码冗余; b. 通过协调性来减少相互之间的接口和界面。 3.2.2 继承的分类 1. 从继承源上划分 (1). 单继承。 (2). 多继承。 2. 从继承内容上划分 (1). 取代继承。 (2). 包含继承。 (3). 受限继承。 (4). 特化继承。,3.2.3 继承与封装的关系 3.2.4 继承与委托的关系 1. 委托: 2. 继承与委托的相同点:具有节省代码的作用。 3. 继承与委托的不同点:继承是静态关系;委托是 一种既可以静态

11、定义(如:类对象作为成员)也可以动态定义(如:类对象参数)的更复杂的关系。 3.2.5 类的层次,3.2.6 单继承与多继承,3.2.7 面向对象系统的继承性 引入继承机制的优点: (1)能清晰体现相关类间的层次结构关系。 (2)能减小代码和数据的重复冗余度,大大增加程序的重用性。 (3)能通过增强一致性来减少模块间的接口和界面,大大增加程序的易维护性。 (4)继承是自动传播代码的有力工具。 (5)继承是在一些比较一般的类的基础上构造、建立和扩充新类的最有效的手段。,派生类对基类成员的访问权限: 可访问:保护段(protected)和公有段(public)中的成员。 不能访问:私有段(priv

12、ate)中的成员。,3.3 多 态 性 3.3.1 重载的概念 重载:相同名字的函数或运算符在不同的场合可 以表现出不同的行为。 3.3.2 虚函数的概念 1. 定义方法: 在基类的函数声明前加上关键字virtual。 2. 注意事项:在虚函数的各个版本中,其返回值、函数参数的个数和类型必须一致。,3.3.3 抽象类的概念 1. 定义方法:在类中定义纯虚函数。 2. 注意事项:抽象类不能创建具体对象。 例如: class shape int x,y; / puclic: void move(int.int); virtual void rotate(int)=0; /定义纯虚函数,virtua

13、l void draw(); /定义虚函数 ; class ab_circle:public shape int radius; void rotate(int); void draw(); ;,3.3.4 面向对象系统的多态性 多态性:当不同的对象收到相同的消息时产生不 同的动作。 1. 编译时的多态性:通过重载的方法实现。 2. 运行时的多态性:通过虚函数来实现。,第 4 章 面向对象分析,4.1 概 念 模 型 4.1.1 为什么要建立概念模型 设计大型信息系统会遇到的问题: 开发人员对所设计的系统的应用领域缺乏了解; 不同的专业人员对所描述的概念的理解不一致; 在系统分析阶段开发人员将

14、面临大量繁杂的信息, 这些信息管理得不好,将导致混乱; 需求分析的结果无法确定; 开发人员操之过急地进入实现阶段。,4.1.2 概念间的关系 概念是对实体属性的抽象和概括。 概念间静态联系的三种形式: (1)属性关系 :即一个实体概念是另一个实体 概念的属性。 (2)层次关系:即一个实体概念是另一个实体概念的上位概念。 (3)并列关系:有两个实体概念都是同一实体概念的下位概念,但这两个实体概念的外延不相交。,4.1.3 信息系统的概念模型 所谓概念模型,就是用户和系统开发人员对系统所涉及到的客观事物及其关系的理解,表现为一组相关的概念。 概念模型的作用: (1)作为一个公共的参考框架,在系统分

15、析阶段用以进行用户的开发人员之间的交流。 (2)帮助开发人员理解应用领域和用户需求。 (3)作为数据模型的设计依据,也可用于检验设计和评价系统设计。 (4)作为文档资料的一部分,在维护阶段有利于系系统的修改和扩充。 (5)帮助用户从整体上理解和认识信息系统。,4.2 用面向对象方法建立概念模型 4 .2.1 识别对象和类 现时世界存在的事物分为五大类: (1)有形物。 (2)人或组织机构所扮演的角色。 (3)事件。 (4)交互。 (5)规范。,按面向对象的观点,可归纳为三类: (1)客观存在物(包括有形对象和角色对象)。 (2)行为(包括事件对象和交互对象)。 (3)概念。 在识别对象时,最首

16、要的问题是找出信息系统所要取代的人的那一部分活动,以这些活动为线索,去识别活动中所使用的工具和操作对象;对识别出的对象和类,分析它们的结构和行为,从而找出与它们相关联的对象和类,最终识别出所有的对象以及它们的结构和行为。,4.2.2 对象间的通讯 在面向对象系统中,一条消息的实现就是一个函数调用,向一个对象发送消息就是调用这个对象成员函数的一种方法。消息本身与这个对象的操作名(成员函数名)是相同的,并且消息总能提供函数所需的参数。调用某个对象的某种操作的唯一途径就是发送消息。,4.2.3 对象关系图示 类图 使用对象关系图的几点好处: 发现设计中的错误,特别是那些有关对象间关系的错误; 作为实

17、际应用编码的依据。 用于系统出问题时的调试与检错。 1. 类的层次结构,Object:公共基类,2. 对象间的创建关系 对象之间的创建关系是委托关系的一种具体实现,即一个对象在它的成员函数中创建另一个关系对象,而后再委托它进行部分工作,最后完成自己的工作。,3. 对象间的聚合关系 对象之间的聚合关系是指一个对象是由若干个其它对象组合而成的,是一种包容关系,而这种包容关系是直接的,对象的创建不需要通过一个中间方法来实现。当这个对象被创建以后,组成它的各个对象将自动被创建。,4. 对象间的消息流图 内向消息图和外向消息图 内向消息图描述一个对象如何从其它对象接收消息。 外向消息图描述一个特定对象发

18、送给其它的所有消息。,4.2.4 类描述语言 1. class 用于定义类,格式为 class: 类名类描述子句 2. superclass 它是一个类描述子句,用来说明一个上位类(直接基类),格式为: superclass: 上位类表; 3. attribute 它是一个类描述子句,用以说明类的属性,即类所包含的数据成员,格式为: attribute:属性定义;,4. method 用来描述类的方法,即类的行为特性,格式为: method: 方法名消息表; 5. request 表达在一个类的方法中向其它类发出的消息,其格式为: request 请求消息表;,请求消息的格式为:目标类.方法名

19、(参数表) 举例:有一个系统具有四个对象类 (1)address类 属性:city, street, zip 方法:putaddress (2)person类 属性:name, age, sex, address 方法:put, get (3)student类:person类的派生类 自身属性:major, grade, course 方 法:putgrad, putgeneral, getgeneral,(4)teacher 类:person的派生类 自身属性:major, subject, salary 方 法:putinfo, getinfo 用类描述语言CDL对该系统描述如下: cla

20、ss:addrass attribute:city; attribute:street; attribute:zip; method:putaddress; method:getadress ,class:person attribute:name; attribute: age; attribute:sex; attribute:address; method:putrequest address.putaddress; method:getrequest address.getaddress; ,class:student superclass:person; attribute:majo

21、r; attribute:grade; attribute:course; method:putgrade; method:putgeneral; method:getgeneral; ,class:teacher superclass:person; attribute:major; attribute:subject; attribute:salary; method:putinfo; method:getinfo; ,5.1 面向对象设计软件生命周期,第 5 章 面向对象设计技术,(1)分析阶段 把分析看作是从问题域中选出词汇建立类和对象的模型世界。 (2)设计阶段 设计是对问题域的行为

22、进行关键抽象再分解的过程。设计的结果反馈到分析上进行修正,当关键抽象足够简单不需要再分解时即可停止设计。 (3)演化阶段 由编码、测试和集成组合在一起的阶段。,(4)维护阶段 系统提交运行之后的变更活动。 5.1.1 需求分析阶段 1. 定义问题边界 2. 问题域的关键抽象 (1)供应商的信息 supplier ID /供应商号 supplier name /供应商姓名 supplier address /供应商地址 supplier telephone /供应商电话,(2)工程项目信息 project ID /项目号 start date /开工日期 project budget /工程预算

23、 (3)零件信息 part ID /零件号 part name /零件名 part specifications /零件规格,(4)仓库信息 warehouse ID /仓库号 warehouse telephone /仓库电话 warehouse address /仓库位置 (5)雇员信息 Employee ID /雇员号 Employee name /雇员姓名 Employee address /雇员地址 Employee telephone /雇员电话,3. 类的抽象 (1) 集合类 collection (2) 人员类 person (3) 地址类 address (4) 供应商类 s

24、upplier (5) 雇员类 employee (6) 工程项目类 project (7) 零件类 part (8) 仓库类 warehouse (9) 综合类 relation,5.1.2 设计阶段 1. 定义类层次结构,2. 定义对象之间的各种关系 3. 用类描述语言CDL描述系统,5.1.3 演化阶段 衡量问题域中最基本的设计是否完成,主要把握三点: 问题域已经明确定义; 最基本的问题关键已经把握; 最基本的问题关键的解决方法已经找到,它的设计可以预见系统的实现。 5.1.4 维护阶段,5.2 面向对象设计的方法 面向对象设计方法 (1) 发现对象 (2) 发现对象之间的关系(主要是委托关系和继承关系) (3) 发现类,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1