类和对象的概念及定义.ppt

上传人:max****ui 文档编号:15315140 上传时间:2020-08-07 格式:PPT 页数:60 大小:1.09MB
返回 下载 相关 举报
类和对象的概念及定义.ppt_第1页
第1页 / 共60页
类和对象的概念及定义.ppt_第2页
第2页 / 共60页
类和对象的概念及定义.ppt_第3页
第3页 / 共60页
点击查看更多>>
资源描述
2020年8月7日9时13分,1,C+面向对象程序设计,普通高等教育“十一五”国家级规划教材 中国高等院校计算机基础教育课程体系规划教材,2020年8月7日9时13分,2,第3讲 面向对象概述,授课内容 类和对象的概念以及它们的定义。主要内容有: 1类和对象的基本概念; 2. 面向对象分析与设计 3. UML 4类的声明; 5对象及其定义; 6类的成员函数; 7对象成员的引用。,2020年8月7日9时13分,3,第3讲 类和对象的概念及定义,授课要求 1掌握类的概念、类的定义格式、类与结构的关系、类的成员属性和类的封装性; 2掌握类对象的定义; 3理解类的成员的访问控制的含义,公有、私有和保护成员的区别。 4能够根据给定的要求定义类并实现类的成员函数;,2020年8月7日9时13分,4,第3讲 类和对象的概念及定义,授课重点 1本讲的重点是类和对象的概念和定义 授课难点 1该讲的难点是类和对象的理解。,2020年8月7日9时13分,5,1面向对象程序设计方法,(1)概述,面向过程的程序设计,小规模,大规模,力不从心,面向对象程序设计,2020年8月7日9时13分,6,1面向对象程序设计方法,(1)概述 面向对象的程序设计的思路和人们日常生活中处理问题的思路是相似的。 面向对象的程序设计的基本思路:,生产汽车,组装,众多零件,面向对象的程序设计: (对象+对象+对象+) + 消息 = 程序,2020年8月7日9时13分,7,1面向对象程序设计方法,(2)对象 含义:客观世界中任何一个事物都可以看成一个对象(object)。 对象可大可小。对象是构成系统的基本单位。 任何一个对象都应当具有这两个要素: 属性(attribute)和行为(behavior) 。 比如: A学生“张三”是一个对象,他有属性:学号、姓名、性别等。行为有:学习、吃饭等。 B“打开文件按钮”也是一个对象,它有属性:形状、颜色、大小等。行为有:打开文件等。,张三,2020年8月7日9时13分,8,1面向对象程序设计方法,在C+程序设计中,属性即基本数据;行为即操作代码,也就是函数,见图1所示。 对象之间通过发送和接收消息互相联系的。见图2所示。,图1 对象,图2 对象的联系,2020年8月7日9时13分,9,1面向对象程序设计方法,使用面向对象的程序设计方法设计软件系统时,首要的问题是确定该系统是由哪些对象组成的,并且设计这些对象。 在C+中,每个对象都是由数据和函数(即操作代码)这两部分组成的。,2020年8月7日9时13分,10,1面向对象程序设计方法,(3)类(class) 含义:具有相同属性和行为的所有对象的集合。 比如: 所有在校学习的人,具有相同的属性:学号、姓名、性别等,具有相同的行为:学习。所以,这些人构成一个类,即学生类。,2020年8月7日9时13分,11,2面向对象程序设计的基本特征,(1)封装与信息隐蔽(encapsulation and imformation hiding) 可以对一个对象进行封装处理,把它的一部分属性和功能对外界屏蔽,也就是说从外界是看不到的,甚至是不可知的。 这样做的好处是大大降低了操作对象的复杂程度。 面向对象程序设计方法的一个重要特点就是“封装性” (encapsulation)。,2020年8月7日9时13分,12,2面向对象程序设计的基本特征,所谓“封装”,指两方面的含义: 一是将有关的数据和操作代码封装在一个对象中,形成一个基本单位,各个对象之间相对独立,互不干扰。 二是将对象中某些部分对外隐蔽,即隐蔽其内部细节,只留下少量接口,以便与外界联系,接收外界的消息。 这种对外界隐蔽的做法称为信息隐蔽(imformation hiding)。信息隐蔽还有利于数据安全,防止无关的人了解和修改数据。,2020年8月7日9时13分,13,2面向对象程序设计的基本特征,(2)抽象(abstraction) 在程序设计方法中,常用到抽象这一名词。抽象的过程是将有关事物的共性归纳、集中的过程。 抽象的作用是表示同一类事物的本质。 比如: 把在座的同学的共同特性抽出来:学号、姓名、性别、学习等。把大家都可以归到一类,即“学生”类。,2020年8月7日9时13分,14,2面向对象程序设计的基本特征,(3)继承与重用(inheritance) 继承:在一个已有的类上建立一个新的类。 C+提供了继承机制,可以很方便地利用一个已有的类建立一个新的类。即“软件重用” 。,“学生”类,增加属性:“专业”,“大学生”类,继承机制,例如: “白马”继承了“马”的基本特征,又增加了新的特征(颜色),“马”是父类,或称为基类,“白马”是从“马”派生出来的,称为子类或派生类。,2020年8月7日9时13分,15,2面向对象程序设计的基本特征,(4)多态性(polymorphism) 含义:如果有几个相似而不完全相同的对象,有时人们要求在向它们发出同一个消息时,它们的反应各不相同,分别执行不同的操作。这种情况就是多态性。 比如: 在Windows环境下,用鼠标双击一个文件对象(这就是向对象传送一个消息),如果对象是一个可执行文件,则会执行此程序,如果对象是一个文本文件,则启动文本编辑器并打开该文件。,在C+中,多态性是指:由继承而产生的相关的不同的类,其对象对同一消息会作出不同的响应。,2020年8月7日9时13分,16,3面向对象的程序设计含义,面向对象的程序设计含义: 它的整个程序由一系列相互作用的对象构成,对象之间的交互通过发送消息来实现,通过对象响应消息来实现程序的功能。 程序设计者的任务包括两个方面: 一是设计所需的各种类和对象,即决定把哪些数据和操作封装在一起; 二是考虑怎样向有关对象发送消息,以完成所需的任务。,2020年8月7日9时13分,17,3面向对象的程序设计含义,面向对象程序设计的表示: 对象 = 算法 数据结构 程序 = (对象+对象+对象+) + 消息 面向对象程序设计方法是十分有效的,它能大大降低程序设计人员的工作难度,减少出错机会。,2020年8月7日9时13分,18,4、面向对象的分析和设计,2020年8月7日9时13分,19,面向对象的分析基本概念,OOA环节的主要工作是明确用户的需求,并用标准化的面向对象模型规范地描述这一需求,最后形成面向对象的分析模型,即OOA模型。它主要确定要干什么(“What to do”)。 OOA强调用对象的属性和服务分别描述事物的静态特征和动态行为。,2020年8月7日9时13分,20,面向对象的设计基本概念,该环节的主要工作是确定如何做(“How to do”),面向对象的设计将在OOA模型的基础上引入界面管理、任务管理和数据管理等方面的内容,从而确定OOD模型。,2020年8月7日9时13分,21,5、UML,2020年8月7日9时13分,22,1 概述基本概念,Unified Modeling Language UML是一种建模的语言,不是编程的语言。 UML提供了大量的图形表示模型,我们要掌握类图的表示以及类之间的简单关系。,2020年8月7日9时13分,23,2 类图基本概念,类图是由类和与之相关的各种静态关系共同组成的图形。 类图展示的是软件模型的静态结构,类的内部结构以及和其他类的关系。,2020年8月7日9时13分,24,2 类图类的表示,2020年8月7日9时13分,25,2 类图对象的表示,2020年8月7日9时13分,26,2 类图关系的表示,依赖: 当要表明一个类使用另一个类作为它的成员函数参数时,就使用依赖关系。 通常类之间的调用关系、友元、类的实例化都属于这类关系。,依赖、关联、包含、泛化,2020年8月7日9时13分,27,2 关系的表示关联,关联用于表述一个类的对象和另一个类的对象之间相互作用的连接。,2020年8月7日9时13分,28,2 关系的表示包含,聚集表示类之间的关系是整体与部分的关系。组合是一种简单的聚集形式,但是它具有更强的拥有关系。,2020年8月7日9时13分,29,2 关系的表示泛化,类之间的继承关系在UML中称为泛化 。,2020年8月7日9时13分,30,6类的声明和对象的定义,(1)类和对象的关系 类是对象的抽象,而对象是类的具体实例(instance)。 类是抽象的,不占用内存,而对象是具体的,占用存储空间。 在C+中也是先声明一个类类型,然后用它去定义若干个同类型的对象。对象就是类类型的一个变量。可以说类是对象的模板,是用来定义对象的一种抽象类型。,2020年8月7日9时13分,31,(2)声明类类型,在C+中声明一个类类型和声明一个结构体类型是相似的。 声明类的一般形式如下: class 类名 private: 私有的数据和成员函数; public: 公用的数据和成员函数; protected: 受保护的数据和成员函数; ;,注意: 如果在类的定义中不指 定限定符,则系统就默 认为是私有的(private)。,private、 protected、public 称为成员访问限定符 (member access specifier)。,2020年8月7日9时13分,32,(2)声明类类型,下面是声明一个结构体类型的方法: struct Student /声明了一个名为Student的结构体类型 int num; char name20; char sex; ; Student stud1,stud2; /定义了两个结构体变量stud1和stud2,2020年8月7日9时13分,33,(2)声明类类型,现在声明一个类: class Student /以class开头 int num; char name20; char sex; /以上3行是数据成员 void display( ) /这是成员函数 coutnum:numendl; coutname:nameendl; coutsex:sexendl; /以上4行是函数中的操作语句 ; Student stud1,stud2; /定义了两个Student 类的对象stud1和stud2,2020年8月7日9时13分,34,(2)声明类类型,说明: (a)用private声明的成员称为私有的成员,它只能被类中的成员函数访问,不能被类外访问,但可以被友元类的成员函数访问(后面讲到)。 (b)用protected声明的成员称为受保护的成员,它不能被类外访问(这点与私有成员类似),但可以被派生类的成员函数访问。 (c)用public声明的成员称为公有的成员,它可以被类中的成员函数访问,也可以被类外访问。,2020年8月7日9时13分,35,(3)定义对象的方法,定义对象的方法和定义结构体变量的方法一致。 A先声明类类型,然后再定义对象 格式:类名 对象名 比如:Student stud1,stud2; /Student是已经声明的类类型 或者: class 类名 对象名 比如:class Student stud1,stud2;,2020年8月7日9时13分,36,(3)定义对象的方法,B在声明类类型的同时定义对象 比如: class Student /声明类类型 /成员定义省略 private: /声明以下部分为私有的 public: /声明以下部分为公用的 stud1,stud2; /定义了两个Student类的对象,2020年8月7日9时13分,37,(3)定义对象的方法,C不出现类名,直接定义对象 比如: class /无类名 /成员定义省略 private: /声明以下部分为私有的 public: /声明以下部分为公用的 stud1,stud2; /定义了两个无类名的类对象,2020年8月7日9时13分,38,(4)类和结构体类型的异同,C+允许用struct来定义一个类类型。 struct Student /用关键字struct来声明一个类类型 /类成员声明与class一样。 ; Student stud1,stud2; /定义了两个Student类的对象 C+不是简单地继承C的结构体,而是使它也具有类的特点,以便于用于面向对象程序设计。用struct声明的结构体类型实际上也就是类。,2020年8月7日9时13分,39,(4)类和结构体类型的异同,区别: (a)用struct声明的类,如果对其成员不作private或public的声明,系统将其默认为public。如果想分别指定私有成员和公用成员,则应用private或public作显式声明。 (b)用class定义的类,如果不作private或public声明,系统将其成员默认为private,在需要时也可以自己用显式声明改变。,2020年8月7日9时13分,40,7类的成员函数,类的成员函数(简称类函数)是函数的一种,它的用法和作用与普通函数基本上是一样的, (1)类的成员函数的定义 A在类体中定义的 格式: 函数返回值类型 函数名(参数表) /函数体 ;,成员函数在声明时,要指定为: private(私有的)、 public(公用的)、 protected(受保护的)。,注意,2020年8月7日9时13分,41,7类的成员函数,B在类外定义成员函数 在类外定义时,必须在函数名前面加上类名和作用域限定符“”。 格式: 函数返回值类型 类名函数名(参数表) /函数体 ;,2020年8月7日9时13分,42,7类的成员函数,比如: class Student public: void display( ); /公用成员函数原型声明 Private: int num; string name; char sex; /以上3行是私有数据成员 ; void Studentdisplay( ) /在类外定义display类函数 coutnum:numendl; /函数体 coutname:nameendl; coutsex:sexendl; Student stud1,stud2; /定义两个类对象,2020年8月7日9时13分,43,7类的成员函数,注意: (a)类内定义的成员函数,默认为内置函数(inline)。 (b)在类外定义时,在类体中要对函数作声明。 (c)如果在作用域运算符“”的前面没有类名,或者函数名前面既无类名又无作用域运算符“”,则表示该函数不属于任何类,属于一般普通函数。 比如 :display( ) 或 display( ) 则表示display函数不属于任何类,属于一般普通函数。,2020年8月7日9时13分,44,(2)inline 成员函数,类的成员函数也可以指定为内置函数。 C+要求对一般的内置函数要用关键字inline声明,但对类内定义的成员函数,可以省略inline。 比如 :前例中的display函数声明为内置函数。 inline void display( );,如果在类体外定义inline函数,则必须将类定义和成员函数的定义都放在同一个头文件中(或者写在同一个源文件中),注意:,2020年8月7日9时13分,45,(3)成员函数的存储方式,只用一段空间来存放这个共同的函数代码段。 如图8.5所示。,图8.5,显然,这样做会大大节约存储空间。,好处,2020年8月7日9时13分,46,(3)成员函数的存储方式,如果声明了一个类: class Time public: int hour; int minute; int sec; void set( ) abc; ;,cout sizeof(Time) endl;,输 出 的 值 是 12,int hour,int minute,int sec,+,+,2020年8月7日9时13分,47,8对象成员的引用,提问: 在程序中经常需要访问对象中的成员,与访问结构体成员类似。 访问对象中的成员可以有3种方法: (a)通过对象名和成员运算符访问对象中的成员; (b)通过指向对象的指针访问对象中的成员; (c)通过对象的引用变量访问对象中的成员。,对结构体的成员访问方法?,2020年8月7日9时13分,48,8对象成员的引用,例如: Student stud1 ,*p ; / Student是学生类 (a)stud1.num=1001; (b)p = /引用,2020年8月7日9时13分,49,8类的封装性和信息隐蔽,(1)公用接口与私有实现的分离 如果不必公开的信息,使用:private 要公开的,才使用:public (2)类声明和成员函数定义的分离 为便于多个程序使用某类,应当把类的声明和成员函数的声明放在头文件中(即.h文件),把成员函数的定义放在另一个文件中(即.cpp文件)。,2020年8月7日9时13分,50,8类的封装性和信息隐蔽,(3)面向对象程序设计中的几个名词 A “方法”(method):“方法”是指对数据的操作(类的成员函数)。一个“方法”对应一种操作。 外界是通过发“消息”来激活有关方法的。 B“消息”:其实就是一个命令,由程序语句来实现。 C发送“消息”:一个对象通知另一个对象执行它的某条成员函数。 D接收“消息”:一个对象接收到另一个对象要求它执行它的某条成员函数的信息。,2020年8月7日9时13分,51,9类和对象的简单应用举例,例1(P55的例2.1) 最简单的例子。 /该例子简单,同学们可以自己看,运行情况如下: 1232 43 12:32:43,int main( ) Time t1; cint1.hour; cint1.minute; cint1.sec; coutt1.hour: t1.minute:t1.sec endl; /输出时间 return 0; ,#include using namespace std; class Time /定义Time类 public: /数据成员为公用的 int hour; int minute; int sec; ;,2020年8月7日9时13分,52,9类和对象的简单应用举例,例2(P56的例2.2) 引用多个对象的成员。 (1) 程序(a) #include using namespace std; class Time public: int hour; int minute; int sec; ;,2020年8月7日9时13分,53,9类和对象的简单应用举例,int main( ) Time t1; cint1.hour; cint1.minute; cint1.sec; coutt2.hour; cint2.minute; cint2.sec; coutt2.hour:t2.minute:t2.secendl; return 0; ,运行情况如下: 10 32 43 10:32:43 22 32 43 22:32:43,另:使用函数来进行输入和输出。见程序(b)和(c)。(请同学们自己看书。P57-59),2020年8月7日9时13分,54,9类和对象的简单应用举例,例3(P60的例2.3) 将例2的程序改用含成员函数的类来处理。 #include using namespace std; class Time public: void set_time( ); /公用成员函数 void show_time( ); /公用成员函数 private: /数据成员为私有 int hour; int minute; int sec; ;,2020年8月7日9时13分,55,9类和对象的简单应用举例,int main( ) Time t1; t1.set_time( ); t1.show_time( ); Time t2; t2.set_time( ); t2.show_time( ); return 0; ,运行情况与例2中的程序相同。,void Timeshow_time( ) /在类外定义show_time函数 couthour: minute:secendl; ,void Timeset_time( ) /在类外定义set_time函数 cinhour; cinminute; cinsec; ,2020年8月7日9时13分,56,9类和对象的简单应用举例,例4 (P61的例2.4)找出一个整型数组中的元素的最大值。 用类来处理。 #include using namespace std; class Array_max /声明类 public: /以下3行为成员函数原型声明 void set_value( ); /对数组元素设置值 void max_value( ); /找出数组中的最大元素 void show_value( ); /输出最大值 private: int array10; /整型数组 int max; /max用来存放最大值 ;,2020年8月7日9时13分,57,9类和对象的简单应用举例,void Array_maxset_value( ) int i; for (i=0;iarrayi; void Array_maxmax_value( ) /成员函数定义,找数组元素中的最大值 int i; max=array0; for (i=1;imax) max=arrayi; void Array_maxshow_value( ) coutmax=max;,2020年8月7日9时13分,58,9类和对象的简单应用举例,int main( ) Array_max arrmax; /定义对象arrmax arrmax.set_value( ); arrmax.max_value( ); arrmax.show_value( ); return 0; 运行结果如下: 12 12 39 -34 17 134 045 -91 76 (输入10个元素的值) max=134 (输入10个元素中的最大值),2020年8月7日9时13分,59,10课后总结,(1)面向对象程序设计概念和特点; (2)类的声明和对象的定义; (3)类的成员函数的定义; (4)对象成员的引用; (5)类和对象的应用。,重在理解,学好C+的要点: 多编程,多上机,2020年8月7日9时13分,60,课后作业,P67-68:1、5、6 本讲结束,学好C+的要点: 多编程,多上机,
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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