C++(第1章 面向对象概述)
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
28
算法+数据结构 数据结构 算法+数据结构 算法+数据结构
算法+数据结构
算法+数据结构 算法+数据结构 算法+数据结构
算法
对象
图
构成程序的对象
29
§1.2 对象与类
1.对象和类的概念 把函数放进结构是C++中的根本改变,并且这 引起我们将结构作为新的概念去思考。 在C中,结构是数据的凝聚,它将数据捆绑在 一起,使得我们可以将它们看成一个包。 但是这除了能使程序设计方便之外,别无其它 好处。
16
main ( ) { account acc1(500); //开设第一个帐户,并存入500元 account acc2(1500); //开设第二个帐户,并存入1500元 acc1.deposite(255.5); //向第一个帐户存入255.5元 acc2.deposite(500); //向第二个帐户存入500元 acc2.withdraw(700); //从第二个帐户取出700元 acc1.withdraw(700); //从第一个帐户取出700元 acc2.withdraw(350); //从第二个帐户取出350元 cout <<"帐号1的余额还有" << acc1.get_balance( )<<"元\n"; cout <<"帐号2的余额还有" << acc2.get_balance( )<<"元\n"; return 1; }
24
主函数 函数1 函数2
表示上面的算法与 下面的数据分离
函数3
函数1-1
函数1-2
函数1-3
函数2-1
函数3-1
函数3-2
数据1
数据2
数据3
图 算法与数据结构的关系
25
程序认识的发展
程序定律被重新认识为: 程序=(算法+数据结构) 即算法与数据结构是一个整体,算法总是离不 开数据结构,算法含有对数据结构的访问, 算法只能适用于特定的数据结构。 因此设计一个算法适合访问多个数据结构是不 明智的,而且数据结构由多个算法来对其进 行同种操作也是多余的。见下图说明。
程序 模块1 数据结构 函数过程 数据结构 模块2 函数过程 模块n
10
面向过程的程序设计方法的一个实例。 例1-1 建立银行帐户,允许顾客存款、取款两 种操作。
先建立一个简单的数据结构: struct account { char *name; int accountID; float balance; /* 余额 */ float interestyear ; };
38
2.对象的状态
对象的状态:是所有静态属性和这些属性的动 态值的总和。 对象的状态通常不仅仅是初等的数据类型(整 型、实型、字符型等),而且许多对象将另 一个对象作为它们状态的一部分。
39
什么是方法?
当某个行为作用在对象时,我们就称对象执行 了一个方法。方法定义了一系列的计算步骤。 C++程序通常将这些处理类中数据的函数称为 “方法”(method)。
33
什么是类?
类的定义:类是创建对象的样板,它包含对创 建对象的状态描述和对操作行为的说明。
实例化 类 对象
抽象定义
34
现在,我们用C++语言描述银行帐户类。
class accout { char *name; //数据成员 int accountid; //数据成员 float balance; //数据成员 float interestyear ; //数据成员 float Makedeposit (float n ) //成员函数 { balance= balance+n; return balance; } float withdraw ( float amount ) //成员函数 { if (amount>balance) { return 0 ; } else { balance=balance-amount; return balance; }; main ( ) { accout a ,b ,c; //创建对象 …… }
13
5.面向对象程序设计的基本概念
把数据结构和过程(函数)看成一个整体,形 成一个实体。 实体 account 属性 name; accountID; balance; interestyear 行为 Makedeposit(float n ) withdraw ( float n )
14
例1.2 银行帐户
17
面向对象程序设计的结构
程序
对象1
对象2
…
对象n
名 称:对象1 数据结构: 数据1; 数据2; …… 数据n; “函数过程”: 函数1; 函数2; …… 函数n;
…
18
面向对象程序设计是一种围绕真实世界的概念 来组织模型的程序设计方法,它采用对象来 描述问题空间的实体。
现实问题空间 物质:
一辆红色的自行车 一个对象——自行车的实例 (具体事物)
11
float Makedeposit ( float n, struct accout * P ) { P->balance= P->balance+n; return (P->balance); }
main ( ) { ……. }
12
面向过程的结构化程序设计方法进行程序设计 的特点: 数据结构和过程是分离的; 重点是面向过程的(功能)。 用面向过程的结构化程序设计方法进行大程序 设计时存在的缺点: 可维护性差,数据结构的修改将影响到所有 用到该数据结构的过程的代码修改。 数据的安全性不是最好。
43
4.类的确定与划分
面向对象程序设计技术是将系统分解成若干对 象,对象之间的相互作用构成了整个系统。 而类是创建对象的样板。所以当我们解决实 际问题时,需要正确地进行“分类”。 如何确定和划分类? 采用归纳方法, 从对所遇到的对象的分析中,归 纳出共同的特征来确定一个类。
46
具体步骤
在面向对象的分析和设计中,我们执行下面的 步骤: 1. 找出类; 2. 描述类和类之间的联系; 3. 用类来定义程序结构;
6
面向对象的优势
面向对象是一种新的非常有效的程序设计范 型。对于提高软件的生产率、可靠性、可重 用性等都是很有帮助的。现在大体上已经得 到统一的认识。 面向对象的程序设计是上世纪90年代程序设 计发展的主流。
7
4.面向过程程序设计的基本概念
这一程序设计范型的中心点是设计过程,所以 在程序设计时要决定所需要的过程,然后设 计过程的算法,找出其中最好的。 在这类范型的程序中,过程的调用是关键的一 环,语言必须提供设施给过程(函数)传送 变元和返回值。
#include <iostream.h> //利用函数库 class account { float balance; // 余额 public: account ( float amount ) { balance=amount; } //开户,并存入金额 void deposite ( float amount ) { balance=balance+amount; } //存款 int withdraw ( float amount ) { if (amount>balance) { return 0 ; } else { balance=balance-amount; return 1; } } // 取款 float get_balance( ) { return balance ; } // 查询余额 };
30
什么是对象?
然而将函数也放在这个包里,结构就变成了新 的创造物,它既能描述属性(就象C中的 struct能做的一样),又能描述行为,这就形 成了对象的概念。 对象是一个独立的有约束的实体,有自己的记 忆和活动。
31
对象的构成
对象:
ID(名称) + 属性(状态) + 操作(行为)
反映静态特征
反映动态特征
26
பைடு நூலகம்
算法
只能和 一个对 应
数据结构
数据结构
算法1
数据结构 算法2
数据结构
数据结构
同一种操 作的不同 实现是多 余的
图 旧的程序定律给算法与数据结构带来的不适
27
面向对象的认识
在面向对象中,算法与程序结构被捆绑成一个 类,这时候,程序定律被再次定义为: 对象=(算法+数据结构) 程序=(对象+对象+……) 也就是说,程序就是许多对象在计算机中相继 表现自己。而对象又是一个个程序实体。
32
对象的特征
对象是现实世界中的一个实体, 它具有如下特征: 有一个名字以区别于其它对象 有一个状态用来描述它的某些特征 有一组操作, 每一个操作决定对象的一种功能 或行为 在C++中,对象只是一个变量,最纯的定义是 “存储的一个区域”,它是能存储数据的空 间,并隐含着还有在这些数据上的运算。
}}
35
成员函数和数据成员
在C++的类中,我们把那些行为称为成员函数, 而把数据称为数据成员。 但是对于各种语言,涉及这些术语时,并不完 全一致。
37
OOP术语对照
C++ 类 对象 数据成员 成员函数 函数调用 虚函数 继承 派生类 EIFFEL 类 对象 属性 例程 例程调用 延迟例程 继承 后继类 Smalltalk 类 对象 实例变量 方法 消息发送 抽象方法 继承 子类 Simula 类 对象 属性变量 子程序 子程序调用 虚子程序 继承 子类
8
模块化程序设计
1972年,Parnas提出了有名的“信息屏蔽原 理”,它的基本思想是:把需求和求解的方 法分离;把相关信息——数据结构和算法— —集中在一个模块中,和其他的模块分离, 它们不能随便访问这个模块内部的信息。 在信息屏蔽原理的指导下,产生了新的程序设 计范型,即模块化程序设计。
9
模块化的面向过程程序设计的特点: 总体结构——树状层次 局部组织——模块化 程序由处理数据的一系列模块组成; 数据结构, 函数过程分开存储; “分而治之”。
4
2. 程序设计方法的进化
面向过程程序设计(PO) Procedure Oriented, 产生于六十 年代以前,程序以功能分解为核心 ,按功能分解。已经成为程序员的 基本技能 Object Oriented,产生于六十年 代以后,程序以数据为核心,按对 象分解。正如日中天
面向对象程序设计(OO)
“后”面向对象方法
人们在面向对象的基础上发展了更 多的新技术,借以弥补面向对象技 术的缺陷,使得面向对象技术能够 更好的解决开发中的问题。
5
3. 为什么需要面向对象?
现在为止,为人们所认识并被开发的计算机的 能力可以概括为3个方面: 计算的能力; 推理的能力; 人机交互的能力。 计算机的这三种能力现在都还在进一步地进行 开发,需要适当的技术支持,才能发展,才 能提高。能够同时支持这三种能力开发的技 术是面向对象。
面向对象解空间
意识:
自行车 自行车类 (抽象概念)
19
OOP过程实际上是一个建模的过程:
建模
实体概念
类
抽 象
现象 模拟 参照系统
具 体 对象
OOP程序
20
对象的概念
关于对象这一概念,目前还没有统一的定义。 一般认为,对象是包含现实世界物体特征的 抽象实体,它反映了系统为之保存信息和 (或)与它交互的能力。 它是一些属性及服务的一个封装体,在程序设 计领域,可以用“对象= 数据+作用于这些数 据上的操作”这一公式来表达。
第一章 面向对象程序设计概述
本章主要内容
什么是面向对象程序设计 对象与类 数据的抽象与封装 继承性 多态性
2
§1.1 什么是面向对象程序设计
1.程序设计概述
程序设计 != 语言
3
程序设计包括四方面的内容:
(1)程序设计语言:高级语言(C、PASCAL、 FORTRAN、C++、JAVA、VC、VB等)和 低级语言(汇编语言) (2)程序设计方法:面向过程的结构化设计方法 (C、PASCAL)和面向对象的程序设计方法 (C++、JAVA、VC、VB等)。 (3)程序设计环境与工具 (4)应用领域的知识
21
类的概念
类是具有相同操作功能和相同的数据格式(属 性)的对象的集合。 类为对象集合的抽象,它规定了这些对象的公 共属性和方法。 对象为类的一个实例。 对象和类的关系相当于一般程序设计语言中变 量和变量类型的关系。
22
6. 软件方法的发展必然
较早的软件开发,用结构化程序设计方法。程 序的定律是: 程序=(算法)+(数据结构) 即算法是一个独立的整体,数据结构(包含数 据类型和数据)也是一个独立的整体。两者 分开设计,以算法(函数或过程)为主。 见图。