资源预览内容
第1页 / 共21页
第2页 / 共21页
第3页 / 共21页
第4页 / 共21页
第5页 / 共21页
第6页 / 共21页
第7页 / 共21页
第8页 / 共21页
第9页 / 共21页
第10页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
C+面向对象程序设计第一章 面向对象程序设计概述1.1.1 面向过程程序设计的基本概念考虑一个银行系统,该系统允许顾客开设不同类型的银 行账户,包括现金账户、支票账户和贷款账户,同时允许 顾客存款、取款和转帐。首先考虑数据结构: struct account char *name; /* 姓名 */unsigned long accountId; /* 账号 */float balance; /* 余额 */float interestYTD; /* 年利息*/char accountType; /* 账户类型(现金x、支票z和贷款 d) ; 1.1 什么是面向对象程序设计1再考虑用三个过程分别负责存款、取款和转帐。我们可以三个 C函数:MakeDeposit()WithDraw()Transfer() 这种数据结构与过程分离有很多问题,例如增加一种账户类型-退 休账户(t),则三个C函数都必须重新编写。21.1.2 面向对象程序设计的基本概念(Object-Oriented)面向对象(O-O)程序设计是一种新的程序设计范型。这种范型 的主要特征是:程序=对象+消息面向对象程序的主要结构特点是: 第一,程序一般由类的定义和类的使用两部分组成,在主程序中 定义对象并规定它们之间传递消息的规律; 第二,程序中的一切操作都是通过向对象发送消息来实现的,对 象接收到后,启动有关方法完成相应操作。 第三,类由继承关系产生相互间的联系。数据与定义在它上面的用户需要的操作构成一个整体。当把对银行账户的操作定义在数据上,银行账户就是一个类,称 为银行账户类。我们可以建立许多具体的银行账户,而每一个 具体的银行账户就是银行账户类的一个对象。31.2 对象与类 1.2.1 对象与类概念 1. 对象 对象是面向对象(O-O)方法的核心。对象是人们要进行研究( 感兴趣)的任何事物,从最简的整数到航天飞都可以看成对象1)有形的实体。指一切看得见摸得着的实物。2)作用。指人或组织所起的作用。医生、公司、部门等。3)事件。在特定时间发生的事。如飞行、演出、开会等。4)性能说明。如机床厂对机床的性能说明。对象不仅能表示结构化的数据,而且也能表示抽象的事件、规则 以及复杂的工程实体。因此对象具有很强制表达能力和描述功 能。现实世界中,对象可以表示为:属性+行为 对象是现实世界的一个实体,其特性是:(1) 每一个必须有一个名字以区别于其他对象;(2) 用属性(或叫状态)来描述它的某些特征;(3) 有一组操作,每一个操作决定对象的一种行为。(4) 对象的操作可以分为两类:一类是自身所承受的操作,一 类是施加于其他对象的操作。5对象实现了数据与操作结合,可以认为是:数据+操作如洗衣机:对象有状态用来描述它的某些特征,通常用数据来描述。如出 厂日期、机器编号、规格等。对象还应当有操作,用以改变对象的状态,对象及其操作就是对 象的行为。如启动、洗衣、甩干等。面向对象的程序设计中,使用对象时,只能通过对象与外界的接 口来操作它。如洗衣机的按钮。2. 类(Object class)对象类是(O-O)方法的一个重要抽象概念,称类。 将具有相同结构、操作,并遵守相同约束规则的对象聚合成一组 ,这组对象集合就称为类。它是把许多对象进行抽象。 如茶杯 有不同大小的茶杯,不同材料,不同形状,可可完全相同 的许多茶杯- 茶杯的类 具体对类进行定义时,最低限度应包括如下内容: 1)类名。 2)内部表示。 3)对外接口。对于操纵类实例对象的外部可施力的操 作。 4)接口如何在内部动作的。内部实现。 对类的一个具体称为对象或实例或实体。 类最鲜明的特色是将数据的结构与数据的操作都封装在类中,并 实现了类的外部特性与类实现的隔离。也就实现了将使用类和 对象的使用者,与具体设计对象和类的开发者区分开,从而有 良好的模块化特性进而为复杂大系统的分析、设计,实现提供 先进的方法。8类是一组具有共同的属性特征和行为特征的对象的抽象。 类与对象的关系是抽象和具体的关系。在面向对象的程序设计中,“类”就是具有相同的数据和相同的操 作的一组对象的集合。 类名: 教师类 对象 对象 属性: 姓名:字符串年龄:整数学历:字符串职称:字符串专业:字符串 动作: 说自己的年龄吃饭授课在面向对象的程序设计中,总是先声明类,再由类生成其对象。如果用面向对象的观点来分析银行账户问题,我们用C+描述 银行账户类:属性: 姓名:黎明年龄:30学历:博士职称:教授专业:计算机软件 动作: 说自己的年龄吃饭授课属性: 姓名:年龄:学历:职称:专业: 动作: 说自己的年龄吃饭授课class BankAccount public: void MakeDeposit(float amount);float WithDraw(float amount);bool Transfer(BankAccount private:float balance; /* 余额 */float interestYTD; /* 年利息*/char *owner; /* 账户 */int account_number; /* 账号 */ ; 为此改变了传统方法中将数据与操作(亦称函数或过程)相分 离的做法,实现了将数据与操作封装在对象的统一体中。1.2.2 对象的交互对象之间的联系称为对象的交互。一个对象向另一个对象发出的 请求被称为消息。 方法(Methods)和消息(Messnges) 方法也即类的外部接口的另一种说法,实际就是类对象的某一 个操作,要使类对象进行某一种操作,先要给以消息,也可以 方法与消息等同。因此,消息是要求对象进行动作的说明或命 令或指导,是对象之间相互请求或相互协作的途径。把发送消息的对象称为发送者,接收消息的对象称为接收者。 对象间的联系,只能通过传递消息来进行。对象也只有在收到 消息后才能选用方法而被激活。 消息具有三个性质: (1)同一个对象可以接收不同形式的多个消息,做出不同的响应 。 (2)相同形式的消息可以传递给不同的对象,所做出的响应可以 是不同的。 (3)消息的发送可以不考虑具体的接受者,对象可以响应消息, 也可以不响应。10C+语言中对类、对象、方法、消息的实现实例Class person private:char name20;int age;char add40;char sex;void printname()cout main( ) person y; /y 是对象y.printme(); / 这是消息,向对象y发送了方法printme()的消息 。 *注* 假定 y 己有初值数据,如何给初值以后构造函数中实现。printme();y.printname;y.printage; 等都是错误的。121.2.3 类的确定与划分当我们解决实际问题时,需要正确地分“类”。如何把实 际问题中的事物汇聚成一个个的“类”,这是面向对象 程序设计的一个难点。类的确定与划分是软件开发中 的关键一步。101.3 数据的抽象与封装1.3.1 现实世界中的抽象与封装 1.3.2 数据的抽象与封装的基本概念将数据结构和作用于数据结构上的操作组成一个实体,数据的 表示方式和对数据的操作细节被隐藏起来,用户通过操作接口 对数据进行操作。这就是数据的封装。对象的封装是: (1)对象具有一个清楚的边界,对象的私有数据、成员函数的细 节被封装在该边界内; (2)具有一个描述对象与其它对象如何相互作用的接口,该接口 必须说明消息传递的使用方法; (3)对象内部的代码和数据应受到保护,其它对象不能直接修改 。131.3.3 对象的特性(1)封装性封装是指将一个数据和与这个数据有关的操作集合放在一起形成 一个能动的实体- 对象,有一个清楚的边界包装,对象,类的所 有私有数据内部程序(成员函数)的细节都被固定在这个边界内。 具有一个接口,这个接口描述了对象对外界的消息、方法和响应。 对象受封壳保护,外界不能直接修改使用本对象所拥有的数据和代 码。 (2) 模块独立性 (3) 动态连接性 (4) 易维护性141.4 继承性1.4.1 继承的概念 以面向对象程序设计的观点来看,继承所表达的是对象类之间相 关的关系。这种关系使得某类对象可以继承另外一类对象的特 征和能力。 类之间具有继承关系,则有下列特性: (1) 类间具有共享特性(包括数据和程序代码的共享); (2) 类间具有判别或新增部分(包括非共享的数据和程序代码) ; (3) 类间具有层次结构。 假设有两个类A和B,若类B继承类A,则属于类B中的对象具有类 A的一切特征(包括数据属性和操作),这时,我们称被继承 类A为基类或父类或超类;而称继承类B为类A的派生类或子类 。同时我们还可以说,类B是从类A中派生出来的。如果类B从 类A派生出来,而类C又是从类B派生出来的,就构成了类的层 次。 继承机制允许派生类继承基类的数据和操作(即数据成员和成员 函数),也就是说,允许派生类使用基类的数据和操作。同时 派生类还可以增加新的操作和数据。151.4.2 继承的分类从继承源上分,继承分为单继承和多继承。 从继承内容上划分,继承可分为取代继承、包含继承、受限继承、 特化继承等。161.4.3 继承与封装的关系在面向对象系统中,封装的单位是对象,也就是说,把一个属 于某一类的对象封装起来,使其数据和操作成为一个整体。一个对象,无论它是基类的实例,还是派生类的实例,都是一 个被封装的实体。因此,我们得出结论:继承机制的引入并不 影响对象的封装性。 继承是类之间的相交关系,即类间的继承关系。要进行类间继承它们之间应有:类间具有共享特征(包括数据和程序共享)类间具有细微的差别或有新增部分(非共享的数据和代码 )类间具有层次结构从继承源上划分: 单继承和多继承从继承内容上划分: 继承可以对数据(结构特性)的继承又具 有操作(行为)的继承。171.5 多态性1.5.1 什么是多态性面向对象系统的多态性是指不同的对象收到相同的消息时产生 多种不同的行为方式。 1.5.2 重载的概念重载一般包括函数重载和运算符重载。函数重载是指一个标识 符可同时用于为多个函数命名,而运算符重载是指一个运算符 可同时用于多种运算。多态性:指接收同一个消息名后,对象可以采用多种不同的行 为(态度)重载概念:即可以有同名函数。同一运算符可以定义成不同的 操作。虚函数概念:指类继承和派生中可以用相同函数名,但不同的 实现版本。抽象类的概念:可以定义一种类,这种类中有虚函数,因此不 能有具体对象的类,称抽象类。181.6 面向对象程序设计语言面向对象的程序设计,必须使用面向对象程序设计语言。面向 对象程序设计语言应该具备下述特征: (1) 它支持对象的概念(包括对象所有的特性,如封装等); (2) 它要求对象属于类; (3) 它提供继承机制。要点 (1). 面向对象的程序设计将数据及数据的操作放在一起,它将对象 及对象的操作抽象成一种新的数据类型称为类。 (2). 对象是其自身所具有的状态特征及可以对这些状态施加的操作 结合一起所构成的独立实体。 (3). 类是对一组客观对象的抽象,将该组对象共同特征集中起来。 (4). 面向对象系统的特性是封装性、继承性、多态性。 抽象:抽象分类 从一组对象为起点,抽取公共的行为将其放到一 个类中,不同类的对象具有不同的行为。 19
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号