面向对象程序设计概述
结构化程序设计
程序
模块 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
例如:输入一组整数,统计正整数和负整 数的个数。按照结构化程序设计的思想,可以 将其拆分为以下的子任务:
1. 读入数据; 2.统计正数、负数的个数;
每个对象由对象标识符唯一标识
§1.2 面向对象的基本概念
对象(object)
圆
对象名
圆心位置
半径
属性
颜色
r
移动 面积
操作
§1.2 面向对象的基本概念
对象(object)
特点1. 以数据为中心。
对象是由数据及有权对这些数据施加的 操作组成的统一体,这些操作围绕着对其数 据所需进行的处理来设置,操作的结果也与 这些数据的值相关。
§1.2 面向对象的基本概念
类(class)
r3
r1
r2
obj1
obj2
obj3
类是对具有相同属性和方法的一组相似 对象的抽象描述。
§1.2 面向对象的基本概念
自行车对象
数据抽象
自行车类
属性:架子尺寸 车轮尺寸 颜色 原材料
操作:转弯 移动 修理
§1.2 面向对象的基本概念
类(class)
类
对象
AL中的内容与数字9相 加,结果存入累加器AL
编程语言的发展史
机器语言
汇编语言 高级语言 面向对象语言
汇编语言是机器语言的符号化表示。
语句 序号
1
2 3
汇编语言 程序
MOV AL,8
ADD AL,9
HLT
语句功能
把数字8送到累加器AL 中
AL中的内容与数字9相 加,结果存入累加器AL
停止操作
编程语言的发展史
消息(message)
消息有三部分组成:① 接收消息的对象 ② 消息名 ③ 零个或多个变元
如:MyCircle.Show(Red)
§1.2 面向对象的基本概念
消息(message)
同一对象可接收不同形式的多个消息,产生 不同的响应; 同一个消息可以发给不同的对象,所做出的 响应可以截然不同; 发送方不需要知道接受方如何对请求予以响 应的。
机器语言
汇编语言 高级语言 面向对象语言
高级语言采用人类语言和表达习 惯的符号和表达式来编制程序
C main() 语 { int al; 言 al=8+9; 程 printf(“%d\n”,al); 序}
编程语言的发展史
机器语言 汇编语言 高级语言 面向对象语言
?
第一章 面向对象程序设计概述
面向对象思想的由来 面向对象的基本概念 面向对象程序的特性 面向对象的程序设计 面向对象程序设计语言
§1.3 面向对象程序的特性
class CCompanyStaff
//封装单元(类)
{/* 行为封装 */
public:
//外部接口标志
void SetBasicSal( float ); //设置基本工资
float GetBasicSal ( void ); //查询基本工资
float CalculateSal( float, float ); //计算实际发放工资
特点3. 实现了数据封装。
对象的数据和操作完全被封装在对象的 内部,对外是隐蔽、不可见的。对对象内部 数据的访问和处理只能通过共有的操作进行。
§1.2 面向对象的基本概念
对象(object)
特点4. 本质上具有并行性。
不同对象各自独立地处理自身的数据, 彼此通过发消息传递信息完成通信。
§1.2 面向对象的基本概念
§1.2 面向对象的基本概念
对象(object)
特点2. 对象是主动的。
对象是进行处理的主体。当系统需要完 成某对象内部的某个操作时,不能从外部直 接加工该对象自己的数据,而是必须通过公 共接口向该对象发消息,请求该对象执行某 个操作,处理相关的数据。
§1.2 面向对象的基本概念
对象(object)
例如:一个简单的学生成绩管理系统用来管 理若干个学生的信息。
class SS { private:
char number[10]; char name[10]; int dailyScore; int finalScore ; float generalScore; int place ;
public: void readData( ); void calcuScore( ); void printOut( ); friend void sortScore(SS stu[ ],int n) ; };
3. 输出结果;
正整数个数为0;负整数个数0;
取第一个整数:
重复至 统计完
1 如果该数大于 0,正整数个数加1; 2 如果该数小于0,负整数个数加1; 3 取下一个整数;
例如:一个简单的学生成绩管理系统用来管理 若干个学生的信息。包括学号、姓名、某门课 的平时成绩、期末成绩、总评成绩和名次。
typedef struct studentScore
§1.1 面向对象思想的由来
软件危机
软件危机首次爆发于二十世纪六十年代。 在大型程序设计中,人们发现投入大量的人力、 物力、时间开发出的软件,其成本、效率、质 量等方面却处于失控状态,尤其软件维护异常 困难。程序的修改扩充往往需要大量重复性投 入。
§1.1 面向对象思想的由来
软件危机产生的原因
1 软件开发者不熟悉用户问题的领域,或没有 理解用户需求,软件产品与要求不一致。
/* 数据封装 */
❖可重用性差 ❖可维护性差
§1.1 面向对象思想的由来
面向对象技术追求的是软件 系统对现实世界的直接模拟,尽 量实现将现实世界中的事物直接 映射到软件系统的解空间。
§1.1 面向对象思想的由来
现实问题空间
面向对象解空间
➢物质: 一辆白色 的自行车
➢意识: 自行车
抽象性
➢具体事物: “对象”—— 自行车类的实例
语言支持 Pascal、 C C++、Java
§1.1 面向对象思想的由来
结构化程序设计
程序 = 算法 + 数据结构
结构化程序设计的基本思想是采用自顶向下、逐 步细化的设计方法和单入单出的控制结构。这种设 计方法的着眼点是面向过程的,特点是将数据与程 序分开存储,即数据与数据处理分离。
§1.1 面向对象思想的由来
for (i=0;i<n; i++) stu[i].calcuScore( );
sortScore( stu,5) ;
for (i=0;i<n;i++) stu[i].printOut( );
}
• 若在类SS中增加 int experiScore; 表示实验成绩,总评成绩 计算方法改变,则类的成员函数代码需做相应地改造,但
主函数的代码不需做任何变动。
§1.2 面向对象的基本概念
对象(object)
一般意义上的对象指的是一个实体 的实例,在这个实体中包括了特定的数 据和对这些数据的操作。
§1.2 面向对象的基本概念
对象(object)
封装的实体 = 数据+方法(操作)
数据:属性或状态 方法:作用于数据上的操作 封装:属性的访问和变化通过方法完成
学生的总评成绩计算方法修改为: • 总评成绩=平时成绩*0.2+实验成绩*0.2+期末
成绩*0.6。 • 显然,类型SS中需要增加一个数据项
int experiScore; 表示实验成绩。同时,所 有的函数代码都应该作相应地修改
§1.1 面向对象思想的由来
结构化程序设计
缺点
❖以过程为中心,打破事物间的相互 关联,给后续开发带来困难
面向对象程序设计
编程语言的发展史
机器语言 汇编语言 高级语言 面向对象语言
编程语言的发展史
机器语言 汇编语言 高级语言 面向对象语言
机器语言是由一连串机器指令序 列形成的程序设计工具。
指令 序号
1
2
机器语言 程序
1011000 0
0000100 0
0000010 0
0000100 1
指令功能
把数字8送到累加器AL 中
void sortScore(SS stu[ ],int n);
//根据总评成绩排名,得出每个学生的place值
void printOut(SS stu[ ],int n);
//按一定的格式输出n个学生的完整信息
例如:一个简单的学生成绩Βιβλιοθήκη 理系统用来管 理若干个学生的信息。
• 现在,需求改变了: • 在C语言课程中,需要增加实验成绩这一项,
o 类与对象的关系 • 类是对象的抽象 • 对象是类的实例
§1.2 面向对象的基本概念
教师群体
教师类
教师1 教师2 教师3
…
教师N
属性: 行为:
教师号 获取教师号
姓名 获取姓名
年龄 获取年龄
…
…
职称 获取职称
对象
对象(教师1) 对象(教师2) 对象(教师3)
…
对象(教师N)
§1.2 面向对象的基本概念
§1.2 面向对象的基本概念
方法(Method)
• 描述对象的动态特征或行为 是对象与外界的接口
• 作用
– 改变对象的属性 – 返回对象的属性
object 1 object 2
§1.2 面向对象的基本概念
方法(Method)
• 操作的方式
以某种方式操纵数据的操作(如增、删、 查询、选择);