第1章面向对象程序设计概述
1 面向对象程序设计概述
面向对象程序的特点 面向对象程序的特点 程序
4.多态 4.多态( polymorphism )
优点: 优点: 1. 可以为具有继承关系的不同类所形成的类族 提供统一的外部接口; 提供统一的外部接口; 2. 减少记忆操作名的负担。 减少记忆操作名的负担。
对象和类的概念 对象和类的概念
1. 对象(object) 对象是软件开发所涉及的问题域中一些事物的抽 象; 对象是用来描述客观事物的一个实体, 对象是用来描述客观事物的一个实体,它是构成 系统的一个基本单位; 系统的一个基本单位; 对象由一组属性(attribute)和对这组属性进行 对象由一组属性 和对这组属性进行 操作的一组方法(method)的封装体,具有唯 的封装体, 操作的一组方法 的封装体 一的标识; 一的标识; 属 性 作 为 类 中 的 数 据 项 称 为 数 据 成 员 ( data member),表示一类对象所共有的静态特性; ) 表示一类对象所共有的静态特性; 方 法 作 为 类 中 的 操 作 称 为 成 员 函 数 ( member function),表示一类对象所共有的动态特性。 ) 表示一类对象所共有的动态特性。
对象和类的概念 对象和类的概念
消息和方法的关系 对象根据接收到的消息, 调用相应的方法; 对象根据接收到的消息 , 调用相应的方法 ; 反过 有了方法, 对象才能响应相应的消息。 来 , 有了方法 , 对象才能响应相应的消息 。 所以 消息模式与方法界面应该是一致的。 同时, 消息模式与方法界面应该是一致的 。 同时 , 只要 方法界面保持不变, 方法界面保持不变 , 方法体的改动不会影响方法 的调用。 的调用。 C++语言中方法是通过函数来实现的 语言中方法是通过函数来实现的, 在C++语言中方法是通过函数来实现的, 称为成员 函数。 函数。
面向对象程序设计
1.1 面向对象程序设计概述
•在程序的实施过程中,由于大型系统必须由 多人合作完成,各人或各小组完成程序中的 一个或几个模块,如何划分任务、估计和分 配资源、掌握每个程序员的进度等就构成了 进行大型系统设计时管理的复杂性,另外, 即使每个人或小组所设计的模块都无可挑剔, 但将这些模块整合在一起时未必不会出现问 题,因此如何权衡模块内聚度和模块间的耦 合度,也是编程人员必须面对的问题之一。
1.1 面向对象程序设计概述
简单的说,通过使用面向对象的方法可以把 一组看似相互之间毫无联系的对象有效地集成在 一起,这些对象都包含代表各自特征的数据以及 对数据的操作即对象的行为。通过面向对象方法, 可以把与该对象相关的数据和操作封装在一个相 对独立的实体中,该实体有自己的功能和特征, 它也可以采用某种机制与外界交互。
1.1 面向对象程序设计概述
面向对象设计方法追求的是现实问题空 间与软件系统解空间的近似和直接模拟。它 希望用户用最小的力气,最大限度地利用软 件系统进行求解。
在具体学习OOP之前,请先注意一下两 点:
记忆的特征或数据,这些特征或数据能反映对象的基本性质。 找出对象和类中存在的各种整体-部分结构和一般-特殊结构,并进一步确定这些结构组合而成的多重结构。
的处理这些系统状态以及中间状态、组织高 这种环境最主要的特征就是以对象作为程序的主要单位,它将数据及对这些数据的操作功能以及与其他对象的通信的能力都封装在了
C++面向对象程序设计_实验指导书
1.完成实验指导书《C++面向对象程序设计教程(第3版)——习题解答与上机指导》的实验1;
2.做好实验记录;
3.按照实验报告格式(附件1)要求填写实验内容,并提交实验报告。
九、其它说明
每次实验前,实验指导书都会预先发放,请提前预习实验,特别是实验涉及的原理。实验要求及时完成并上交实验报告,鼓励提前完成必做实验,并尽量多做实验题目。
【要求】:采用C++编程风格。
【运行结果截图】:
三、实验原理、方法和手段
1.重载函数:a)函数名称相同;b)函数的形参个数不同;函数的形参类型不同;或两者兼有;c)函数的返回值不构成判别标准。
2.了解“传址调用”与“传值调用”的区别;
3.“引用”不额外申请内存。
四、实验组织运行要求
本实验采用“以集中授课,学生自主训练为主的开放模式组织教学”。
putchar(c3);
}
【运行结果是】:
【分析运行结果】:
6.输入并运行下面的程序,分析格式控制对输出的影响。
#include<stdio.h>
void main()
{
int a=-1,b=98;
double x=152.6752445;
printf("a=%d,%ld,%u,%o,%x\n",a,a,a,a,a);
i=8;
j=10;
printf("%d,%d \n", i,j);
printf("%d,%d \n",i++,j--);
printf("%d,%d \n", i,j);
printf("%d,%d \n", ++ i,-- j);
01 第一章 面向对象概述
1.1面向对象基本概念
2 对象——具有属性 属性刻画了对象的静态特征
车型名称 厂商 级别
十代思域220turbo 东风本田 紧凑型车
能源类型
汽油
环保标准
国V
上市时间
最大功率 (kW)
最大扭矩 (N·m)
发动机
2016.04 130 220
1.5T 177马力 L4
1.3面向对象与项目设计
1 使用面向对象方法分析项目需求
面向对象的分析过程
用户 开发者
一般需求
管理者 用户知识
问题域建模
专业领域知识
现实世界经验
问题域陈述
对象模型 动态模型
功能模型
1.3面向对象与项目设计
1 使用面向对象方法分析项目需求
面向对象分析的一般过程
获取需求内容陈述
建立系统的对象模型结构 建立对象的动态模型
类的例子
信息工程系的 帧一一同学
学生类
经贸管理系的 贾三三同学
尝试抽象——试将下列图标分类
不同角度,分类结果不一定 根 据 问 题 需 要 进 行 分 类
1.1面向对象基本概念
3 类——与对象的关系
• 每一个对象都是某一 个类的实例
• 每一个类在某一时刻 有零个或更多的实例
• 类是静态的:其语义 和关系在执行前就已 经定义好了
1.4面向对象思想与软件工程模型
1 瀑布模型
瀑布模型将软件生 命周期划分为软件 计划、需求分析和 定义、软件设计、 软件实现、软件测 试、软件运行和维 护这6个阶段,并 且规定了它们自上 而下的次序,如同 瀑布一样下落。每 一个阶段完成才进 行下一阶段。
面向对象程序设计概述
1.什么是结构化程序设计方法?这种方法有哪些优点和缺点?【解答】结构化程序设计方法是指20世纪60年代开始出现的高级语言程序设计方法,由于采用了数据结构化、语句结构化、数据抽象和过程抽象等概念,使程序设计在符合客观事物与逻辑的基础上更进了一步。
结构化程序设计的思路是:自顶向下、逐步求精。
程序结构由具有一定功能的若干独立的基本模块(单元)组成,各模块之间形成一个树状结构,模块之间的关系比较简单,其功能相对独立,模块化通过子程序的方式实现。
结构化程序设计方法使高级语言程序设计开始变得普及,并促进了计算机技术的深入应用。
虽然结构化程序设计方法采用了功能抽象、模块分解与组合,以及自顶向下、逐步求精的方法,能有效地将各种复杂的任务分解为一系列相对容易实现的子任务,有利于软件开发和维护;但与面向对象程序设计方法相比,结构化程序设计存在的主要问题是,程序的数据和对数据的操作相互分离,若数据结构改变,程序的大部分甚至所有相关的处理过程都要进行修改。
因此,对于开发大型程序具有一定的难度,软件的可重用性差,维护工作量大,不完全符合人类认识世界的客观规律。
2.面向对象程序设计有哪些重要特点?【解答】软件设计的目的是为了解决日常生活中存在的各种实际问题,面向对象程序设计与以往各种程序设计方法的根本区别是程序设计的思维方法的不同。
它主要具有如下重要特点:(1)面向对象程序设计实现了较直接地描述客观世界中存在的事物(即对象)及事物之间的相互关系,它所强调的基本原则是直接面对客观事物本身进行抽象,并在此基础上进行软件开发,将人类的思维方式与表达方式直接应用在软件设计中。
(2)面向对象的程序设计将客观事物看作具有属性和行为的对象,通过对客观事物进行抽象来寻找同一类对象的共同属性(静态特征)和行为(动态特征),并在此基础上形成类。
(3)面向对象的程序设计将数据和对数据的操作封装在一起,提高了数据的安全性和隐蔽性。
第1章面向对象程序设计概述3(4)面向对象的程序设计通过类的继承与派生机制以及多态性特性,提高了软件代码的可重用性,因而大大缩减了软件开发的相关费用及软件开发周期,并有效地提高了软件产品的质量。
《C++面向对象程序设计(第2版)》第1章 绪论
1.2 面向对象思想与机制(续3)
“类”是相似物体的高度抽象,或者说,类是相似对象的 特征抽象。 简单来说,一个类都包含若干“成员”,这些成员代表了 同类对象的“特征”:
人 树 电脑 有姓名、年龄、身高、体重,思想 有高度、宽度、命名 有品牌、显示器、主板、CPU 遇到突发事件时有回应 适度浇水可以生长,扒 掉树皮就会死亡 加电就会运行,点击就 有反应
每个类的特征数量虽然有多有少,但都可以分为静态部分 和动态部分。前者称为物理特征,或属性,或数据,后者 称为行为特征,或动作,或方法。 归结起来,一个类是由数据成员和方法成员构成的。
1.2 面向对象思想与机制(续4) 2. 类与对象
一个对象是个体存在,
一个类是相同对象的共性。
一个对象不仅具有特征,而 且每一个特征都可以赋予具 体值。 在该名字前加上“这个”、 “那个”等限定词后则构成 对象。
面向对象程序设计
西南交通大学信息科学与技术学院
主讲教师:廖革元
课程说明 参考教材 :
C++面向对句程序设计 清华大学出版社 李晋江
考核要求: 考勤+作业+期末考试
从C到C++
关键是思 想观念的 转变
C程序员
?
C++程序员
你的处境 这是又一项准备——思想准备。 1. 你的庆幸: 你所写的全部C代码均可在所有支持 C++C 的编译器 越是资深的 程序员,就 中使用。 越难以跨越感情和习惯性 思维模式的鸿沟。 2. 你的不幸: 你所知道全部C语言知识和面向对象毫无关系,你 C语言学的越扎实,越习惯面向过程编程,越难转 请记住这句名言: 向面向对象。
1.2 面向对象思想与机制(续1) 1.人类认识世界和发展世界的过程
第1章_面向对象的程序设计及C++概述new
计算机软件教学中心
1.2.2 封装性
• 例如前面讲过的学生类SS中: • 封装的信息有
– (1)所有的private数据成员:number、name、 dailyScore、finalScore、generalScore、 place 。 – (3)所有的public成员函数的实现细节: void readData() void calcuScore() void printOut()
• 公开的接口有:以上3个成员函数的原型
计算机软件教学中心
1.2.2 封装性
• 因此在main()函数中通过类的对象可以直接 访问类的接口成员:
– s. readData(); – s. calcuScore(); – s.printOut() ;
• 封装的单位实际上是属于某一个类的对象。 因此,在封装之前需要仔细做好数据抽象和 功能抽象的工作,明确类中哪些成员需要信 息隐藏,哪些成员应该对外公开。
计算机软件教学中心
• 例如:
1.1.2 面向对象的程序设计
姓名 name[20] 张虹 char 性别 sex[8] char int age 年龄
数据成员
女 25
double height 1.70 身高
人类
Person类 类对象名:
teacher1
静态特性:
体重 double weight 55.0 char identity 教师 身份
计算机软件教学中心
1.2.4 多态性
• 多态性的意义:用同一个接口实现不同的操 作,直接使用类来进行程序开发非常方便。 • 例如,为求面积,在三角形类、圆形类、正 方形类、长方形类中都定义了函数getArea ()。显然,为求相应图形的面积,实现的 代码不一样。但用户在使用这些类的对象求 面积时不必关心实现细节,直接调用该成员 函数就可以了。
面向对象程序设计教案
面向对象程序设计教案第一章计算机与程序设计基本内容:1.把程序及其相关文档资料称为软件。
2.程序设计语言是人类用来向计算机传递信息的表示方法、约定和规则的集合。
3.传统的程序设计语言是过程性语言,使用这类语言编制程序的主要工作,是设计解题过程,因此称为面向过程程序设计。
4.用模块化、抽象、信息隐藏、局部化和模块化独立等原理及结构程序设计技术指导面向过程程序设计,能够提高软件开发效率,增加软件的可理解性和可维护性。
这些方法不仅适用于面向过程程序设计也适用于面向对象程序设计方法。
5.面向对象方法有四个要点,只有同时使用对象、类、继承和消息的方法,才是真正的面向对象方法。
学习面向对象程序设计,首先要学会面向对象的思维解题方法。
各种面向对象的程序设计语言,无非是实现面向对象解题方法的工具。
6.面向对象方法的主要优点是,接近人类习惯的思维方法、稳定性好、可重用性好和可维护性好。
是解决软件开发面临的难题的最有希望最有前途的方法之一。
1.1 计算机的基本结构1.2 程序设计语言一、机器语言(machine language):以0和1表示手工操作二、汇编语言(assembler language):例如mov ax,100add ax,bx等开始使用批处理(batch processing)三、高级语言(high-level language):如60年代的ALGOL四、结构化程序设计(structured programming)整个程序是一个模块层次(hierarchy of modules)每一模块内既有数据,又有代码,用于按一定算法对代码进行操作如FORTRAN,C等五、面向对象的程序设计(Object-Oriented Programming, OOP)1.3 面向过程程序设计三种基本结构:1、顺序结构。
2、选择结构。
3、循环结构:当型循环结构;直到型循环结构。
结构化程序设计方法:1、自顶而下;2、逐步细化;3、模块化设计;4、结构化编码。
面向对象程序设计 1_面向对象方法概述
(1) 重用性 传统软件生产中缺乏大粒度、可重用的构件。基 本处于手工作业阶段。 (2) 复杂性 传统程序中数据与其操作是相分离的,开发大程 序时,常因数据的一个的小小变动而导致意想不到的 错误,甚至整个程序的崩溃。以致出现过所谓的“软 件危机”。 (3) 可维护性 传统程序中数据与操作相分离的结构不利于程序 的维护。
1.1
什么是面向过程程序设计方法 本节主要内容
1.1.1 面向过程程序设计方法概述 1.1.2 面向过程程序设计方法的局限性
1.1.1 面向过程程序设计方法概述
面向过程程序设计方法是流行很广泛的程序设计 方法。如C、PASCAL、FORTRAN、Ada等语言都是采用面 向过程程序设计方法。 在面向过程程序设计中,程序设计者不仅要考虑程 序要“做什么”,还要解决“怎么做”的问题。 首先要明确程序的功能,程序设计的重点是如何设 计算法和实现算法。 在面向过程程序设计中,普遍采用结构化程序设计 方法,即所有的程序由顺序、分支和循环三种基本结构 组成。
3.传统的程序设计难以适应各种新环境
当前,并行处理、分布式、网络和多机系统等,已 经或将是程序运行的主流方式和主流环境。 传统的程序设计技术很难适应这些新环境。 综上所述,传统的面向过程的结构化程序设计不能 够满足计算机技术的迅猛发展的需要,软件开发迫切需 要一种新的程序设计方法的支持。
1.2
什么是面向对象程序设计方法 本节主要内容
例1.1 利用面向过程程序设计方法计算圆和三角 形的面积。设圆的半径为r,圆周率取3.14,则圆面积 的计算公式为cs=3.14*r*r;设三角形的高为h,底为w, 则三角形面积的计算公式为ts=0.5*h*w。
用面向过程程序设计方法编写一个计算面积的C语言程序。 #include<stdio.h> double circle(double r){ return 3.14*r*r; } //定义函数circle double triangle(double h,double w) //定义函数triangle { return 0.5*h*w; } int main() //定义主函数main { double r,h,w,cs,ts; printf(“Input r,h,w:”); //调用函数,输出字符串 scanf("%lf%lf%lf",&r,&h,&w); //调用函数scanf,输入圆的半径和三角形高和底的值 cs= circle(r); //调用函数circle ts= triangle(h,w); //调用函数triangle printf("The area of circle is:%f\n",cs);//调用函数输出圆的面积 printf("The area of triangle is:%f\n",ts); //调用函数输出三角形的面积 return 0;}
面向对象程序设计课后习题答案
面向对象程序设计课后习题答案第一章:面向对象程序设计概述[1_1]什么是面向对象程序设计?面向对象程序设计是一种新型的程序设计范型。
这种范型的主要特征是:程序=对象+消息。
面向对象程序的基本元素是对象,面向对象程序的主要结构特点是:第一:程序一般类的定义和类的使用两部分组成,在主程序中定义各对象并规定它们之间传递消息的规律。
第二:程序中的一切操作都是通过向对象发送消息来实现的,对象接受到消息后,启动有关方法完成相应的操作。
面向对象程序设计方法模拟人类习惯的解题方法,代表了计算机程序设计新颖的思维方式。
这种方法的提出是软件开发方法的一场革命,是目前解决软件开发面临困难的最有希望、最有前途的方法之一。
[1_2]什么是类?什么是对象?对象与类的关系是什么?在面向对象程序设计中,对象是描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一体。
对象可以认为是:数据+操作在面向对象程序设计中,类就是具有相同的数据和相同的操作的一组对象的集合,也就是说,类是对具有相同数据结构和相同操作的一类对象的描述。
类和对象之间的关系是抽象和具体的关系。
类是多个对象进行综合抽象的结果,一个对象是类的一个实例。
在面向对象程序设计中,总是先声明类,再类生成对象。
类是建立对象的“摸板”,按照这个摸板所建立的一个个具体的对象,就是类的实际例子,通常称为实例。
[1_3]现实世界中的对象有哪些特征?请举例说明。
对象是现实世界中的一个实体,其具有以下一些特征:每一个对象必须有一个名字以区别于其他对象。
需要用属性来描述它的某些特性。
有一组操作,每一个操作决定了对象的一种行为。
对象的操作可以分为两类:一类是自身所承受的操作,一类是施加于其他对象的操作。
例如:雇员刘名是一个对象对象名:刘名对象的属性:年龄:36 生日:工资:2000 部门:人事部对象的操作:吃饭开车[1_4]什么是消息?消息具有什么性质?在面向对象程序设计中,一个对象向另一个对象发出的请求被称为“消息”。
第01章 面向对象技术概述
Ada Lovelace是英国著名诗人 拜伦的女儿,世界上第一个程序 员。Ada语言以她的名字命名
20
面向对象技术发展-4
里程碑4:C++ (1982, 贝尔实验室)
• 第一个被工业界广泛接 受的支持面向对象能力 的语言,创造者Bjarne Stroustrup(本贾尼· 斯 特劳斯特卢普) • 动机是给C添加一些 Simula特性,以完成当 时刚刚出现的大规模复 杂任务 • 商业化
1.2.3 面向对象技术 VS 结构化
31
1.2.3 面向对象 VS 结构化-1
扬弃,不是否定
订单 订单项 PK 订单项ID
PK 订单ID 下单日期 税金 运费 总价
购买数量 价格 FK1 订单ID
顾客
顾客 帐号、数额 取款功能
提款机
1: 请办理提款(帐号,金额)
32
面向对象 VS 结构化-2
预言历史的最佳方式是创造历史 -- Alan Kay
19
面向对象技术发展-3
里程碑3:ADT, Ada 83, 基于对象(19771983)
• 编程理论界在结构化运 动中提出ADT思想,以 N. Wirth和Liskov为代 表 • 美国防部军用开发语言 评选,Ada被指定为强 制性军用编程语言,实 际上已经进入“基于对 象”阶段
1
1.2 面向对象技术
1.2.1 基本概念 1.2.2 面向对象技术发展 1.2.3 面向对象技术 VS 结构化
7
1.2.1 面向对象领域的基本概念
OO技术领域存在一些基本术语和概念,需 要掌握和理解。
8
对象和实例
对象(Object)
• 它是系统用来描述客观事物的一个实体,是构 成系统的一个基本单位。 • 对象包括:属性和方法 • 对象之间通过消息进行通信。
计算机C++面向对象程序设计
cout<<sin(x,10)<<endl;
} 44
int add(int a,int b,int c)
{ return a+b+c; }
int add(int a,int b) { return a+b; } void main(void)
不同的参 数个数
{ cout<<"3+5="<<add(3,5)<<endl;
int a, b;
cin>>a,b; cin>>a b;
cin>>a>>b;
31
输出数据 cout 与输入cin对应的输出是cout输出流。
当要输出一个表达式的值时,可使用cout来实现, 其一般格式为: cout << <表达式> 《<< <表达式>......》; 其中运算符“<<”称为插入运算符,它将紧跟其后 的表达式的值,输出到显示器当前光标的位置。
35
1.3 C++对C的扩充 1.3.1 用Const定义常变量
36
const类型变量
当用const限制说明标识符时,表示所说明的数据类型为常量类型。 可分为const型常量和const型指针。
可用const限制定义标识符量,如:
const int MaxLine =1000;
const float Pi=3.1415926
34
使用setw()应注意以下三点: 1、在程序的开始位置必须包含头文件iomanip.h,即在程 序的开头增加: #include <iomanip.h>
C++面向对象程序设计课后答案(谭浩强)
C++面向对象程序设计课后答案(1-4章)第一章:面向对象程序设计概述[1_1]什么是面向对象程序设计?面向对象程序设计是一种新型的程序设计范型。
这种范型的主要特征是:程序=对象+消息。
面向对象程序的基本元素是对象,面向对象程序的主要结构特点是:第一:程序一般由类的定义和类的使用两部分组成,在主程序中定义各对象并规定它们之间传递消息的规律。
第二:程序中的一切操作都是通过向对象发送消息来实现的,对象接受到消息后,启动有关方法完成相应的操作。
面向对象程序设计方法模拟人类习惯的解题方法,代表了计算机程序设计新颖的思维方式。
这种方法的提出是软件开发方法的一场革命,是目前解决软件开发面临困难的最有希望、最有前途的方法之一。
[1_2]什么是类?什么是对象?对象与类的关系是什么?在面向对象程序设计中,对象是描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一体。
对象可以认为是:数据+操作在面向对象程序设计中,类就是具有相同的数据和相同的操作的一组对象的集合,也就是说,类是对具有相同数据结构和相同操作的一类对象的描述。
类和对象之间的关系是抽象和具体的关系。
类是多个对象进行综合抽象的结果,一个对象是类的一个实例。
在面向对象程序设计中,总是先声明类,再由类生成对象。
类是建立对象的“摸板”,按照这个摸板所建立的一个个具体的对象,就是类的实际例子,通常称为实例。
[1_3]现实世界中的对象有哪些特征?请举例说明。
对象是现实世界中的一个实体,其具有以下一些特征:(1)每一个对象必须有一个名字以区别于其他对象。
(2)需要用属性来描述它的某些特性。
(3)有一组操作,每一个操作决定了对象的一种行为。
(4)对象的操作可以分为两类:一类是自身所承受的操作,一类是施加于其他对象的操作。
例如:雇员刘名是一个对象对象名:刘名对象的属性:年龄:36 生日:1966.10.1 工资:2000 部门:人事部对象的操作:吃饭开车[1_4]什么是消息?消息具有什么性质?在面向对象程序设计中,一个对象向另一个对象发出的请求被称为“消息”。
Chap.1面向对象程序设计概述
[例1.1]输入一个日期并输出。 1.1]输入一个日期并输出。 输入一个日期并输出 #include<iostream.h> //定义一个Date结构体类型 定义一个Date struct Date //定义一个Date结构体类型 //成员有 成员有: { int year,month,day; //成员有:年、月、日 }; //输入过程的定义 void Input(Date *pd) //输入过程的定义 { cout<<"Please input year,month,day: "; cin>>pd->year>>pd->month>>pdcin>>pd->year>>pd->month>>pd->day; } //输出过程的定义 void Output(Date *pd) //输出过程的定义 cout<<pd->year<<"年"<<pd->month<<"月 { cout<<pd->year<<"年"<<pd->month<<"月“ <<pd->day<<"日 <<pd->day<<"日"<<endl; } void main() //定义一个结构体变量 { Date d; //定义一个结构体变量 //输入过程的调用 Input(&d); //输入过程的调用 //输出过程的调用 Output(&d); //输出过程的调用 }
c语言教学 面向对象程序设计概述
C++语言中的对象由描述对象状态的数据结构和 作用于这个数据结构上的方法(操作)构成,它们 都可以分为私有的和公有的两个部分,私有部分从 对象的外部不可直接访问,而公有部分可以由对象 的外部访问。C++语言中对象之间的相互联系和作用 通过对公有数据和方法(操作)的访问来实现。
例如对于某个人,它的属性可能是:
变缓冲区的管理方法,则第二个模块必须作相应的改变。如果数
据处理模块对缓冲区操作有误,将影响数据接收模块,在程序调 试时难以确定错误发生在哪一个模块中。实际上,数据处理模块 并不需要缓冲区的管理信息,它只需知道缓冲区中有没有数据以 及有什么样的数据。上面的处理方法违反了软件工程中的信息隐
藏原则,数据处理模块访问了它不需要的信息。
身高: 175 cm
年龄: 20
性别: 男
肤色: 黄色
它的公共操作可能是: 回答身高 回答年龄 回答性别 回答肤色
其它对象不能直接访问它的内部状态信息,只
能通过调用这些公共操作来访问该对象。
客观世界的同一对象在不同的应用系统中,由 于考察对象的角度不同,对其抽象的数据结构和操
作都可能是不同的。例如对于一个学生,在学籍管
代码,可以通过从已有的具有类似特性的类中
派生出一个类,继承原有类中的部分特性,再 加上所需的新的特性。
另外,人们在对客观世界的事物分类时,一个事物可能 属于多个类,具有多个类的特性。例如一个黑人学生,他既 属于学生类,又属于黑人类。这种情形在面向对象方法中称 为多继承,即一个类同时从多个类中派生出来,此时类的层 次结构是网状的。多继承在有些面向对象的程序设计语言中 是不允许的,C++语言允许多继承。只允许派生类有一个基 类称为单继承,单继承的类层次结构是树状的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
运算符重载:一个运算符可以同时应用于多种运算。
虚函数:(在一个类等级中可以使用相同函数的多个 版本,每一个版本的属于类等级中的不同的类)
继承和多态性组合,可以生成很多相似但又独 一无二的对象。继承性使得这些对象可以共享许 多相似特性,而多态又使同一个操作对不同对象 产生不同表现形式。这样不仅提高了程序设计的 灵活性,而且减轻了分别设计的负担。
“过程”通过特定规则组织起来的一些对象 “表现”出来的。面向对象和面向过程的这个 差别导致了整个分析设计方法的革命。
分析设计从过程分析变成了对象获取,从数据 结构变成了对象结构。
课程内容
➢ 程序设计方法 ➢ OOP的基本概念
➢ 对象与类 ➢ 数据的抽象和封装 ➢ 继承性 ➢ 多态性 ➢ 消息和方法
当对象们被按规则组合起来以后,就能表达预期的功能。其实世 界世界就是这样组成的。平时看上去每个对象都互无关系,然 而当它们按图示规则组织起来之后,踩下刹车,汽车便乖乖停 住了。
面向对象与面向过程根本区别:
不再把世界看作是一个紧密关联的系统,而是 看成一些相互独立的小零件,这些零件依据某 种规则组织起来,完成一个特定的功能。
对象的方法
方法:对象能执行的操作
对象实例
学生张三实体 对象的状态就是对象的属性值。 对象名:张三 对象的属性:
学号:100030 姓名:张三 年龄:20 性别:男 专业:计算机 年级:08级 家庭地址:湛江 对象操作: 显示学生信息 修改学生信息
实例:银行帐户
每个帐户是一个对象,包括
例如从学生张三、小李等实体中抽象出“学生” 类。
对象和类的关系
类的一个具体实现,称为实例
类
对象
描述这类对象共有的、本质的属性和行为
手机
实例
张三的手机
抽象出手机类,手机共有的开属性:屏幕、按 钮、内部结构 手机行为:接电话、打电话、 发信息等
对象和类的关系
类是对一组对象的抽象
这组对象具有相同的属性结构和操作行为
继承分类:单继承、多继承 单继承:每个派生类只直接继承了一个基类的特征。 多继承:多个继承派生出一个派生类的继承关系。
B1,B2的基类
A
A的派生类 C1,C2,C3的基类 B1
A的派生类(单继承) B2 C3的基类
B1的派生类 C1 C2 C3
B1,B2的派生类(多继承)
图1-1 类之间的继承与派生关系
类是一种新的数据类型
使用这种类型之前,先要在源程序中说明,说 明中的代码不会在内存中运行,它只在编译时 存在。
类的说明包括 属性的说明(数据成员的集合) 操作行为的说明(成员的集合)
定义类属性,根据系统目的来定
实例:
图书馆管理系统书类定义 属性: 书名 书号 作者 是否借出 行为 添加、修改、 删除图书信息
面向对象程序设计的特点
将数据和对数据的操作方法放在一起 形成一个独立的整体,对象(Object) 从同类对象中抽象出共性 形成类(Class) 一个类中的数据通常只能由本类提供的方法进
行处理 这些方法成为该类与外部的接口 对象之间通过消息(message)进行通讯(消息传
递—调用函数)
度慢
当定义了一个类后,又需定义一个新
小轿车 大客车
类,这个新类与原来的类相比,只是增
加或修改了部分属性和操作,这时可以
用原来的类派生出新类,新类中只需描
述自己所特有的属性和操作。
新类称为子类或派生类,原来的类称为基类。派生可以一直进行下去, 形成一个派生树。
继承性大大简化了对问题的描述,大大提高了程序的可重用性,从而 提高了程序设计、修改、扩充的效率。
第1章面向对象程序设计概述
准备知识—面向过程,面向对象
面向过程
面向对象
我们的精力有限,计算机能力有限,只能放弃对 整个过程的了解,重新寻找一个方法,能够将 复杂的系统转化为一个个我们可以控制的小单 元。
这个方法的转换正如:如果一次成型一辆汽车太 过困难,我们可以将汽车分解为很多零件,分 步制造,再依据预先设计好的接口把它们安装 起来,形成最终的产品。
抽象性、封装性、继承性、多态性
结构化程序设计
传统的程序设计方法可以归结为“程序=算法+ 数据结构”,将程序定义为处理数据的一系列 过程。这种设计方法的着眼点是面向过程的, 特点是将数据与程序分开存储,即数据与数据 处理分离。
结构化程序设计的基本思想是采用自顶向下、 逐步细化的设计方法和单入单出的控制结构。
课后练习
用c语言实现,两个整数相加,并用系统验证 结果
请指出下图中多继承是哪个对象,哪个是基类
A
B
C
D
E
1、读入整数
2、统计正数、 负数的个数
3、输入结果
正数和负数的个数为0
重复 至统 计完
取第一个整数
2.1如数大于0,正数个数加1 2.2如数小于0,负数个数加1 2.3取下一个整数
结构化程序设计的总结
为复杂问题处理提供很好的手段,但到80年代 末,这种设计方法逐渐暴露出以下缺陷:
(1)但是难用于开发大型软件 (2)可维护性差,可重用性差
面向对象的特点
多态性
多态性指,同一个消息被不同对象接收时,产生不同 结果,即实现同一接口,不同方法。
计 算 高中生 平均成绩
语文、数学、英语、政治、 物理、化学、生物
面向对象的特点
多态性
多态性指,同一个消息被不同对象接收时,产生不同 结果,即实现同一接口,不同方法。
计 算 大学生 平均成绩
高数、英语、计算机、线 性代数
购书管理系统书类定义 属性: 书名 书号 作者 书的单价 行为 添加、修改、 删除图书信息
消息传递
消息
我们把对象之间产生相互作用所传递的信息称做消息。
发送消息
接收并响应消息
启转 动向
消息特点:
1、对象可以接收多个信息,作出多个反应。 2、不同对象对相同消息的反应不同。 3、消息的响应不是必需的。
帐户数据
帐户号、姓名、余额等
对数据的操作
存款、取款、转帐。用函数来实现
所有的帐户具有相同的数据属性各操作
可抽象出银行帐户类 因此,每一个银行帐户是银行帐户类的一个实
例,在面向对象程序设计中,称每一个银行帐 户是银行帐户类的一个对象。
类
对一组有共同的属性特征和行为特征的对象的 抽象
是一个抽象的概念,用来描述某一类对象所共 有的,本质的属性和行为(方法)。
对象是类的一个实例
有了类,才能创建对象 类是创建对象的样板,它包括
对创建对象的属性描述 对操作行为的说明
如:类---建设图纸 对象----按该建设图纸建起的房子
对象是程序运行时存在的实体
类是抽象的,不占用内存空间。对象和变量一 样占有内存空间,程序的计算任务是对过对象 调用它相应的操作行为来写成的。
面向对象的特点
函数重载或运算符重载(相同名字的函数在不同的场 合可以表现出不同的行为)
函数重载:一个标识符号可以同时为多个函数命名
void print(int i){语句段1};
void print(float i){语句段2};
print(20.0)
void print(const char*c){语句段3};
面向对象的特点
抽象:通过特定的实例(对象)抽取共同的性质
以后形成概念的过程。包括数据抽象和行为抽 象。 例如:学籍管理程序: 1、共同属性:姓名、学号、成绩 Char *name; int number; float score; 2、共同行为:数据的录入、数据修改和数据的输 出。 Input(); modify(); print();
面向对象的特点
封装:把对象的全部属性和全部服务结合在一起, 形成一个不可分割的独立实体.用户不能直接操作 数据,必须通过和数据相关的操作来访问数据。
数据隐藏:对象内部数据结构的不可访问性称为数据 隐藏。
面向对象的特点
汽车
继承与派生
以汽车为例看客观世界描述事物的方式: 面向对象程序设计提供了类似的机制:小,速度快
程序设计方法
结构化程序设计(C、PASCAL、Ada) Structured Programming,SP 是面向过程的程序设计 功能分解,逐步求精 可重用性极差
面向对象程序设计(C++、JAVA语言、Smalltalk 语言等)
Object Oriented Programming,OOP 把信息和对这些信息的处理作为一个整体 特点
程序主要特征是,程序由过程的定义和过程的 调用组成,即程序=过程+调用
面向过程程序的结构特点
程序
模块 1
模块 2
模块 3
1.1 1.2 1.3 2.1 2.2 3.1 3.2
1.3.1 1.3.2 1.3.3
3.1.1 3.1.2
实例
要求读入一组整数,统计其中正整数和负整数 的个数
该任务的模块结构及细化过程如下
对象
属性
表针 旋钮 其他机械机构
行为 调节旋钮
对象的定义
现实世界中的一个实体,可以是
有形的具体的事物,无形的抽象的事件
对象的特性
每个对象都有一个名字,以同其它对象区别 对象的特征(状态)用属性来描述 对象有一组操作 每一个操作决定对象的一种行为
一个对象是由描述其属性的数据和定义在其上面的一 组操作组成的实体,是构成系统的一个基本单位。
面向对象方法:
面向对象方法将世界看作一个个相互独立的对 象,相互之间并无因果关系。只有在某个外部 力量驱动下,对象之间才会依据某种规律相互 传递信息。这些交互构成了这个生动世界的一 个“过程”。在没有外力的情况下,对象则保 持着“静止”的状态。
如上图,汽车不再被看作一个一次成型的整体,而是被分解成了 许多标准的功能部件来分步设计制造。