1、面向对象程序设计编程语言的发展史编程语言的发展史机器语言机器语言汇编语言汇编语言高级语言高级语言面向对象语言面向对象语言编程语言的发展史编程语言的发展史机器语言机器语言汇编语言汇编语言高级语言高级语言面向对象语言面向对象语言指令指令序号序号机器语言机器语言程序程序指令功能指令功能1 110110000101100000000100000001000把数字把数字8 8送到累加器送到累加器ALAL中中2 200000100000001000000100100001001ALAL中的内容与数字中的内容与数字9 9相加,相加,结果存入累加器结果存入累加器ALAL3 31111010011110100停
2、止操作停止操作 机器语言是由一连串机器语言是由一连串机器指令序机器指令序列列形成的程序设计工具。形成的程序设计工具。编程语言的发展史编程语言的发展史机器语言机器语言汇编语言汇编语言高级语言高级语言面向对象语言面向对象语言 汇编语言是机器语言的符号化表示。汇编语言是机器语言的符号化表示。语句语句序号序号汇编语言汇编语言程序程序语句功能语句功能1 1MOV AL,8MOV AL,8把数字把数字8 8送到累加器送到累加器ALAL中中2 2ADD AL,9ADD AL,9ALAL中的内容与数字中的内容与数字9 9相加,相加,结果存入累加器结果存入累加器ALAL3 3HLTHLT停止操作停止操作编程语言
3、的发展史编程语言的发展史机器语言机器语言汇编语言汇编语言高级语言高级语言面向对象语言面向对象语言 高级语言采用人类语言和表达习高级语言采用人类语言和表达习惯的符号和表达式来编制程序惯的符号和表达式来编制程序C C语语言言程程序序main()main()intint al;al;al=8+9;al=8+9;printfprintf(“%d%dn n”,al,al););?编程语言的发展史编程语言的发展史机器语言机器语言汇编语言汇编语言高级语言高级语言面向对象语言面向对象语言第一章 面向对象程序设计概述面向对象思想的由来面向对象思想的由来面向对象程序设计语言面向对象程序设计语言面向对象的基本概念面
4、向对象的基本概念面向对象程序的特性面向对象程序的特性面向对象的程序设计面向对象的程序设计1.1 面向对象思想的由来 软件危机首次爆发于二十世纪六十年代。在大型程序设计中,人们发现投入大量的人力、物力、时间开发出的软件,其成本、效率、质量等方面却处于失控状态,尤其软件维护异常困难。程序的修改扩充往往需要大量重复性投入。1.1 面向对象思想的由来2 2 软件是一种逻辑产品而非物理产品,软件的软件是一种逻辑产品而非物理产品,软件的开发过程本质上是人的思考过程。开发过程本质上是人的思考过程。3 3 人的智力在面对越来越复杂的问题时,处理人的智力在面对越来越复杂的问题时,处理问题的效率会越来越低。问题的
5、效率会越来越低。1 1 软件开发者不熟悉用户问题的领域,或没有软件开发者不熟悉用户问题的领域,或没有理解用户需求,软件产品与要求不一致。理解用户需求,软件产品与要求不一致。1.1 面向对象思想的由来 结构化程序设计的基本思想是采用结构化程序设计的基本思想是采用的设计方法和的设计方法和的控制结构。这种的控制结构。这种设计方法的着眼点是设计方法的着眼点是面向过程面向过程的,特点是将数据与的,特点是将数据与程序分开存储,即数据与数据处理程序分开存储,即数据与数据处理分离分离。1.1 面向对象思想的由来1.1 面向对象思想的由来模块模块 22.12.2模块模块 11.21.11.31.3.11.3.2
6、1.3.3模块模块 33.13.23.1.13.1.2 程程 序序 例如:输入一组整数,统计正整数和负整例如:输入一组整数,统计正整数和负整数的个数。按照结构化程序设计的思想,可以数的个数。按照结构化程序设计的思想,可以将其拆分为以下的子任务:将其拆分为以下的子任务:1.1.读入数据;读入数据;2.2.统计正数、负数的个数统计正数、负数的个数;3.3.输出结果;输出结果;正整数个数为正整数个数为0 0;负整数个数;负整数个数0 0;取第一个整数:取第一个整数:1 1 如果该数大于如果该数大于 0 0,正整数个数加,正整数个数加1 1;2 2 如果该数小于如果该数小于0 0,负整数个数加,负整数
7、个数加1 1;3 3 取下一个整数;取下一个整数;重复至重复至统计完统计完例如:一个简单的学生成绩管理系统用来管理例如:一个简单的学生成绩管理系统用来管理若干个学生的信息。若干个学生的信息。包括学号、姓名、某门课包括学号、姓名、某门课的平时成绩、期末成绩、总评成绩和名次。的平时成绩、期末成绩、总评成绩和名次。例如:一个简单的学生成绩管理系统用来管理若例如:一个简单的学生成绩管理系统用来管理若干个学生的信息。干个学生的信息。主要操作:成绩的录入、计算、排名、输出。主要操作:成绩的录入、计算、排名、输出。总评成绩总评成绩=平时成绩平时成绩*0.3+期末成绩期末成绩*0.7。例如:一个简单的学生成绩
8、管理系统用来管例如:一个简单的学生成绩管理系统用来管理若干个学生的信息。理若干个学生的信息。1.1 面向对象思想的由来 面向对象面向对象技术追求的是软技术追求的是软件系统对现实世界的直接模拟,件系统对现实世界的直接模拟,尽量实现将现实世界中的事物直尽量实现将现实世界中的事物直接映射到软件系统的解空间。接映射到软件系统的解空间。1.1 面向对象思想的由来物质物质:一辆白色一辆白色 的自行车的自行车意识意识:自行车自行车具体事物具体事物:“对象对象”自行车类的实例自行车类的实例抽象概念抽象概念:“类类”自行车类自行车类现实问题空间现实问题空间面向对象解空间面向对象解空间1.1 面向对象思想的由来抽
9、象性抽象性事物共有的事物共有的属性和状态属性和状态事物共有的事物共有的行为或功能行为或功能问题空间:企业员工工资管理系统问题空间:企业员工工资管理系统员工类员工类工作编号;工作编号;姓名;姓名;基本工资;基本工资;出勤率出勤率;设置基本工资;设置基本工资;查询基本工资;查询基本工资;计算实发工资;计算实发工资;类名类名设置基本工资;设置基本工资;查询基本工资;查询基本工资;计算实发工资;计算实发工资;设置基本工资;设置基本工资;查询基本工资;查询基本工资;计算实发工资;计算实发工资;设置基本工资;设置基本工资;查询基本工资;查询基本工资;计算实发工资;计算实发工资;操作操作设置基本工资;设置基
10、本工资;查询基本工资;查询基本工资;计算实发工资;计算实发工资;属性属性设置基本工资;设置基本工资;查询基本工资;查询基本工资;计算实发工资;计算实发工资;工作编号;工作编号;姓名;姓名;基本工资;基本工资;出勤率出勤率;设置基本工资;设置基本工资;查询基本工资;查询基本工资;计算实发工资;计算实发工资;工作编号;工作编号;姓名;姓名;基本工资;基本工资;出勤率出勤率;l 数据抽象数据抽象:int m_iStaffNum/工作编号工作编号 char m_pName/姓名姓名 float m_fBasicSal/基本工资基本工资 float m_fRateOfAttend/出勤率出勤率 l 行为
11、抽象行为抽象:SetBasicSal()/设置基本工资设置基本工资 GetBasicSal()/查询基本工资查询基本工资 CalculateSal()/计算实际发放工资计算实际发放工资 public:void readData();void calcuScore();void printOut();friend void sortScore(SS stu,int n);例如:一个简单的学生成绩管理系统用来管例如:一个简单的学生成绩管理系统用来管理若干个学生的信息。理若干个学生的信息。例如:一个简单的学生成绩管理系统用来管例如:一个简单的学生成绩管理系统用来管理若干个学生的信息。理若干个学生的信
12、息。程序程序=对象对象+消息消息1.2 面向对象的基本概念 一般意义上的一般意义上的对象对象指的是一个实体指的是一个实体的实例,在这个实体中包括了特定的的实例,在这个实体中包括了特定的数数据据和和对这些数据的操作对这些数据的操作。1.2 面向对象的基本概念1.2 面向对象的基本概念r1.2 面向对象的基本概念 特点特点1.以数据为中心。以数据为中心。对象是由数据及有权对这些数据施加的对象是由数据及有权对这些数据施加的操作组成的统一体,这些操作围绕着对其数操作组成的统一体,这些操作围绕着对其数据所需进行的处理来设置,操作的结果也与据所需进行的处理来设置,操作的结果也与这些数据的值相关。这些数据的
13、值相关。1.2 面向对象的基本概念 特点特点2.对象是主动的。对象是主动的。对象是进行处理的主体。当系统需要完对象是进行处理的主体。当系统需要完成某对象内部的某个操作时,不能从外部直成某对象内部的某个操作时,不能从外部直接加工该对象自己的数据,而是必须通过公接加工该对象自己的数据,而是必须通过公共接口向该对象发消息,请求该对象执行某共接口向该对象发消息,请求该对象执行某个操作,处理相关的数据。个操作,处理相关的数据。1.2 面向对象的基本概念 特点特点3.实现了数据封装。实现了数据封装。对象的数据和操作完全被封装在对象的对象的数据和操作完全被封装在对象的内部,对外是隐蔽、不可见的。对对象内部内
14、部,对外是隐蔽、不可见的。对对象内部数据的访问和处理只能通过共有的操作进行。数据的访问和处理只能通过共有的操作进行。1.2 面向对象的基本概念 特点特点4.本质上具有并行性。本质上具有并行性。不同对象各自独立地处理自身的数据,不同对象各自独立地处理自身的数据,彼此通过发消息传递信息完成通信。彼此通过发消息传递信息完成通信。1.2 面向对象的基本概念 特点特点5.模块性好。模块性好。对象是面向对象软件系统的基本模块,对象是面向对象软件系统的基本模块,对象的操作围绕着对其内部数据所需进行的对象的操作围绕着对其内部数据所需进行的处理来设置,没有无关的操作。处理来设置,没有无关的操作。1.2 面向对象
15、的基本概念1.2 面向对象的基本概念object 1object 21.2 面向对象的基本概念1.2 面向对象的基本概念r1r2r3obj1obj2obj31.2 面向对象的基本概念自行车对象自行车对象数据抽象数据抽象自行车类自行车类属性属性:架子尺寸:架子尺寸 车轮尺寸车轮尺寸 颜色颜色 原材料原材料操作操作:转弯:转弯 移动移动 修理修理1.2 面向对象的基本概念对象类1.2 面向对象的基本概念教师教师1教师教师2教师教师3教师教师N属性:属性:行为:行为:教师号教师号 获取教师号获取教师号姓名姓名 获取姓名获取姓名年龄年龄 获取年龄获取年龄 职称职称 获取职称获取职称对象对象(教师教师1
16、)对象对象(教师教师2)对象对象(教师教师3)对象对象(教师教师N)教师群体教师群体教师类教师类对象对象1.2 面向对象的基本概念 对于同一类的不同实例之间,必定具有:对于同一类的不同实例之间,必定具有:l 相同的操作集合相同的操作集合l 相同的属性集合相同的属性集合l 不同的对象名称不同的对象名称1.2 面向对象的基本概念object 1object 21.2 面向对象的基本概念如:如:MyCircle.Show(Red)1.2 面向对象的基本概念1.3 面向对象程序的特性圆圆圆圆心位置圆心位置半径半径颜色颜色移动移动面积面积接口接口1.3 面向对象程序的特性 一个清楚的边界,封装的基本单位
17、是对象;一个清楚的边界,封装的基本单位是对象;具有确定接口,这个接口描述该对象与其他具有确定接口,这个接口描述该对象与其他对象之间的相互作用;对象之间的相互作用;受保护的内部实现,提供对象的相应软件功受保护的内部实现,提供对象的相应软件功能细节。能细节。object封装性的条件:封装性的条件:1.3 面向对象程序的特性class CCompanyStaff /封装单元(类)封装单元(类)/*行为封装行为封装*/public:/外部接口标志外部接口标志void SetBasicSal(float);/设置基本工资设置基本工资 float GetBasicSal(void);/查询基本工资查询基本
18、工资float CalculateSal(float,float);/计算实际发放工资计算实际发放工资 /*数据封装数据封装*/private:/内部隐藏标志内部隐藏标志int m_iStaffNum;/工作编号工作编号char m_pName;/姓名姓名float m_fRateOfAttend;/出勤率出勤率float m_fBasicSal;/基本工资基本工资;1.3 面向对象程序的特性1.3 面向对象程序的特性 子类子类继承部分继承部分个性部分个性部分父类父类共性部分共性部分1.3 面向对象程序的特性1.3 面向对象程序的特性单继承单继承多重继承多重继承设备设备输出设备输出设备I/OI
19、/O设备设备输入设备输入设备1.3 面向对象程序的特性人人工人工人学生学生教师教师农民农民小学生小学生中学生中学生大学生大学生研究生研究生助教助教讲师讲师教授教授1.3 面向对象程序的特性1.3 面向对象程序的特性大学生中学生继承计算成绩计算成绩语文数学英语高等数学计算机普通物理1.3 面向对象程序的特性1.3 面向对象程序的特性1.4 面向对象的程序1.4 面向对象的程序 面向对象分析就是面向对象分析就是抽取和整理用户需求抽取和整理用户需求并并建立问题域精确模型的过程。面向对象分析建立问题域精确模型的过程。面向对象分析的关键工作,是分析确定问题域中的的关键工作,是分析确定问题域中的对象及对象
20、及对象间的关系对象间的关系,从而建立起问题域的对象模型。从而建立起问题域的对象模型。1.4 面向对象的程序 在显示器荧光屏上圆心坐标为(在显示器荧光屏上圆心坐标为(100100,100100)的位置)的位置上,画一个半径为上,画一个半径为4040的圆,在圆心坐标为(的圆,在圆心坐标为(200200,300300)的位置上,画一个半径为的位置上,画一个半径为2020的圆,在圆心坐标为的圆,在圆心坐标为(400400,150150)的位置上,画一条弧,弧的起始角度为)的位置上,画一条弧,弧的起始角度为3030,结束角度为,结束角度为120120,半径为,半径为5050。弧弧圆心坐标圆心坐标半径半径
21、起始角度起始角度结束角度结束角度可见性可见性圆圆圆心坐标圆心坐标半径半径可见性可见性 注意:注意:不可能在需求陈述中找到所有属性,还必须借助不可能在需求陈述中找到所有属性,还必须借助领域知识和常识,才能分析得出所需要的全部属性,圆领域知识和常识,才能分析得出所需要的全部属性,圆和弧都应该再增加一个属性和弧都应该再增加一个属性可见性可见性。圆圆圆心坐标圆心坐标半径半径可见性可见性读读/写圆心坐标写圆心坐标读读/写半径写半径读读/写可见性写可见性显示显示隐藏隐藏弧弧圆心坐标圆心坐标半径半径起始角度起始角度结束角度结束角度可见性可见性读读/写圆心坐标写圆心坐标读读/写半径写半径读读/写起始角度写起始
22、角度读读/写结束角度写结束角度读读/写可见性写可见性显示显示隐藏隐藏1.4 面向对象的程序1.4 面向对象的程序1.4 面向对象的程序1.5 面向对象程序设计语言 从从20世纪世纪60年代开始,先后出现了年代开始,先后出现了Simula、Smalltalk、Object-C、Eiffel、Ada、C+和和Java等面向对象的程序设计等面向对象的程序设计语言,每种语言各有其优势和应用领域。语言,每种语言各有其优势和应用领域。Simula67语言语言:20世纪世纪60年代开发,被认为是面向年代开发,被认为是面向对象程序设计语言的鼻祖,它提供了对对象程序设计语言的鼻祖,它提供了对象、类、继承的概念,
23、提出了面向对象象、类、继承的概念,提出了面向对象的术语,面向对象程序设计的许多原始的术语,面向对象程序设计的许多原始思想都来源于此语言。思想都来源于此语言。1.5 面向对象程序设计语言Smalltalk语言语言:从从20世纪世纪70年代开始开发,它完整年代开始开发,它完整体现了来自于体现了来自于Simula以及其他早期原型以及其他早期原型语言中面向对象的概念,历经了语言中面向对象的概念,历经了Smalltalk-72、Smalltalk-76和和Smalltalk-80几个版本,现在一般用几个版本,现在一般用Smalltalk-80。1.5 面向对象程序设计语言Object-C语言语言:198
24、3年左右开发,它在年左右开发,它在C语言的基语言的基础上进行了扩充,通过新引入的构造和础上进行了扩充,通过新引入的构造和运算符来完成类定义和消息传递,其语运算符来完成类定义和消息传递,其语法更像法更像Smalltalk。1.5 面向对象程序设计语言Eiffel语言语言:从理论上讲是最好的面向对象的程从理论上讲是最好的面向对象的程序设计语言,它除了封装和继承,还集序设计语言,它除了封装和继承,还集成了几个强有力的面向对象的特征,如成了几个强有力的面向对象的特征,如参数化多态性、对方法实施前置条件和参数化多态性、对方法实施前置条件和后置断言等。后置断言等。1.5 面向对象程序设计语言Ada 语言语
25、言:开发工作始于开发工作始于1975年,其语法严谨、年,其语法严谨、书写优美、可读性强,它提供了一系列书写优美、可读性强,它提供了一系列 功能来定义相关的数据类型功能来定义相关的数据类型(type)、对象、对象 (object)和操作和操作(operation)的程序包的程序包 (package),一度被美国国防部强制指定,一度被美国国防部强制指定 为军用武器系统的唯一开发语言。为军用武器系统的唯一开发语言。1.5 面向对象程序设计语言Java 语言语言:由由SUN公司在公司在20世纪世纪90年代初开发的年代初开发的 一种面向对象的程序设计语言,其优点是一种面向对象的程序设计语言,其优点是 简
26、单、面向对象、不依赖于硬件结构、可简单、面向对象、不依赖于硬件结构、可 移植性强、安全性高、能最大限度地利用移植性强、安全性高、能最大限度地利用 网络,因此被广泛用于网络编程。网络,因此被广泛用于网络编程。1.5 面向对象程序设计语言C C语言的设计者语言的设计者1.5 面向对象程序设计语言1.5 面向对象程序设计语言1.面向对象程序设计将数据与面向对象程序设计将数据与 放在一放在一 起,做为一个相互依存、不可分割的整体起,做为一个相互依存、不可分割的整体 来处理。来处理。A 对数据的操作对数据的操作B 信息信息C 数据隐藏数据隐藏D 数据抽象数据抽象A2 下列描述中,哪一个不是面向对象方法的主下列描述中,哪一个不是面向对象方法的主要特性?要特性?。A 封装性封装性B 抽象性抽象性C 继承性继承性D 多态性多态性B3 关于对象的描述中,关于对象的描述中,是错误的。是错误的。A 对象之间的信息传递是通过消息进行的对象之间的信息传递是通过消息进行的B 对象是属性和操作的封装体对象是属性和操作的封装体C 对象就是对象就是C语言中的结构类型语言中的结构类型D 对象是某个类的一种实例对象是某个类的一种实例C