类和对象.ppt
《类和对象.ppt》由会员分享,可在线阅读,更多相关《类和对象.ppt(196页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、类和对象类和对象面向对象程序设计(OOP)概述ObjectOrientedProgrammingl面向对象的思想l面向对象概述l面向对象特点1面向对象的思想面向对象的思想班级对象:班级的静态特征,所属的系和专业、班级的人数,所在的教室等。这种静态特征称为属性;班级的动态特征,如学习、开会、体育比赛等,这种动态特征称为行为。按钮对象:按钮的内容、大小,按钮的字体、图案等等针对按钮的各种操作,创建、单击、双击、拖动等软件工程追求的目标之一就是可维护性,可维护性主要表现软件工程追求的目标之一就是可维护性,可维护性主要表现在在3个方面:个方面:可理解性、可测试性和可修改性。可理解性、可测试性和可修改性
2、。面向对象的主要好处就是显著的改善了软件的可维护性。面向对象的主要好处就是显著的改善了软件的可维护性。为了完成计算为了完成计算,必须设计出一个计算方法或解决问题的过程。必须设计出一个计算方法或解决问题的过程。因此,因此,软件设计的主要工作就是设计求解问题的过程软件设计的主要工作就是设计求解问题的过程以以OO为例,对应于软件开发的过程,为例,对应于软件开发的过程,OO衍生出衍生出3个概念:个概念:OOA、OOD和和OOP。采用面向对象进行分析的方式称为。采用面向对象进行分析的方式称为OOA,采用面向对象进行设计的方式称为,采用面向对象进行设计的方式称为OOD,采用面,采用面向对象进行编码的方式称
3、为向对象进行编码的方式称为OOP。面向过程。面向过程(OP)和面向)和面向对象对象(OO)本质的区别在于分析方式的不同,最终导致了编本质的区别在于分析方式的不同,最终导致了编码方式的不同。码方式的不同。蛋炒饭盖浇饭u面向过程面向过程(OP)与面向对象与面向对象(OO)面向对象的软件工程面向对象的软件工程v面向对象的软件工程是面向对象方法在软面向对象的软件工程是面向对象方法在软件工程领域的全面应用。它包括件工程领域的全面应用。它包括:面向对象的分析(面向对象的分析(OOA)面向对象的设计(面向对象的设计(OOD)面向对象的编程(面向对象的编程(OOP)面向对象的测试(面向对象的测试(OOT)面向
4、对象的软件维护(面向对象的软件维护(OOSM)5u从面向过程到面向对象 在结构化程序设计中,采用的是“自顶向下,逐步细化(divide and conquer,stepwise refinement)”的思想。它的具体操作方法是模块化,是按功能来分的,所以也称功能块。也就是从一般事物中抽象出来的操作,在C+中称为一个函数,一个函数解决一个问题,即实现一个功能或一个操作。当程序规模和复杂性达到一定程度时不可避免地引入大量的全局变量,优良的模块化没法坚持到底。在模块化的思想中已经出现了封装的概念,这个封装是把数据封装到模块中,即局部变量。但这是很不彻底的,因为模块是功能的抽象,而数据则是具有其个性
5、的,一但发生那怕是一点变化,抽象的功能模块就不再适用了。如一个管理软件,管理规则变化了,则管理模块以及所有与之有联系的模块都必须更改,必须重新进行功能抽象,必须重新建立模块间联系的规则。可维护性差成了制约结构化程序设计应用的瓶颈。u从面向过程到面向对象对象的概念是面向对象技术的核心所在。面向对象技术中的对象就是现实世界中某个具体的物理实体在计算机逻辑中的映射和体现。一部移动电话,它是现实世界中的一个实体。它由天线、发射部件、接收部件、显示屏、按键、专用集成电路芯片及外壳组成;它有着其实在的功能,可以打电话,可以发短消息,可以存储、输入和编辑各种个人信息,甚至可以上网。这样一个实体可以在计算机世
6、界中映射为一个计算机可以理解、可以操纵、具有前面所叙述的属性和操作的对象。一辆自行车,它由车架、车轮、脚踏和传动机构、变速机构等组成,它具有代步功能,它可以进行变速骑行,特别要强调的是它有一些特征可以把你的这辆自行车与其他自行车区分开来,其中最重要的是钢印号。这些都可以在面向对象的程序中用对象及其属性和操作模拟出来。从面向过程到面向对象从面向过程到面向对象对象类计 算 机世界实体抽象类别现实世界客观世界抽象抽象实例化映射主观世界图1对象、实体与类现实世界中的实体可以抽象出类别的概念。对应于计算机世界就有一个类(class)的概念,因为类是一个抽象的概念的对应体,所以计算机不给它分配内存,只给对
7、象分配内存。图1表达了计算机世界与现实世界之间的对应关系。u每个对象都属于一个特定的类型2面向对象程序设计的特点面向对象程序设计的特点v四个基本特征:四个基本特征:抽象抽象(类类)(数据抽象数据抽象+代码抽象代码抽象)封装封装(过程和数据封藏起来过程和数据封藏起来)继承继承(基类和派生类基类和派生类)多态性多态性(虚函数、函数重载虚函数、函数重载)Q抽象(抽象(abstraction)抽象是对具体对象(问题)进行概括,抽出抽象是对具体对象(问题)进行概括,抽出这一类对象的公共性质并加以描述的过程。这一类对象的公共性质并加以描述的过程。先注意问题的本质及描述,其次是实现过程或细先注意问题的本质及
8、描述,其次是实现过程或细节。节。数据抽象(数据抽象(dataabstraction):描述某类对象):描述某类对象的属性或状态(对象相互区别的物理量)。它是的属性或状态(对象相互区别的物理量)。它是以数据为中心,及其能对其实施的操作作为一个以数据为中心,及其能对其实施的操作作为一个整体(对象)来进行描述。整体(对象)来进行描述。OOP所基于的抽象所基于的抽象就是数据抽象。就是数据抽象。代码抽象(过程抽象,代码抽象(过程抽象,proceduralabstraction):描述某类对象的共有的行为特):描述某类对象的共有的行为特征或具有的功能。就是指把程序的一些功能抽象征或具有的功能。就是指把程序
9、的一些功能抽象为子程序。它对数据和操作的描述是分离的。为子程序。它对数据和操作的描述是分离的。抽象的实现:通过类的声明。抽象的实现:通过类的声明。10抽象实例抽象实例钟表钟表v数据抽象:数据抽象:数据描述:数据描述:intHour,intMinute,intSecond代码抽象:代码抽象:SetTime(),ShowTime()11抽象实例抽象实例钟表类钟表类classClockpublic:voidSetTime(intNewH,intNewM,intNewS);voidShowTime();private:intHour,Minute,Second;12抽象实例抽象实例人人v数据抽象:数据
10、抽象:数据描述:数据描述:char*name,char*gender,intage,intid代码抽象:代码抽象:生物属性角度:生物属性角度:GetCloth(),Eat(),Step(),社会属性角度:社会属性角度:Work(),Promote(),13Q封装封装(encapsulation)v它是与抽象相关的概念。抽象考虑的是程序实体的外它是与抽象相关的概念。抽象考虑的是程序实体的外部行为,而封装考虑的则是它的内部实现。部行为,而封装考虑的则是它的内部实现。v封装把过程和数据隐藏起来,将它们视为一个整体,封装把过程和数据隐藏起来,将它们视为一个整体,对数据的访问只能通过已定义的界面。对数据
11、的访问只能通过已定义的界面。过程封装:是指对数据封装,它通过子程序(即函过程封装:是指对数据封装,它通过子程序(即函数)实现。但是操作所需数据是公开的,缺乏对数数)实现。但是操作所需数据是公开的,缺乏对数据的保护。据的保护。数据封装:是把数据和操作封装起来,使使用者看数据封装:是把数据和操作封装起来,使使用者看不到数据表示,只能通过相应操作来操作数据。在不到数据表示,只能通过相应操作来操作数据。在OOP中通过对象属性实现了数据及其操作的封装中通过对象属性实现了数据及其操作的封装封装为信息隐藏提供了支持。封装为信息隐藏提供了支持。目的是加强安全性和简化编程,使用者目的是加强安全性和简化编程,使用
12、者不必了解具体的实现细节,而只需要通不必了解具体的实现细节,而只需要通过外部接口,以特定的访问权限,来使过外部接口,以特定的访问权限,来使用类的成员。用类的成员。实现封装:类声明中的实现封装:类声明中的15封装封装v实例:实例:classClockpublic:voidSetTime(intNewH,intNewM,intNewS);voidShowTime();private:intHour,Minute,Second;特定的访问权限外部接口16Q继承与派生继承与派生连接类与类的层次模型,利用现有类派生出新类连接类与类的层次模型,利用现有类派生出新类的过程称为类继承的过程称为类继承,支持代码
13、重用、提供了无限重复支持代码重用、提供了无限重复利用程序资源的途径、节省程序开发的时间和资源,利用程序资源的途径、节省程序开发的时间和资源,是是OOPOOP的关键。的关键。基类和派生类基类和派生类实现:声明派生类实现:声明派生类17Q多态性多态性(polymorphism)v多态:多态:发出同样的消息被不同类型的对象接收时导致完发出同样的消息被不同类型的对象接收时导致完全不同的行为全不同的行为,既单一接口,多种实现,是既单一接口,多种实现,是OOPOOP的重要补的重要补充。充。v在程序设计中多态性体现为:在程序设计中多态性体现为:一名多用一名多用指在同一作用域中一个名字有多种含义,主要通指在同
14、一作用域中一个名字有多种含义,主要通过重载(过重载(overloadingoverloading)来实现,包括函数名重载)来实现,包括函数名重载和操作符重载。和操作符重载。类属性类属性指一个程序实体能对多种类型的数据进行操作或指一个程序实体能对多种类型的数据进行操作或描述的特性,能具有类属性的程序实体通常有类描述的特性,能具有类属性的程序实体通常有类属函数和类属类型。类属函数通过指针和函数模属函数和类属类型。类属函数通过指针和函数模板实现,类属类型通过共用体和类模板实现。板实现,类属类型通过共用体和类模板实现。18v在在OOP中,由于类之间可以有继承关系,因此还存在下面的多态:中,由于类之间可
15、以有继承关系,因此还存在下面的多态:对象类型的多态:子类对象既属于子类,也属于父类对象类型的多态:子类对象既属于子类,也属于父类对象标识的多态:父类的引用或指针既可引用或指向父类,也可对象标识的多态:父类的引用或指针既可引用或指向父类,也可引用或指向子类。引用或指向子类。消息的多态:父类和子类对一个公共的消息集有不同的解释。消息的多态:父类和子类对一个公共的消息集有不同的解释。v多态的好处:易于实现程序高层代码复用,增强语言的可扩充性多态的好处:易于实现程序高层代码复用,增强语言的可扩充性v与多态相关的概念是联编(或绑定,与多态相关的概念是联编(或绑定,binding)联编:指对多态元素使用的
16、过程,即确定对多态元素的某个使用联编:指对多态元素使用的过程,即确定对多态元素的某个使用是多态元素的哪一种形式(如对重载函数的绑定)。分为:是多态元素的哪一种形式(如对重载函数的绑定)。分为:静态联编(静态联编(staticbinding):指在编译时刻确定对多态元):指在编译时刻确定对多态元素的使用。如对象标识符的多态和消息的多态。素的使用。如对象标识符的多态和消息的多态。动态联编(动态联编(dynamicbinding):指在运行时刻来解决这个):指在运行时刻来解决这个问题。如虚函数。问题。如虚函数。193面向对象编程:面向对象编程:将数据及对数据的操作方法放在一起,作为一个相互将数据及对
17、数据的操作方法放在一起,作为一个相互依存、不可分离的整体依存、不可分离的整体-对象。对同类型对象抽象出其共对象。对同类型对象抽象出其共性,形成类。类中的大多数数据、只能用本类的方法处理。性,形成类。类中的大多数数据、只能用本类的方法处理。类通过有限的接口与外界发生关系,对象与对象之间通过类通过有限的接口与外界发生关系,对象与对象之间通过消息进行通信。消息进行通信。程序程序=对象对象+对象对象+对象对象+对象对象+.对象对象=数据数据+方法方法优点:优点:程序模块间的关系更为简单,程序模块的独立程序模块间的关系更为简单,程序模块的独立性、数据的安全性就有了良好的保障。性、数据的安全性就有了良好的
18、保障。通过继承与多态性,可以大大提高程序的可重通过继承与多态性,可以大大提高程序的可重用性,使得软件的开发和维护都更为方便。用性,使得软件的开发和维护都更为方便。适合于大程序长时间的开发工作适合于大程序长时间的开发工作对象的两个要素对象的两个要素v静态特征(属性)静态特征(属性)v动态特征(行为)动态特征(行为)班级作为一个对象班级作为一个对象班级所属系、专业、学生人数、所在的教室等。班级所属系、专业、学生人数、所在的教室等。学习、开会、体育比赛等。学习、开会、体育比赛等。如果想从外部控制班级中学生的活动,可以从外界如果想从外部控制班级中学生的活动,可以从外界向班级发一个信息(如听到广播声就去
19、上早操,向班级发一个信息(如听到广播声就去上早操,听到打铃就下课等)称为消息。听到打铃就下课等)称为消息。对象之间通过发送和接收消息互相联系。对象之间通过发送和接收消息互相联系。消息包括消息包括:目标对象目标对象,请求的方法请求的方法,参数参数v在面向对象程序设计中,类和对象是两个最基本在面向对象程序设计中,类和对象是两个最基本的概念。的概念。对象是客观事物在计算机中的抽象描述;对象是客观事物在计算机中的抽象描述;类则是对具有相似属性和行为的一组对象的统一描述。类则是对具有相似属性和行为的一组对象的统一描述。v例如,一个班级中的每一位同学都是一个客观事例如,一个班级中的每一位同学都是一个客观事
20、物,可以在计算机中进行抽象的描述,称为对象;物,可以在计算机中进行抽象的描述,称为对象;v而这些对象都具有学号、姓名、性别、年龄等相而这些对象都具有学号、姓名、性别、年龄等相似的属性以及查询成绩、修改所选课程等相似的似的属性以及查询成绩、修改所选课程等相似的行为,为此可以将这些学生对象进行统一的描述,行为,为此可以将这些学生对象进行统一的描述,即定义成学生类。即定义成学生类。226.1类类类是把各种不同类型的数据和对数据的操作组织在一类是把各种不同类型的数据和对数据的操作组织在一起而形成的用户自定义的数据类型。起而形成的用户自定义的数据类型。其中,把不同类型的数据称为数据成员,把对数据的其中,
21、把不同类型的数据称为数据成员,把对数据的操作称为成员函数操作称为成员函数v类的声明类的声明v类的定义类的定义成员函数的定义成员函数的定义数据成员的定义数据成员的定义2301.为什么要引入类为什么要引入类v工资单:姓名、单位、编号工资单:姓名、单位、编号.v成绩单:姓名、学号、各科成绩成绩单:姓名、学号、各科成绩.v简单数据单元无法将这样记录作为一个数简单数据单元无法将这样记录作为一个数据单位处理据单位处理v一一对应关系一一对应关系引例定义一有关职工工资信息的结构类型,对某职工的该类信息进行处理。职工信息包括姓名、基本工资、岗位工资和职务工资;对该类信息的处理包括输入、输出和求总收入情况。#in
22、cludeiostream.hstructstuffcharname10;doublejw,gw,zw;s;voidprint()couts.name:s.jwts.gwts.zws.names.jws.gws.zw;doublesalary()doublesum=0;sum=sum+s.jw+s.gw+s.zw;returnsum;voidmain()input();print();coutsalary();结构化的方法结构化程序的框架结构化程序#includeiostream.hclassstuffprivate:charname10;doublejw,gw,zw;public:voidp
23、rint()coutname:jwtgwtzwnamejwgwzw;doublesalary()doublesum=0;sum=sum+jw+gw+zw;returnsum;voidmain()stuffs;s.input();s.print();couts.salary();以面向对象的方式实现02.以工资单为例以工资单为例月份月份工号工号姓名姓名工作部门工作部门工作时间工作时间基本工资基本工资2002.90002张三张三长安大学长安大学1990.7.11000校内津贴校内津贴岗位津贴岗位津贴水电费水电费房租房租实发工资实发工资20030050150130003.类的层次关系类的层次关系v工
24、作部门:字符串工作部门:字符串v姓名:字符串姓名:字符串v职务:代码(职务:代码(099)intv工作时间:工作时间:年年(xxxx):int月月(112):char日日(131):charv家庭情况家庭情况婚否:婚否:(0,1)int是否是双职工:是否是双职工:intv工资工资 基本工资基本工资:double:double 岗位津贴岗位津贴:double:double 劳保福利劳保福利:double:double 独生子女独生子女:double:double 房租房租:double:double 电费电费:double:double 水费水费:double:double 取暖费取暖费:dou
25、ble:double 保育费保育费:double:double 实发工资实发工资:double:doubleu类类(Class)-数据类型数据类型v类是具有相同属性和相同的方法的对象的集合,它是一种类是具有相同属性和相同的方法的对象的集合,它是一种既包含数据又包含函数的既包含数据又包含函数的抽象数据抽象数据类型。类型。v类是将一类对象和其他对象区别开来的一组描述。类是将一类对象和其他对象区别开来的一组描述。v类是对象集合的抽象,对象是类的一个实例。类是对象集合的抽象,对象是类的一个实例。v类类具有封装和隐藏性、还具有继承性。具有封装和隐藏性、还具有继承性。v类属于类型的范畴类属于类型的范畴 v
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 对象
限制150内