引言--面向对象程序设计概述_第1页
引言--面向对象程序设计概述_第2页
引言--面向对象程序设计概述_第3页
引言--面向对象程序设计概述_第4页
引言--面向对象程序设计概述_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、面向对象面向对象C+程序设计程序设计徐徐 建建南京理工大学计算机学院南京理工大学计算机学院主要内容n面向对象程序设计概述n类和对象n构造函数与析构函数n继承和派生类n类的其他特性n运算符重载n输入输出流课时安排n理论学习40学时上机实验8学时n课外上机实验8学时面向对象程序设计概述面向对象程序设计概述n面向对象和面向对象程序设计n面向对象程序设计的基本概念n面向对象软件的重要特性一、面向对象和面向对象程序设计一、面向对象和面向对象程序设计n什麽是面向对象对象对象(object) 任何可以被感觉到的事物。面向面向(oriented) 直接面对,以对象为中心。面向对象面向对象(Object Ori

2、ented) 直接面对你能感觉到的任何事物。面向对象编程面向对象编程(Object Oriented Programming)直接面对软件所要模拟的客观世界中的事物,将它们直接映射到软件系统的解空间中,成为组成软件的对象。面向对象面向对象VS.面向过程程序设计面向过程程序设计n面向过程程序设计例如,一个学校管理软件中可以包含如下的数据结构和操作:typedef struct studenttypedef struct teacherchar name10; char name10;long num; double salary;int age; int age;char sex; char s

3、ex; student; teacher;void enroll(student* ptr) void raise(teacher* ptr).ptr-num+;ptr-salary += 100;void print(student* ptr) void print(teacher* ptr).main().student Zhang;/ 定义学生数据模块teacher Li;/ 定义教师数据模块enroll(&Zhang);/ 操作与被操作数据匹配enroll(&Li);/ 操作与被操作数据失配print(&Zhang);/ 操作与被操作数据匹配.n面向对象程序设计

4、面向对象程序设计(Object Oriented Programming)吸取结构化程序设计的一切优点,又考虑了所模拟的现实世界与程序解空间的直接映射关系;采用数据抽象和信息隐藏技术使得数据和(施加于数据的)操作成为不可分割的整体;程序由类定义、类实例(对象)和对象之间的动态联系组成;程序的重用性好、易于维护和扩展较好地解决了软件复杂性控制和生产率的提高。面向对象面向对象VS.面向过程程序设计面向过程程序设计用面向对象的设计方法实现前例的功能:class student/ 类定义/ 属性char name10;long num;int age;char sex; / 方法public: voi

5、d enroll() . ; friend ostream& operator(ostream& out, student stud) . ;.;class teacher/ 类定义/ 属性char name10;double salary;int age;char sex; / 方法public: void raise() . ; friend ostream& operator(ostream& out, teacher teach) . ;.;main(). / 类实例 对象student Zhang;teacher Li;/ 对象方法调用Zhang.en

6、roll();Li.raise();cout Zhang;cout Li;.面向对象程序设计的方法p建立模型模型是对事物特征和变化规律的一种抽象,是对客体认识的深化。被模拟的系统:感性具体针对问题的概念抽象模拟系统:实体(对象)映射映射建模实现的概念(类)抽象思维抽象知性思维思维具体具体思维面向对象程序设计语言nSimula引入了数据抽象概念以及类和继承机制。 Ada,Modula-2 等语言在它的基础上发展起来。nSmalltalk第一个真正的面向对象的程序设计语言。该语言引入和完善了类、方法、实例等概念,应用了继承和动态链接机制,是一种完全面向对象的程序设计语言。面向对象程序设计语言nLI

7、SP 语言家族是一种以表处理表达为特色的人工智能程序设计语言。70 年代以来,在 LISP 的基础上开发出许多 LISP 家族的面向对象程序设计语言,例如:nFlavorsnLOOPS(Lisp Object Oriented Programming System)nCommonLOOPSnCommonObjectsnCLOS(Common Lisp Object System)面向对象程序设计语言nC+C+ 是在 C 程序设计语言的基础上进行扩充,增加了相应的面向对象机制的混合型面向对象的程序设计语言。 由于 C+ 既具有完备的面向对象机制,又保持了 C 的灵活高效和对 C 程序的兼容性,是

8、目前使用最广泛的面向对象程序设计语言之一。常用的 C+ 语言版本有:nMS-C+、Turbo C+、Boland C+、Visual C+ 和GCC 等。面向对象程序设计语言nJava由 Sun Microsystems 公司开发的一种完全面向对象的程序设计语言。 Java 编译器生成的是一种称为“字节码”的中间码文件,该文件的执行是由运行在不同计算机平台上的 Java 虚拟机 JVM(Java Virtual Machine)完成的,所以 Java 语言非常适合网络编程,实现程序的跨平台、跨介质运行的需要。面向对象程序设计语言nC#C# 是由 Microsoft 公司近年来开发一种直接用于在

9、 Microsoft Net 平台上更易于编译产生网络程序(字节码程序)的面向对象程序设计语言。该语言具有 Java 程序的跨介质运行机制,在一定程度上保持了 C 的风格和高效率,并融入了 VB 语言开发程序的友好性和方便性,但目前还不能实现跨平台运行二、面向对象程序设计的基本概念n对象(object)n消息(message)n类(class)对象 对象的定义在客观世界中,对象是任何可以感觉到的事物。对象可以是自然事物(人、动物、植物等),组织结构(学校、院系、班级等),(人类的)物质产品(房屋、汽车、计算机等)和信息产品(文章、乐曲、规则、计划等)等。对象可小可大,可简单可复杂;复杂对象可以

10、由简单对象构成。无论对象的类型、大小、复杂程度多么不同,都具有共同的特性:对象 对象的定义无论对象的类型、大小、复杂程度多么不同,都具有共同的特性: 有一个特定的名字以区别于其他对象; 有一组属性,用来描述对象的静态特性; 有一组行为,用来描述对象的动态特性; 对象的操作可分为两类:n对内提供自身服务的行为n对外为其他对象提供服务的行为。对象(2) 对象的状态p在客观世界中,对象的状态是同类型的不同实例独立存在的依据,也是这些对象的行为表现差异的基础。p在面向对象的软件中,对象的状态是同类对象属性的静态类型和这些属性的动态值的总和。一个对象一旦创建,由静态类型所描述的属性存储区域就被分配确定,

11、描述不同对象差异的属性动态值可以在对象创建的同时被确定,并由对象的相应行为修改。对象(3)对象的特性n模块独立性:对象的行为仅由对象本身的状态确定,而对象的状态和行为的操作细节被封闭在模块内;n动态连接性:对象(模块)之间通过消息机制,实现不同对象行为的动态连接,完成确定任务;n易维护性:维护工作被最大程度地限定在对对象的状态和行为的确定规则(对象的定义类)的维护。消息(message)(1)消息的定义n消息是一个对象请求另一个对象执行其某种行为操作(也称为方法)的规格说明。这种规格说明总是由消息的接收者(提供方法的对象)、消息所请求的方法(方法名)和实现方法的必要参数组成的。所以在面向对象的

12、程序中,消息通常的表示形式是:对象名.方法。消息(message)(2)消息的性质n同一对象可以接受不同形式的多个消息,并产生不同的响应;n相同形式的消息可以发送给不同接收对象,所获得的响应可以截然不同;n消息的发送者可以不必考虑消息接收者是否会响应消息,消息接收者对消息的响应并不是必须的。消息(message)(3)消息的响应n接收消息的对象的状态和消息所请求的方法决定了消息的响应。消息响应所引起的操作主要包括四种:返回对象的状态;修改对象的状态;完成特定的操作;改变系统的某些状态。消息(message)(4)消息序列n与现实世界中一样,在面向对象软件的运行中一个任务所涉及的操作总会有多个对

13、象的参与和多次按顺序相互作用才能完成,使得这些对象能够按任务要求的顺序相互通讯的消息组成的序列被称为消息序列。类(class)(1)类的定义n在客观世界中,类是对一组具有共同特性(属性和行为)的客观事物的抽象概念。n在面向对象的软件中,类是由程序员自定义的具有特定数据结构和建立数据结构上的操作功能的抽象数据类型。 类(class)(2)类与对象的关系n类是创建对象的模板,提供了对象的构造规则。n对象是类的实例,按类提供的规则构造的数据。n同一类的不同实例(对象)必须具有:相同的操作集合;相同的静态属性集合;不同的对象名和属性动态值三、面向对象软件的重要特性n抽象性(abstraction)n封

14、装性(encapsulation)n继承性(inheritance)n多态性(polymorphism)1 抽象性(abstraction)n抽象是对具体对象(问题)进行概括,抽出这一抽象是对具体对象(问题)进行概括,抽出这一类对象的公共性质并加以描述的过程。类对象的公共性质并加以描述的过程。先注意问题的本质及描述,其次是实现过程或细节。 数据抽象:描述某类对象的属性或状态(对象相互区别的物理量)。 代码抽象:描述某类对象的共有的行为特征或具有的功能。 抽象的实现:通过类的声明。1 抽象性(abstraction)实例钟表n数据抽象: int Hour,int Minute,int Secon

15、dn代码抽象: SetTime(),ShowTime() class Clock public: void SetTime(int NewH,int NewM,int NewS); void ShowTime(); private: int Hour,Minute,Second; ;1 抽象性(abstraction)实例人n数据抽象: char *name,char *gender,int age,int idn代码抽象:生物属性角度:nGetCloth(), Eat(), Step(), 社会属性角度:nWork(), Promote() ,2 封装性(encapsulation) 什麽是

16、封装 具有一个确定的边界,对象的所有数据成员 (属性)、成员函数(行为)都被固定在这个 边界内部。 对象属性的私有部分和行为的实现代码受到保 护,其他对象不能直接修改该对象所拥有的数 据和代码。 具有一个接口,这个接口描述对象之间的相互 作用(请求和响应)的规格说明,即消息。封装反映了客观世界中事物的基本特性。2 封装性(encapsulation) 什麽是协议 对象对外服务的说明。对象的操作行为有三类:n私有(私有(private)操作,不向外界公开的对象行为,只)操作,不向外界公开的对象行为,只供对象自身调用供对象自身调用n保护(保护(protected)操作,向受限的外界公开)操作,向受

17、限的外界公开的对象行为,允许对象自身和派生类对象调用;的对象行为,允许对象自身和派生类对象调用;n公有(公有(public)操作)操作,向外公开的功能,向外公开的功能的对象的对象行为行为,允许对象自身、派生类对象和其他对象允许对象自身、派生类对象和其他对象调用,调用,即协议的内容。即协议的内容。 2 封装性(encapsulation) 面向对象软件的封装性 实现数据隐藏和软件安全的关键。 将设计与使用分隔,提供使用而隐藏设计。 将功能与实现分隔。提供功能而隐藏实现。封装的三个重要概念: 封装的原理 抽象数据类型; 封装的实现 类定义; 封装的单位 对象。2 封装性(encapsulation

18、) 实例 class Clock public: void SetTime(int NewH,int NewM,int NewS); void ShowTime(); private: int Hour,Minute,Second; ;边界特定的访问权限3 继承性(inheritance) 什麽是继承继承表达了一种对象类之间的依赖关系,它使得某类对象可以在另一类对象的属性和行为的基础上建造自己的属性和行为。继承反映了客观世界中事物间的基本结构关系。具有继承关系的类间具有如下特征: 类间具有共享特征(数据和代码的共享); 类间具有细微的差别和新增部分(非共享的数 据和代码); 类间具有层次结构。

19、 3 继承性(inheritance) 继承的分类具有继承关系的类自然地被分为两种:父类(基类):提供共享数据和功能的类。子类(派生类):继承共享数据和功能的类。 按继承源划分: 单继承:从单一父类继承属性和行为。 多继承 :从多个父类继承属性和行为。 按继承的内容划分: 取代继承:子类可取代父类的作用。 包含继承:子类包含了父类的全部特征。 受限继承:子类只能继承父类的某些特征。 特化继承:子类是父类的一种特殊类。3 继承性(inheritance) 继承与封装 继承不破坏封装; 继承提供了一种静态共享手段; 封装提供了一种动态共享手段。 继承与委托 继承与委托的共同之处 通过代码重用提 供

20、功能操作的共享。 继承使得类之间的共享操作都由基类对象完 成,提供了从一般类构造特殊类的手段。继承 提供的共享是静态实现的,即类之间的共享是 在类定义的编译时确定的。3 继承性(inheritance) 继承与委托 继承与委托的共同之处 通过代码重用提 供功能操作的共享。 继承使得类之间的共享操作都由基类对象完 成,提供了从一般类构造特殊类的手段。继承 提供的共享是静态实现的,即类之间的共享是 在类定义的编译时确定的。 委托是将一个对象的操作或操作的一部分交给 另一个特定对象去完成。委托提供的共享既可 以静态实现又可以动态实现,即在类对象的操 作执行时确定委托对象。 3 继承性(inheritance) 面向对象软件的继承性 实现软件代码重用和结构化的重要手段。 能清晰体现类之间的层次结构关系; 能减小代码和数据的重复冗余度,大大提高 了程序的代码重用性; 能通过增加一致性来减少模块间的接口和界 面,大大提高程序的易维护性; 继承是

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论