[计算机软件及应用]第8章第一部分 类与对象

上传人:tia****nde 文档编号:70799350 上传时间:2019-01-18 格式:PPT 页数:84 大小:388.31KB
返回 下载 相关 举报
[计算机软件及应用]第8章第一部分 类与对象_第1页
第1页 / 共84页
[计算机软件及应用]第8章第一部分 类与对象_第2页
第2页 / 共84页
[计算机软件及应用]第8章第一部分 类与对象_第3页
第3页 / 共84页
[计算机软件及应用]第8章第一部分 类与对象_第4页
第4页 / 共84页
[计算机软件及应用]第8章第一部分 类与对象_第5页
第5页 / 共84页
点击查看更多>>
资源描述

《[计算机软件及应用]第8章第一部分 类与对象》由会员分享,可在线阅读,更多相关《[计算机软件及应用]第8章第一部分 类与对象(84页珍藏版)》请在金锄头文库上搜索。

1、第八章 类与对象,80年代后期,在计算机软件领域发生了许多变化,这些变化极大地影响着几乎所有的程序设计者和系统分析员的工作。面向对象的程序设计方法: (Object-Oriented Programming)就是其中之一。 OOP并不是一种程序设计语言,而是一种新概念关于数据、过程和它们之间关系的一种新的思考方法。 OOP技术由五个最基本的概念组成:object, message, method, class, inheritance.,8.1 对象和类的概念 8.1.1 什么是对象 对象是世界中的物体在人脑中的映象,世界是由各种各样具有自己的运动规律和内部状态的对象所组成的;不同对象之间的相

2、互作用和联系构成了完整的现实世界。当我们接触某些新事物时,我们的意识就会为这些事物确立一个对象。 对象是OOP技术的核心。从理论上说是对客观世界事物的表示和描述。从程序设计实际来看,就是数据以及对这些数据进行操作的代码或函数结合在一起所构成的独立实体。,也可以把对象看成是现实世界中各种各样的实体。对象可以大致分为两类:有生命的对象和无生命的对象。他们都有一些共同之处,就是他们都有大小、形状、质量等属性,还都有各种各样的行为。人类就是运用自己抽象思维的能力,通过了解对象的属性、观察对象的行为来认识和研究各种对象。因此,人们应当按照现实世界这个本来面貌来理解世界,直接通过对象及其相互关系来反映世界

3、。这样建立起来的系统才能符合现实世界的本来面目。,8.1.2 什么是类 类是对一组对象共同具有的属性和行为进行的抽象,即把同一类对象共同具有的属性和行为封装在一起,就形成了类。 换句话说,类是对一组具有相同性质的对象的程序描述,它由概括了一组对象共同性质的数据和函数组成。 面向对象程序设计(OOP)就是用软件来模拟现实中的对象。它利用了类的关系,即同一类对象具有相同的特点;还可以通过继承的关系来创建新类,使得新类既具有现有类的特点,又包含了它自身特有的属性和行为。,类和对象是面向对象技术的核心,二者关系密切。类是对一组对象的抽象,而对象则是类的一个实例。在程序中,从语法上看,类和对象的关系相当

4、于数据类型和变量的关系。 在传统的C中,允许用户自己定义他所需要的数据类型。如结构体类型struct, 它允许程序将若干种成分集中在一个命名的变量之中。结构的各个成分成为成员,成员的名字各不相同。一个结构的各个成员可以属于不同的类型。,在C语言中,定义一个新的数据类型并编写专属于这种类型的操作函数是常会碰到的工作。而C+中的类即是将定义新的数据类型和建立专属的操作函数结合在一起,作为单一结构的类型定义,即: 类=数据+操作函数+(访问和继承原则) 类是结构体类型的扩充。结构体中引入成员函数并规定了其访问和继承原则后便成了类。,可以说,面向对象是一种思考问题的方法,以对象为主体,当然也可以说,面

5、向东西,面向物体(抽象的物体),面向事物。 其实面向对象是为了和面向过程相对而言的。当面向对象的程序概念还没有出来前,程序的设计都是在想怎样才能一步一步的解决问题,所以思维方式是过程,或是说步骤,早期的C语言,FORTRAN等都是,汇编就更是了。,使用面向对象的思维方法,其实是一个把问题从具体的编程技术当中抽象出来的过程,而这个抽象的过程是自上而下的,非常符合人类的思维习惯,也就是先不考虑问题解决的细节,把问题的最主要的方面抽象成为一个简单的框架,集中精力思考如何解决主要矛盾,然后在解决问题的过程中,再把问题的细节分割成一个一个小问题,再专门去解决细节问题。,所以说,面向对象的基本是,如何设计

6、一个个能动的物体(OBJECT对象),它们有不同的功能,相互组合调用各个对象自己擅长的功能(METHOD,方法),最后完成一个大的目的。(当然步骤和过程,解决问题的先后顺序等,还是存在的) 所有面向对象的程序设计语言一般都含有三个方面的语法机制,即对象和类(封装性)、多态性、继承性。,封装性 把数据和函数包装在一个单独的单元(称为类)的行为称为封装。数据不能被外界访问,只能被封装在同一个类中的函数访问。这些函数提供了对象数据和程序之间的接口,避免数据被程序直接访问。 在一个对象内部,某些函数和(或)某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程

7、序中无关的部分意外的改变或错误的使用了对象的私有部分。,多态性 面向对象的程序设计语言支持“多态性”,把一个接口用于一类活动。即“一个接口多种算法”。具体实施时该选择哪一个算法是由特定的语法机制确定的。C+在编译时和运行时都支持多态性。编译时的多态性体现在重载函数和重载运算符等方面。运行时的多态性体现在继承关系及虚函数等方面。,继承性 C+程序中,由一个类(称为基类)可以派生出新类(称为派生类)。这种派生的语法机制使得新类的出现轻松自然,使得一个复杂事物可以被顺理成章地归结为由逐层派生的对象描述。“派生”使得程序中定义的类呈层次结构。处于子层的对象既具有其父层对象的共性,又具有自身的特性。 继

8、承性是一个类对象获得其基类对象特性的过程。C+中严格地规定了派生类对其基类的继承原则和访问权限,使得程序中对数据和函数的访问,需在家族和朋友间严格区分。,为什么要使用面向对象的思考方法和概念?是为了提高开发效率。因为面向对象的设计中,都是在设计一个个的物件(OBJECT),共同的地方,可以重复利用(inheritance)。 面向过程的开发,人要迎合机器的工作方式。面向对象,人更多地去集中抽象现实中的问题,以人的思维方式为本位,减少了对机器物理构造或工作方式的迎合。,面向对象的思维方法其实就是我们在现实生活中习惯的思维方式,是从人类考虑问题的角度出发,把人类解决问题的思维方式逐步翻译成程序能够

9、理解的思维方式的过程。 在搞软件开发时,编码不是最重要的,分析、设计才是最重要的。,学习了面向对象的程序设计方法,你会发现在软件设计和开发过程中,你自己总是会不知不觉的运用面向对象的思维方法来设计和编写程序,并且程序的设计和开发也变得不再那么枯燥,而一个合理运用面向对象技术进行设计和架构的软件,更是具备了思维的艺术美感。,8.2 类和对象的定义 8.2.1 类的定义 一般来说,类中包含数据成员和成员函数,用以模拟具有属性(数据成员)和行为(成员函数)的对象。定义了一个类以后,就可以用这个类的名字来声明该类的对象了。 与函数的定义类似,类定义也包含两部分:类头和类体。类头由关键字class及其后

10、面的类名构成。类体则是由一对花括号把类的数据成员和成员函数括起来的部分。,class 类名 private: 私有数据和函数 public: 公有数据和函数 ; 大括号后的分号“;”是类定义的结束标志。类的成员分为数据和函数,分别称为成员数据和成员函数。成员数据描述类对象内部数据的结构,成员函数则用于操作类对象的这些数据。,class Date public: Date( ); / 默认构造函数 void setDate(int,int,int); / 设置年月日 void printChina( ); /打印中国格式的日期 void printUsa( ); /打印美国格式的日期 priva

11、te: int year; int month; int day; ;,其中,类头部分为class Date,由关键字class和类名Date组成。一般类名的首字母用大写字母表示。 类体部分为花括号扩起来的部分。在类体中声明数据成员和成员函数,并指定这些类成员的访问级别。它们可以被声明为public(公有)的、private(私有)的、或者protected(保护)的。 其中public:、private: 和protected: 称为访问说明符。,从一个访问说明符开始,它下面的所有数据成员和成员函数都为该说明符所指定的访问级别,直到另一个访问说明符出现为止。例如上面的类Date中,成员函数D

12、ate()、setDate(int, int ,int)、printChina()和printUsa()同为public型。而数据成员year、month和day同为private型。 被声明为public(公有)访问级别的数据成员或成员函数,在程序中任何访问该类对象的地方都能够访问。,而被声明为private(私有)访问级别的数据成员或成员函数,只能被该类的成员函数访问,而对于其他类的成员函数或程序中的普通函数是不可见的。 对于protected(保护)类型我们将在后面的章节中介绍。 如果没有指明是什么访问级别,那么编译系统默认为private。,在类的定义中,修饰符private、publ

13、ic以及protected的顺序是不重要的。而且类定义中可以多次使用其中的每一个,每次说明一部分成员。,下面的Student是一个简单的类,用来刻划学生的姓名和学号。 class Student char name20; public: void putname(char *n); void getname(char *n); private: long num; public: void putnum(long n); long getnum(); ;,成员数据的说明 一般说来,类中的成员数据可以是任何类型的。成员数据说明的形式等同C+程序中一般变量的定义形式。 int X,Y; 只是这里还

14、要使用访问说明符(类型修饰符)private、public和protected。在说明成员数据时不再使用修饰符extern、auto、register。正像结构体类型中的成员在定义时不能进行初始化一样,类中的成员数据在说明时也不能进行初始化。因为C+中的初始化都是针对变量的。,8.2.2 成员函数的定义 我们上面所讲的类的定义中,对于成员函数只指明了它们的函数原型,而没有函数的定义。那么我们应该如何定义成员函数呢?在C+中有两种定义成员函数的方法,即在类中定义成员函数和在类定义的外部定义成员函数。 1. 在类中定义成员函数 我们还是用上面的类Date的例子,对类Date的定义进行改写:,cla

15、ss Date public: Date( ) /默认构造函数 year = 2009; month = 3; day = 6; void setDate(int y,int m,int d) /设置年、月、日 year = y; month = m; day = d; ,void printChina( ) / 打印中国格式的日期 coutyear“年”month“月” day“日“endl; void printUsa( ) / 打印美国格式的日期 coutmonth“-“day“-“ yearendl; private: int year; int month; int day; ;,由

16、上例可以看出,类定义的花括号中包含的4个成员函数是在类中定义的。一般来说,在类中定义的成员函数规模都比较小。这种在类定义中定义的成员函数,即便没有用inline来修饰,编译器也默认地把其视为内联函数。,2. 在类定义的外部定义成员函数 对于比较复杂的成员函数,直接把函数定义放在类定义中使用起来十分不便。为了避免这种情况,C+允许在其他地方定义成员函数。这个时候要用作用域运算符“:”来指定函数属于哪个类。 类定义之外定义成员函数的一般形式为: 返回值类型 类名:成员函数名(形参说明表) 函数体 ,我们对上面类Date定义进行改写如下: class Date public: Date( ); / 默认构造函数 v

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

当前位置:首页 > 高等教育 > 大学课件

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