《面向对象程序设计概念PPT课件》由会员分享,可在线阅读,更多相关《面向对象程序设计概念PPT课件(37页珍藏版)》请在金锄头文库上搜索。
1、面向对象程序设计概念面向对象程序设计概念西安电子科技大学计算机学院西安电子科技大学计算机学院王煦王煦课程内容课程内容lJava概述概述l面向对象程序设计概念面向对象程序设计概念lJava语言基础语言基础lJava面向对象特性面向对象特性lJava高级特征高级特征l常用预定义类的使用常用预定义类的使用l异常处理异常处理lI/Ol线程线程lGUI程序设计程序设计lJava网络程序设计网络程序设计l“我们之所以将自然界分解、组织成各我们之所以将自然界分解、组织成各种概念,并按其含义分类,主要是因为种概念,并按其含义分类,主要是因为我们是整个口语交流社会共同遵守的协我们是整个口语交流社会共同遵守的协定
2、的参与者,这个协定以语言的形式固定的参与者,这个协定以语言的形式固定下来定下来除非赞成这个协定中规定的除非赞成这个协定中规定的有关语言信息的组织和分类,否者我们有关语言信息的组织和分类,否者我们根本无法交谈根本无法交谈”Benjamin Lee Whorf (1897-1941)为什么程序难写?为什么程序难写?问题机器模型问题空间解空间编程语言0000 8B C3 MOV AX,BX0002 8A CE MOV CL,DH0004 43 INC BXif(aiai+1) swap(&ai, &ai+1);People people=new People();people.drink(water
3、);AssemblyCJava目标问题的结构计算机的结构面向对象程序设计面向对象程序设计(OOP)(OOP)lOOP is a programming paradigm using objects data structures consisting of data fields and methods together with their interactions to design applications and computer programs.- http:/en.wikipedia.orgl面向对象程序设计是使用面向对象程序设计是使用“对象对象”设计程序的设计程序的编编程范式程
4、范式对象是由数据字段、方法及它们之间的交互组成的对象是由数据字段、方法及它们之间的交互组成的数数据结构据结构l允许根据问题来描述问题,而不是根据运行解决允许根据问题来描述问题,而不是根据运行解决方案的计算机来描述问题方案的计算机来描述问题面向对象程序设计的发展面向对象程序设计的发展l60年代后期,年代后期,Simula-67语言引入类和实例的概念,语言引入类和实例的概念,采用采用class关键字定义新的类型关键字定义新的类型l70年代,年代,Alan Kay研制了研制了Smalltalk,并于,并于1980年年首度对外发布,标志着首度对外发布,标志着OOP思想的确立思想的确立l80年代初,年代
5、初,Bjarne Stroustrup研制了研制了C+,80年年代末到代末到90年代初开始流行年代初开始流行l1995:James Gosling研制了研制了Java面向对象问题求解面向对象问题求解问题机器模型问题空间解空间编程语言问题机器模型问题空间解空间编程语言概念模型概念空间建模语言实体问题空间解空间转换抽象数据类型概念空间抽象类对象实例化抽象 映射引入概念空间:引入概念空间:面向对象程序设计的特征面向对象程序设计的特征lAlan Kay的的OOP五大原则:五大原则:一切皆对象一切皆对象程序是一系列对象的组合,对象间通过消息传递进行程序是一系列对象的组合,对象间通过消息传递进行联系联系每
6、个对象都有自身内存空间,可容纳其他对象每个对象都有自身内存空间,可容纳其他对象每个对象都有一种类型每个对象都有一种类型同一类型的所有对象都能够接收相同的消息同一类型的所有对象都能够接收相同的消息l面向对象方法的核心概念:抽象、对象、类、封面向对象方法的核心概念:抽象、对象、类、封装、继承和多态装、继承和多态l抽象抽象l对象对象l类类l封装封装l继承继承l多态多态什么是抽象?什么是抽象?l抽象是一种抽象是一种设计技术设计技术用以说明一个实体的本质方面,而忽略或掩盖其非本用以说明一个实体的本质方面,而忽略或掩盖其非本质方面质方面l抽象是一种抽象是一种工具工具用以将复杂现象简化到可以分析、实验或者可
7、以理解用以将复杂现象简化到可以分析、实验或者可以理解的程度的程度抽象的作用抽象的作用l简化:识别重要细节,忽略无关细节简化:识别重要细节,忽略无关细节l过滤问题空间中模型的无关侧面过滤问题空间中模型的无关侧面抽象的作用抽象的作用l抽象是抽象是OOP的基础的基础单个实体可能有多种抽象单个实体可能有多种抽象OOP过程需要确定将哪些属性和行为包括在给定的抽过程需要确定将哪些属性和行为包括在给定的抽象中象中l抽象是抽象是对象对象与与类类联系的关键联系的关键通过在抽象基础上对抽象结果的组织来联系通过在抽象基础上对抽象结果的组织来联系l抽象抽象l对象对象l类类l封装封装l继承继承l多态多态对象对象l对象是
8、对象是问题空间中可以明确标识的实体问题空间中可以明确标识的实体问题空间的实体或概念在解空间中的问题空间的实体或概念在解空间中的抽象抽象表示表示l对象的组成对象的组成对象对象 = 状态(特征、数据、属性)状态(特征、数据、属性)状态(特征、数据、属性)状态(特征、数据、属性) + 行为(动作、操作、服务)行为(动作、操作、服务)行为(动作、操作、服务)行为(动作、操作、服务) (+ 标识标识,Booch)状态:状态:具有当前值的数据域具有当前值的数据域(Java:成员变量):成员变量)行为:用于行为:用于设置或改变对象的状态,或对外提供一种设置或改变对象的状态,或对外提供一种服务服务(Java:
9、方法):方法)对象对象l状态与行为之间的关系状态与行为之间的关系对内:只有方法能操作成员变量对内:只有方法能操作成员变量对外:方法是对象与外部环境(其他对象)交互、通对外:方法是对象与外部环境(其他对象)交互、通信的接口信的接口对象对象l对象之间通过对象之间通过发送消息发送消息发送消息发送消息进行交互与通信进行交互与通信消息通过对方法的调用来实现消息通过对方法的调用来实现消息的组成:消息的组成:接收消息的对象接收消息的对象方法名称方法名称方法参数方法参数消息由发送者对象编写,由接收者对象解释消息由发送者对象编写,由接收者对象解释消息可以消息可以引起接收者状态变化引起接收者状态变化返回结果返回结
10、果Bicycle bPerson pb.changeGears(lowerGear);对象对象l如何产生有用的对象如何产生有用的对象确定可能向对象发出的确定可能向对象发出的请求请求完成交易完成交易在屏幕上画图在屏幕上画图打开开关打开开关由对象的由对象的接口接口接口接口(interface)定义这些请求)定义这些请求接口接口:确定了确定了对特定对对特定对象所能发出的请求象所能发出的请求,或,或者对象接收消息的方式者对象接收消息的方式对象对象l接口确定了对特定对象所能发出的请求,或对象接口确定了对特定对象所能发出的请求,或对象接收消息的方式接收消息的方式对象如何与类联系:通过在抽象基础上对抽象结果
11、的对象如何与类联系:通过在抽象基础上对抽象结果的组织组织来联系来联系接口是接口是“组织组织”的依据之一的依据之一l抽象抽象l对象对象l类类l封装封装l继承继承l多态多态类类lIn OOP, a class is an extensible program-code-template for creating objects, providing initial values for state (member variables) and implementations of behavior (member functions, methods).- http:/en.wikipedia.o
12、rgl在面向对象程序设计中,类是一个可扩展的程序在面向对象程序设计中,类是一个可扩展的程序代码模板,用于创建一类对象并为对象提供成员代码模板,用于创建一类对象并为对象提供成员变量初始值和方法实现变量初始值和方法实现类类l类的结构类的结构Fields(state)Methods(behavior)PrivateImplementationDetailsPublic API抽象类类l类示例(自行车)类示例(自行车)currentSpeedcurrentCadenceGearImplementationcurrentGearchange cadencebrakechangegearsl类的实例化类的
13、实例化currentSpeedcurrentCadenceGearImplementationcurrentGearchange cadencebrakechangegears类与对象类与对象currentSpeed=10currentCadence=60GearImplementationcurrentGear=5change cadencebrakechangegearscurrentSpeed=15currentCadence=90GearImplementationcurrentGear=2change cadencebrakechangegears类与对象类与对象l类与对象的关系类与
14、对象的关系类是同种对象的集合与抽象类是同种对象的集合与抽象类描述对象的共同的数据特征和行为特征类描述对象的共同的数据特征和行为特征类的实例化就是对象类的实例化就是对象l抽象抽象l对象对象l类类l封装封装l继承继承l多态多态封装封装类开发者客户端程序员提供使用修改使用可以修改什么?封装封装l定义:定义:把数据和方法包装进把数据和方法包装进类类中,并对中,并对具体实现具体实现进行进行隐藏隐藏类是基本的封装单元,一个类的所有对象实例有相同类是基本的封装单元,一个类的所有对象实例有相同的封装特性的封装特性“具体实现具体实现”包括包括:对象的数据域对象的数据域、方法实现以及非接方法实现以及非接口方法的定
15、义等口方法的定义等对数据的完全隐藏是对象的理想结构,现实中使用对数据的完全隐藏是对象的理想结构,现实中使用public、protected、private关键字实现关键字实现4种隐藏能力种隐藏能力(访问权限)(访问权限)封装封装l意义意义模块化:模块化:不同对象代码间相对独立,对象可以在系统不同对象代码间相对独立,对象可以在系统中方便移动中方便移动保证数据对象的一致性:通过隐藏对象变量和方法实保证数据对象的一致性:通过隐藏对象变量和方法实现,防止绕过接口更改变量现,防止绕过接口更改变量易于维护:对私有变量和私有方法的更改,不会影响易于维护:对私有变量和私有方法的更改,不会影响到调用对象接口的其
16、他程序,提高了程序的可移植性到调用对象接口的其他程序,提高了程序的可移植性l抽象抽象l对象对象l类类l封装封装l继承继承l多态多态继承继承l现实世界中的对象间关系现实世界中的对象间关系包含(包含(has a):对象):对象A是对象是对象B的组成部分的组成部分关联:对象关联:对象A中保存对象中保存对象B的一个引用而非对象的一个引用而非对象B本身本身继承(继承(is a):对象):对象A是对象是对象B的特例,抽象的特例,抽象 具体具体继承继承l含义:描述含义:描述子类子类与与父类父类之间的之间的关系关系子类:从某个特定类派生出来的类子类:从某个特定类派生出来的类父类:派生出某个特定类的类父类:派生
17、出某个特定类的类关系:关系:子类继承父类的变量和方法子类继承父类的变量和方法子类可以增加新的变量和方法子类可以增加新的变量和方法子类可以重写(子类可以重写(Override)继承来的方法继承来的方法l继承关系可以有多层,子类要继承它所有父类的继承关系可以有多层,子类要继承它所有父类的方法与状态方法与状态继承继承l一个类可以用一个类可以用extends关键字显式地继承另一个类关键字显式地继承另一个类l如果没有显式地继承其他类,则隐含继承如果没有显式地继承其他类,则隐含继承java.lang.Object类类Java.lang包中的包中的Object类是最顶层的类,所有其他的类是最顶层的类,所有其
18、他的类都是它直接或间接的子类类都是它直接或间接的子类Object类型类型的变量可以指向任意的变量可以指向任意类型的类型的对象对象(upcasting)Object类类提供了所有提供了所有Java对象都需要的行为(方法)对象都需要的行为(方法)继承继承l继承的优点继承的优点重用父类中的代码重用父类中的代码将一般行为与特殊行为分离将一般行为与特殊行为分离一般行为包含在父类中一般行为包含在父类中从父类继承得到的特定子类,实现特殊行为的具体从父类继承得到的特定子类,实现特殊行为的具体细节(新变量、新方法、重写父类方法)细节(新变量、新方法、重写父类方法)l抽象抽象l对象对象l类类l封装封装l继承继承l
19、多态多态多态多态l泛指能够创建多于一种泛指能够创建多于一种形式的变量、方法和对象形式的变量、方法和对象的能力的能力l形式:形式:编译时多态:通过方法重载(编译时多态:通过方法重载(overloading)实现)实现运行时多态:通过方法重写、向上转型和动态绑定,运行时多态:通过方法重写、向上转型和动态绑定,达到达到“对外一个接口,内部多种实现对外一个接口,内部多种实现”多态多态l编译时多态:编译时多态:一个类中定义多个名称相同但参数不同的方法一个类中定义多个名称相同但参数不同的方法l运行时多态:运行时多态:以继承为基础以继承为基础改变从父类继承的行为(方法重写,改变从父类继承的行为(方法重写,o
20、verriding)将子类对象当作父类对象看待(向上转型,将子类对象当作父类对象看待(向上转型,upcasting)在运行时确定接收消息的对象的类型及其行为(动态在运行时确定接收消息的对象的类型及其行为(动态绑定,绑定,dynamic binding)面向对象编程的主要特点面向对象编程的主要特点l封装性:实现模块化和信息隐藏,有利于程序的封装性:实现模块化和信息隐藏,有利于程序的可移植性可移植性l继承性:定义对象之间的层次关系,下层对象继继承性:定义对象之间的层次关系,下层对象继承了上层对象的特性,可以实现程序代码重用,承了上层对象的特性,可以实现程序代码重用,并且有效地组织整个程序并且有效地组织整个程序l多态性:使得在程序运行时,对象的一种接口可多态性:使得在程序运行时,对象的一种接口可以提供多种不同的操作,提高程序的灵活性以提供多种不同的操作,提高程序的灵活性