第3章-面向对象程序设计(上)ppt课件(全)_第1页
第3章-面向对象程序设计(上)ppt课件(全)_第2页
第3章-面向对象程序设计(上)ppt课件(全)_第3页
第3章-面向对象程序设计(上)ppt课件(全)_第4页
第3章-面向对象程序设计(上)ppt课件(全)_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章Java面向对象程序设计(上)

第3章面向对象程序设计(上)ppt课件(全)本章学习目标掌握Java面向对象程序设计方法利用面向对象设计方法解决实际问题第3章面向对象程序设计(上)ppt课件(全)任务1:一个简单的类对象【任务内容】设计一个音乐播放器类,并创建一个对象。【能力目标】掌握面向对象程序设计方法掌握创建类的基础语法掌握类对象的创建学会用面向对象设计思想解决实际问题3.1类和对象第3章面向对象程序设计(上)ppt课件(全)【范例3-1】设计一个媒体播放器类

classMediaPlayer{ //音乐文件路径

publicStringmusicFile; //播放器音量,范围:0(静音)~100 publicintsoundLevel; //播放器状态

publicbooleanisPlaying; }第3章面向对象程序设计(上)ppt课件(全)classMediaAppExam{//主程序

publicstaticvoidmain(Stringargs[]){//用MediaPlayer类创建播放器对象mplayerMediaPlayermplayer=newMediaPlayer(); //设定播放器内部的属性值

mplayer.musicFile="spring.mp3"; mplayer.soundLevel=50; mplayer.isPlaying=false;} }第3章面向对象程序设计(上)ppt课件(全)

结构化的软件开发方法

结构化的软件开发方法是20世纪80年代使用最广泛的软件开发方法。它主要依据功能来划分软件的结构,它把软件系统的功能看做是根据给定的输入数据,然后输出结果。 进行结构化设计时,首先考虑整个软件的功能,然后对功能进行分解,将软件划分为多个模块,每个模块实现子功能(但功能不是一成不变的)。模块内部还可以进一步细分,最后将所有的模块拼装起来构成整个软件系统。软件系统可以看做多个子系统的集合。 结构化设计属于自顶向下的设计,在设计阶段就需要考虑如何实现系统功能,因为分解功能的过程实际就是实现功能的过程。其局限性在于不能适应用户需求的不断变化,系统结构会根据需求变化而变化。 结构化程序设计中,方法是最小的功能模块。每个方法都是一个具有输入输出的子系统。预备知识----程序设计方法第3章面向对象程序设计(上)ppt课件(全)

面向对象程序设计

面向对象程序设计(Object-OrientedProgramming简称OOP)是当今主流的程序设计方法,它将软件系统看做各种对象的集合,每个对象包含对用户公开的特定功能部分和隐藏的实现部分。对象是最小的子系统,一组对象能够组合成复杂的子系统。 程序中的很多对象来自于标准库,还有一些是自定义的。究竟是自己构造对象,还是使用外部对象(可以是免费的,也可以是商业的)完全取决于预算和时间。但只要能够实现功能,完全可以不必关系其实现的细节。 传统的结构化程序设计通过一系列的过程(即算法)来解决问题,然后考虑存储数据的方式(即如何组织数据),而面向对象刚好相反。 对于较小规模的问题使用结构化设计比较理想,而面向对象设计更适合解决规模较大的问题。第3章面向对象程序设计(上)ppt课件(全)OOP的逻辑过程面向对象设计分析的完整过程如图所示:现实域抽象抽象类对象实例化映射抽象数据类物理实体逻辑实现概念域计算机世界第3章面向对象程序设计(上)ppt课件(全)面向对象具有以下几个重要特征:抽象封装与隐藏继承多态性

33313234第3章面向对象程序设计(上)ppt课件(全)面向对象的基本概念对象(Object)是一个应用系统中用来描述客观事物的实体,是具有特定属性(数据)和行为(方法)的基本运行单位,是类的一个特定状态下的实例。类(Class)是Java代码的基本组织模块,是用以描述一组具有共同属性和行为的对象的基本原型,是对这组对象的概括、归纳与抽象表达,它定义了本类对象所应拥有的状态属性集及操作这组属性的行为方法集。第3章面向对象程序设计(上)ppt课件(全)类与对象的关系类与对象之间的关系,类似于数据类型与变量之间的关系;一个类可以生成无数个不同的对象,每个对象属性值不同,其状态也不同。可以用计算机模型与计算机实体之间的关系来更形象地说明类与对象之间的关系:将冯·诺依曼计算机模型看作计算机类,则不同品牌的计算机实体就对应为一个个的实例对象。第3章面向对象程序设计(上)ppt课件(全)OOP的优越性从面向过程到面向对象是程序设计技术的一个飞跃。人们之所以要采用面向对象的程序设计技术,其目的在于:提升程序的开发与运行效率提高代码的可重用性(或者称为复用性)按照与人类习惯思维方法一致的原则开发系统第3章面向对象程序设计(上)ppt课件(全)OOP的优越性(续)提高程序的可靠性与可维护性提高程序的可扩展性增强程序的可控制性总之,面向对象的程序设计,能够有效分解、降低问题的难度与复杂性,提高整个求解过程的可控制性、可监视性和可维护性,从而获得较高的开发效率与可靠效果第3章面向对象程序设计(上)ppt课件(全)创建类类是Java语言面向对象编程的基本要素,用来定义对象的成员变量(数据域)与成员方法(功能接口),描述对象的状态与行为。Java程序将你要表达的实体或概念封装在类中,并由类来创建诸多的实例对象。应用程序的功能便是由各个类的实例对象,通过调用各类方法来实现的。JAVA的类由类的声明与类体两部分组成。第3章面向对象程序设计(上)ppt课件(全)1、类的声明用来指定该类的访问修饰符、类的名称、父类名称及实现接口等属性。声明类的完整形式为:[public][abstract|final]class<类名>[extends<基类名>][implements<接口列表>]说明了类的属性类名应该能够描述出类的特征或作用,类名的第一个字母通常要大写,如果类名由多个单词组成,则每一单词的首字母一般都要大写第3章面向对象程序设计(上)ppt课件(全)2、类体:是类功能的主体,是JAVA语句的集合。一般要定义三类元素:成员变量;构造方法;成员方法。语句块界定符{及}标识出类体的有效范围。成员变量与成员方法为类的成员要素,简称为成员(Member),它们又分为静态/类要素与对象/实例要素两类。构造方法是具有与类名相同名称的一种特殊方法,用来创建类的对象及对成员变量进行初始化。构造方法为可选项,当省略时,Java系统会按缺省方式定义空白的构造方法。第3章面向对象程序设计(上)ppt课件(全)类定义示例【例】建立一个公共的最终类—日期类,其声明格式如下:publicfinalclassDate//类的声明语句{//类体定义

privateintyear;//年

privateintmonth;//月

privateintday;//日

publicinitDate(inty,intm,intd){……}//初始化年、月、日值的方法

publicshowDate(){……}//显示当前日期值的方法}第3章面向对象程序设计(上)ppt课件(全)实例化对象类只是一种数据类型,需要实例化对象以后才能使用。类类型实例化对象需要由两个步骤来完成,首先用类定义对象变量,然后通过实例化类的对象来初始化对象变量,即:类名称对象变量;对象变量=new类名称();

也可以一步完成,即:类名称对象变量=new类名称();第3章面向对象程序设计(上)ppt课件(全)实例化对象(续)一旦一个类的实例化对象产生,就可以通过该对象访问类中定义的成员了。通过对象访问成员的基本结构如下:对象变量.属性=值;对象变量.方法();第3章面向对象程序设计(上)ppt课件(全)任务2---方法的定义【任务内容】给任务1中的媒体播放器类增加控制方法【能力目标】掌握方法定义学会用方法解决实际问题【任务分析】本案例要求在任务1案例中MediaPlayer类基础上扩充可控制播放器的方法。通过分析任务1的案例,我们可以得知,MediaPlayer类至少包含播放、暂停、调节音量等方法。范例3-2MediaAppExam.java3.2方法第3章面向对象程序设计(上)ppt课件(全)任务2---方法定义(续)成员方法(MemberMethod)又称为功能接口(FunctionInterface),简称为方法(Method),是类对象与外界的接口,包含了理解和操纵对象状态的代码,反应了对象的行为特征,特别是对属性进行操作的特征。成员方法对成员变量的操作主要体现在以下两个方面:改变对象的属性,一般记为set方法返回对象的属性,一般记为get方法第3章面向对象程序设计(上)ppt课件(全)方法定义格式如下:[public|protected|private][static][final|abstract][native][synchronized]<方法的返回类型><方法名>([参数列表])[throws<异常列表>]{//方法体定义

……//用于描绘方法行为的Java语句}访问控制修饰符第3章面向对象程序设计(上)ppt课件(全)任务3:静态方法【任务内容】设计一维数组工具类,包含数组复制,打印任务【能力目标】掌握静态方法的定义学会用静态方法解决实际问题【任务分析】本案例要求设计一个针对一维数组做操作的工具类,这些方法对于所有一维数组来说是通用的。作为工具类,它只是包含了操作数组的方法,而与数组没有任何直接关系。因此,在使用操作数组的方法时并不需要对工具类做实例化。那么如何才能在不实例化类对象的情况下访问类内部的方法呢?Java编程语言中静态方法可以很好的解决上述问题。Java允许开发人员在一个类内部定义直接通过类名称访问的静态方法,而无需实例化类对象。3.2方法第3章面向对象程序设计(上)ppt课件(全)范例:Application.java通过上例,我们知道:static方法可以用类来直接调用,而无需用从类中实例化出来的具体对象来调用,因此这类方法被称为类的方法。

注意:

static方法只能访问类中的static属性和其他的static方法。第3章面向对象程序设计(上)ppt课件(全)任务4:main方法【任务内容】实现命令行计算器程序【能力目标】了解Java程序的执行掌握Java程序入口方法借助主程序入口参数解决实际问题【任务分析】命令行计算器就是用户在命令行输入要参加计算的两个数和运算符,然后程序参照用户输入的运算符对两个数进行算术运算,最终将运算结果呈现给用户。本案例要求程序在启动时接收用户的输入。那么,程序该如何实现在程序启动过程中传递用户输入呢?答案就是Java程序中的主方法main()。3.2方法第3章面向对象程序设计(上)ppt课件(全)范例:Calc.java在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法。main()方法与其他的方法有所不同,它在程序中有固定的语法声明:publicstaticvoidmain(Stringargs[])第3章面向对象程序设计(上)ppt课件(全)任务5:成员变量和局部变量【任务内容】设计一个Person类,包含姓名、性别、年龄属性,并通过方法访问这些属性。【能力目标】掌握成员变量定义掌握局部变量定义掌握成员变量和局部变量的区别【任务分析】

该案例要求设计一个Person类,并且包含有姓名、性别和年龄三个属性,属性的访问必须通过方法来完成。每个属性的访问包括读和写,所以Person类至少包含六个属性分别对应上述三个属性的读写操作。其中写属性操作还需要外界提供一个参数,作为被操作属性的新值。3.3成员变量和局部变量第3章面向对象程序设计(上)ppt课件(全)范例:ApplicationDemo.java在上例中涉及到两类变量:局部变量和成员变量局部变量:

1)局部变量是定义在方法体内部的变量,包括方法圆括号中的参数在内。局部变量有时被称作自动变量。局部变量存储在栈内存中,其生命周期从方法的执行到方法方法的结束。

2)局部变量定义以后,必须进行初始化。

3)局部变量只能在定义方法范围内使用

第3章面向对象程序设计(上)ppt课件(全)成员变量:成员变量是定义在类当中的变量,又称为属性(Attribute)或数据域(DataField),用以表述一个对象的状态信息。成员变量跟随对象一起存储在堆内存当中,其生命周期从对象的实例化开始,直到对象被销毁时消失。语法描述格式如下:[public|protected|private][static][final][transient][volatile]<类型><属性名>[=初始值/new<构造方法>>];第3章面向对象程序设计(上)ppt课件(全)public、protected与private为成员要素访问修饰符,用来限制成员变量或成员方法的访问范围,即哪些类或对象可以访问此成员要素。static用来指明成员要素为静态要素,又称类要素,以区别于对象要素。静态要素存在于类的定义区域中,属于类本身的成员,每个该类的对象共享这些要素final用于成员变量时,是作为定义最终变量即常量的关键字。这类常量的值不允许修改。transient(意为短暂的、瞬时的)为专门用于成员变量的修饰符,表明成员变量为临时变量。volatile(意为可变的、不稳定的)为专门用于成员变量的修饰符,声明一个被多个并发线程所共享的变量。第3章面向对象程序设计(上)ppt课件(全)在类实例化一个对象后,对象内的所有成员变量已经被初始化。成员变量默认初始化规则如下:对象类型:默认初始化为null整数类型:默认初始化为0字符类型:默认初始化为’\u0000’浮点类型:默认初始化为0.0和0.0f逻辑类型:默认初始化为false第3章面向对象程序设计(上)ppt课件(全)任务6:访问控制【任务内容】修改任务2中的MediaPlayer播放器,限制外界任意访问对象内的属性【能力目标】了解Java封装机制掌握Java访问控制修饰符学会采用封装机制解决实际问题【任务分析】本案例要求对任务2中的媒体播放器进程改造,限制对象外部代码对对象属性的任意操作。任务2中,主程序是可以随意通过mplayer对象去访问内部的任何属性。一个对象内部属性可以被随意修改是一个极其危险的事情,它直接影响了对象的有效性。例如随意设置音量属性soundLevel为-1,从语法上,int类型的soundLevel是可以接受-1值得,但是从逻辑上,音量范围是0~100,变量自身是无法控制其逻辑上的有效性的。3.4封装第3章面向对象程序设计(上)ppt课件(全)范例:MediaAppDemo.java注意:类中的所有成员都可以被类自身的代码访问。为控制其他类的访问权限,类成员有四种访问修饰符。private:声明为private的成员只能被包含它的类自身访问default:包成员无任何访问修饰符,它们只能被所在包中的类所访问。protected:声明为protected的成员可以被它的子类、同一个包中的类访问。public:声明为public的成员可以被任何类访问。第3章面向对象程序设计(上)ppt课件(全)成员变量的访问控制修饰符修饰符本类相同包中的不同类(包含子类)不同包中的子类不同包中的非子类public缺省(packeage)××private×××protected×上述访问控制修饰符主要用于定义成员的作用域,即可以在哪些范围内访问其成员.第3章面向对象程序设计(上)ppt课件(全)举例1:

classClassA{privateintisPrivate;privatevoidprivateMethod(){System.out.println(“私有方法”);}}classClassB{voidaccessMethod(){ClassAa=newClassA();a.isPrivate=10;//非法

a.privateMethod();//非法}}第3章面向对象程序设计(上)ppt课件(全)举例2:classFieldTest{privateintnum=5;//私有作用域,本类可见

publicintget(){//公共作用域

returnnum;//返回成员变量num的值}}classTest{publicstaticvoidmain(String[]args){FieldTestft=newFieldTest();intt=ft.get();//正确访问

//ints=ft.num;//不能访问FieldTest类的私有成员变量

System.out.println(“t=“+t);//System.out.println(s);}}第3章面向对象程序设计(上)ppt课件(全)任务7:构造方法【任务内容】创建一个按钮类,保证其实例化的对象所有状态初始都是有效的【能力目标】掌握构造方法的定义掌握用构造方法初始化对象学会用构造方法解决实际问题【任务分析】本案例要求设计一个按钮类,并且按钮类在实例化对象后,其内部的状态值应该保持在有效状态。实例化一个类的对象时,对象内部的状态已经被初始化为默认值,但是这个默认值并不是我们想要的,因为它们从逻辑上并不是有效的。我们该如何在实例化对象的过程中将对象属性初始化为符合对象自身特性的有效状态呢?3.5构造方法第3章面向对象程序设计(上)ppt课件(全)范例:ApplicationDemo2.java构造方法(Constructor)又称为构造器,熟悉C++语言的人习惯上称之为构造函数。构造方法是类用来创建对象、初始化类的属性的一种特殊方法,构造方法每次只会在类创建对象的时候被自动调用,且只会被调用一次。Java中所有的类至少都要有一个构造方法,即使用户不明确地定义,系统也会为该类生成一个默认构造方法或缺省构造方法,这种缺省构造方法没有任何参数,且方法体为空。第3章面向对象程序设计(上)ppt课件(全)构造方法没有返回类型,也不允许返回void类型。构造方法的方法名与类名完全相同(包括字母大小写)一个类可以包含多个重载的构造方法,使用这些重载的构造方法创建不同对象时,通过参数的不同来决定调用哪个构造方法。构造方法不允许用户直接调用,只能通过new关键字在创建对象时由系统调用。33343132构造方法的特征:第3章面向对象程序设计(上)ppt课件(全)任务8:类的继承【任务内容】设计一个Person类,并派生出Employee【能力目标】了解类继承的概念掌握类继承的语法学会用类继承解决实际问题【任务分析】

本案例要求设计一个Person类,然后在Person类基础之上扩充新功能另外一个新类Employee。另外,Person类中定义的方法并不完全符合Employee的要求,因此,Employee必要的情况下可以重新定义Person类中已定义过的方法。3.6类的继承第3章面向对象程序设计(上)ppt课件(全)范例:ExtendExample.java继承也称为派生,其概念来源于这样一种思想:同类事物具有共同性,在同类事物中,每个事物又具有其特殊性。运用抽象的原则舍弃对象的特殊性,抽取其共性,便得到适应于一组对象的类,这便是一般类或通用类,而把具有特殊性的类称为特殊类或具体类。假定B类与C类具有A类的全部属性和方法,同时又分别具有自己特有的某些属性和方法,则把类A称作一般类,把类B与类C称作类A的特殊类。第3章面向对象程序设计(上)ppt课件(全)继承的意义继承很好地解决了软件复用。通过继承,一个类可以拥有已有类的所有功能。因此,只需指明新类与现有类的不同,即增加自己的属性和方法即可,从而有效地减少了代码和数据的冗余度,增强了程序的可重用性。第3章面向对象程序设计(上)ppt课件(全)继承的特征33343132继承关系是传递的继承简化了人们对事物的认识和描述,能清晰体现相关类之间的层次结构关系通过增强一致性来减少模块的接口和界面,大大增加程序的易维护性Java不支持类的多重继承,只支持类的单一继承第3章面向对象程序设计(上)ppt课件(全)继承的实现Java程序中,继承通过extends关键字来实现。子类对父类的继承是在类的声明中通过关键字extends来指明。实现继承的语法结构为:[修饰符]class<子类类名>extends<父类类名>{……//类体定义}第3章面向对象程序设计(上)ppt课件(全)继承的示例【例】实现两个类的描述:基类人(Person)及子类学生(Pupil)。人具有姓名(name)、年龄(age)、性别(sex)及配偶姓名(spouseName)四类属性,同时具有工作(work)、休息(rest)、娱乐(amusement)及处理家务(housework)四种行为方法。学生将从人这一父类中继承除配偶姓名以外的三类属性,并继承及除工作和处理家务以外的两类行为,同时要添加自身类特有的几类属性:所属学校(school)、所学专业(specialty)及所在年级(degree),同时还要增加几种学生的行为方法:学习(study)与考试(exam)。第3章面向对象程序设计(上)ppt课件(全)类的继承关系第3章面向对象程序设计(上)ppt课件(全)继承机制下成员要素的行为继承机制下,类的成员要素的行为方式将会发生很大的变化。子类可以定义与基类相同的成员变量和成员方法,这种情况下,Java系统将面临如何解决成员要素定义的二义性冲突现象。对于属性而言,子类在实现继承父类属性的同时,可以定义与父类属性相同名称与类型的自身属性,子类在执行自身方法时,默认情况下使用的是自身定义的属性,从而将父类的同名属性暂时屏蔽掉。这种原则称为属性隐藏。第3章面向对象程序设计(上)ppt课件(全)同样,对于成员方法而言,子类在继承父类方法的同时,可以定义与父类原型相同而方法的具体实现不同的自身的成员方法,子类在自身方法中调用与父类同名的方法时,默认情况下调用的是自身定义的方法,从而相当于重新实现了父类的方法功能。这一原则称为方法覆盖(override)。例:InheritDemo.java第3章面向对象程序设计(上)ppt课件(全)this和super(1)super用来实现对直接基类成员要素的访问,它代表当前类对象的直接父类,用于以下场合:调用直接父类的构造方法。访问直接父类中被隐藏的成员变量。调用直接父类中被隐藏的成员方法。(2)this代表当前类对象本身,用于以下场合:构造方法重载时调用本类的其它构造方法。访问本类对象的成员变量。调用本类对象的成员方法。第3章面向对象程序设计(上)ppt课件(全)任务9:认识面向对象的多态

【任务内容】设计一个媒体播放器,该媒体播放器可以向后兼容任何格式的音频媒体。【能力目标】了解什么是面向对象的多态掌握如何运用面向对象的多态特性学会用多态解决实际问题【任务分析】

该案例要求设计一个功能强大的媒体播放器,能够支持各种音频格式的播放。我们知道不同音频格式的文件数据编码格式都不相同。要让媒体播放器识别各种编码格式的音频文件是个比较棘手的任务。3.7多态第3章面向对象程序设计(上)ppt课件(全)实例:ApplicationDemo3.java在上例中涉及到了对象类型的转型问题,我们知道,基本数据类型可以进行类型转换,Java支持隐式(自动)及显式(强制)两种类型转换方式类的对象也能够进行类型转换。类型转换(TypeCasting),也称为塑型

第3章面向对象程序设计(上)ppt课件(全)对象类型转换遵循的原则333132对象类型转换必须在继承的层次内进行,否则程序将出现异常向上转型是安全的CastingDemo.java向下转型是危险的

第3章面向对象程序设计(上)ppt课件(全)对象类型转换遵循的原则(续)353634对象能够转换为对象类型实现的一个接口

对象多态------父类引用指向子类对象,此刻为了使用子类特有的方法,必须在方法体内将对象进行向下转型(强制转型),之前要用instanceof测试在类的继承结构中,处于相同层次的类对象之间不能进行转换第3章面向对象程序设计(上)ppt课件(全)任务10:初始化块【任务内容】将某个类中部分成员初始化为默认值,其它成员通

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论