【文档说明】Java语言程序设计与实现项目五-面向对象的程序设计基础.ppt,共(75)页,970.000 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-2322.html
以下为本文档部分文字说明:
项目五面向对象的程序设计基础➢5.1面向对象的基本概述2022年11月12日星期六12022年11月12日星期六5.1面向对象的基本概述人们期待着一种效率高、简单、易理解且更加符合人们思维习惯的程序设计语
言,以加快软件的开发步伐、缩短软件开发生命周期,面向对象就是在这种情况下应运而生的。2我们可以把客观世界中的每一个实体都看作是一个对象,如一个人、一朵花、一台机床、一个输入框等等。因此对象可以简单定义为:“展示一些定义好的行为的
、有形的实体”。2022年11月12日星期六3当然在我们的程序开发中,对象的定义并不局限于看得见摸得着的实体,诸如一个咨询公司,它作为一个机构,并没有物理上的形状,但却具有概念上的形状,它有明确的经营目的和业务活动。2022年11月12日
星期六4根据面向对象的倡导者GradyBooch的理论,对象具有如下特性:(1)它具有一种状态;(2)它可以展示一种行为;(3)它具有唯一的标识。2022年11月12日星期六5对象的状态通过一系列属性及其属性值来表示;对象的行为是指在一定的期间内属性的改变;标识是用来识别对
象的,每一个对象都有唯一的标识,诸如每个人都有唯一的特征,在社会活动中,使用身份证号码来识别。2022年11月12日星期六62022年11月12日星期六我们生活在一个充满对象的世界中,放眼望去,不同形状、不同大小和颜色各异的对象;静止的和移动的对象。面对这些用途各异、五花八门的对象,我们该
如何下手处理它们呢?7借鉴于动物学家将动物分成纲、属、科、种的方法。我们也可以把这些对象按照它们所拥有的共同属性进行分类。例如,鸽子、燕子、麻雀等都叫作鸟。它们具有一些共同的特性:有羽毛、有飞翔能力、下蛋孵化下一代等。因此我们把它们归属为鸟类。2022年
11月12日星期六8综上所述我们可以简单地把类定义为:“具有共同属性和行为的一系列对象”。2022年11月12日星期六92022年11月12日星期六5.1.2面向对象的特点1.什么是面向对象面向对象的方法将系统看作是现实世界对象的集合,在现实世界中包含被归类的对象。10如前所
述,面向对象系统是以类为基础的,我们把一系列具有共同属性和行为的对象划归为一类。属性代表类的特性,行为代表有类完成的操作。2022年11月12日星期六11例如,汽车类定义了汽车必须有属性:车轮个数、颜色、型号、发动机的能量等。类的行为有:启动、行
驶、加速、停止等。对象是类的一个实例,它展示了类的属性和行为。例如,张经理的那辆奔驰牌轿车就是汽车类的一个对象2022年11月12日星期六122022年11月12日星期六2.面向对象的特性1)抽象所谓抽象就是不同的角色站在不同的角度观察世界。面向对象的程序设计可以根据问题来描述问题,不必受
限于特定类型的问题。13比如,当你购买手机时,站在使用的角度,你所关注的是手机的品牌、外观及功能等等。然而,对于手机的维修人员来说,站在维修的角度,他们所关注的是手机的内部,各部分元器件的组成及工作原理等。2022年11月12日星期六14其实,所有编程语言的最终目的都是提供一种“抽象”方法。在早
期的程序设语言中,一般把所有问题都归纳为列表或算法,其中一部分是面向基于“强制”的编程,而另一部分是专为处理图形符号设计的。2022年11月12日星期六15每种方法都有自己特殊的用途,只适合解决某一类的问题。面向对象的
程序设计可以根据问题来描述问题,不必受限于特定类型的问题。2022年11月12日星期六162)继承继承提供了一种有助于我们概括出不同类中共同属性和行为的机制,并可由此派生出各个子类。2022年11月12日星期六17在Java中,不允许类
的多重继承(即子类从多个父类继承属性和行为),也就是说子类只允许有一个父类。父类派生多个子类,子类又可以派生多个子子类……这样就构成了类的层次结构。2022年11月12日星期六182022年11月12日星期六3)封装封装提供了一种有助于我们向用
户隐藏他们所不需要的属性和行为的机制,而只将用户可直接使用的那些属性和行为展示出来。192022年11月12日星期六4)多态多态指的是对象在不同情况下具有不同表现的一种能力。在Java中通过方法的重载和覆盖来实现多
态性。202022年11月12日星期六3.面向对象的好处今天我们选择面向对象的程序设计方法,其主要原因是:1)现实的模型从逻辑理念上讲,用面向对象的方法来描述现实世界的模型比传统的过程方法更符合人的思维习惯。212022年11月1
2日星期六2)重用性在面向对象的程序设计过程中,我们创建了类,这些类可以被其他的应用程序所重用,这就节省程序的开发时间和开发费用,也有利于程序的维护。222022年11月12日星期六3)可扩展性面向对象的程序设计方法有利于应用系统的更新
换代。当对一个应用系统进行某项修改或增加某项功能时,不需要完全丢弃旧的系统,只需对要修改的部分进行调整或增加功能即可。可扩展性是面向对象程序设计的主要优点之一。232022年11月12日星期六5.2类5.2.1定义类如前所述,类是对现实世界中实体的抽象
,类是一组具有共同特征和行为的对象的抽象描述。242022年11月12日星期六因此,一个类的定义包括如下两个方面:定义属于该类对象共有的属性(属性的类型和名称);定义属于该类对象共有的行为(所能执行的操作即方法)。252022年11月12日星期六类包含类的声明和类
体两部分,其定义类的一般格式如下:[访问限定符][修饰符]class类名[extends父类名][implements接口名列表>]//类声明26{//类体开始标志[类的成员变量说明]//属性说明[类的构造方法定义][类的成员方法定义]//行为定义
}//类体结束标志2022年11月12日星期六272022年11月12日星期六5.2.2成员变量成员变量用来表明类的特征(属性)。声明或定义成员变量的一般格式如下:[访问限定符][修饰符]数据类型成员变量名[=初始值];28•static表明声明的成员变量为
静态的。静态成员变量的值可以由该类所有的对象共享,它属于类,而不属于该类的某个对象。即使不创建对象,使用“类名.静态成员变量”也可访问静态成员变量。•final表明声明的成员变量是一个最终变量,即常量。2022年11月12日星期六
29•transient表明声明的成员变量是一个暂时性成员变量。一般来说成员变量是类对象的一部分,与对象一起被存档(保存),但暂时性成员变量不被保存。•volatile表明声明的成员变量在多线程环境下的并发线程中将保持变量的一致性。2022年11月1
2日星期六302022年11月12日星期六5.2.3成员方法方法用来描述对象的行为,在类的方法中可分为构造器方法和成员方法,先介绍成员方法。成员方法用来实现类的行为。方法也包含两部分,方法声明和方法体(操作代码)。312022年11月12
日星期六方法定义的一般格式如下:[访问限定符][修饰符]返回值类型方法名([形式参数表])[throws异常表]32{[变量声明]//方法内用的变量,局部变量[程序代码]//方法的主体代码[return[表达式]]//返回语
句}2022年11月12日星期六332022年11月12日星期六5.2.4构造方法构造方法用来构造类的对象。如果在类中没有构造方法,在创建对象时,系统使用默认的构造方法。34例题5.1详见P782022年11月12日星期六35定义构造方法的一般格式如下:[pub
lic]类名([形式参数列表]){[方法体]}2022年11月12日星期六362022年11月12日星期六我们可以把构造方法的格式和成员方法的格式作一个比较,可以看出构造方法是一个特殊的方法。应该严格按照构造方法的格式来编写构造方法,否则构造方法将不起作用。372022年11月12日星期六有
关构造方法的格式强调如下:1)构造方法的名字就是类名。2)访问限定只能使用public或缺省。一般声明为public,如果缺省,则只能在同一个包中创建该类的对象。3)在方法体中不能使用return语句返回一个值。382022年1
1月12日星期六395.3对象5.3.1对象的创建创建对象需要以下三个步骤:1.声明对象声明对象的一般格式如下:类名对象名;例如:Citizenp1,p2;//声明了两个公民对象Floatf1,f2;//声明了两个浮点数
对象2022年11月12日星期六402022年11月12日星期六412.创建对象对象只有在创建后才能使用,创建对象的一般格式如下:对象名=new类构造方法名([实参表]);其中:类构造方法名就是类名。new运算符用于为对象分配存储空间,
它调用构造方法,获得对象的引用(对象在内存中的地址)。例如:p1=newCitizen(“张三”,”张山”,”女”,newDate(),”中国北京”,”110105197502163562”);f1=newFloat(26f);f2=newFloat(38f);2022年11月12日星期
六42注意:声明对象和创建对象也可以合并为一条语句,其一般格式是:类名对象名=new类构造方法名([实参表]);2022年11月12日星期六43例如:Citizenp1=newCitizen(“张三”,”张山”,”女
”,newDate(),”中国北京”,”110105197502163562”);Floatf1=newFloat(26f);Floatf2=newFloat(38f);2022年11月12日星期六442022
年11月12日星期六3.引用对象在创建对象之后,就可以引用对象了。引用对象的成员变量或成员方法需要对象运算符“.”。引用成员变量的一般格式是:对象名.成员变量名452022年11月12日星期六引用成员方法的一般格式是:对象名.成员方法名([实参列表])在创建
对象时,某些属性没有给于确定的值,随后可以修改这些属性值。465.3.3对象的清除在Java中,程序员不需要考虑跟踪每个生成的对象,系统采用了自动垃圾收集的内存管理方式。运行时系统通过垃圾收集器周期性地清除无用
对象并释放它们所占的内存空间。2022年11月12日星期六47垃圾收集器作为系统的一个线程运行,当内存不够用时或当程序中调用了System.gc()方法要求垃圾收集时,垃圾收集器便于系统同步运行开始工作。在系统空闲时,垃圾收集器和系统异步工作。2022年11月12日星期六48事实上,
在类中都提供了一个撤销对象的方法finalize(),但并不提倡使用该方法。若在程序中确实希望清除某对象并释放它所占的存储空间时,只须将空引用(null)赋给它即可。2022年11月12日星期六49例
题5.3详见P812022年11月12日星期六50运行结果:2022年11月12日星期六515.4方法的进一步讨论主要讨论方法引用中的参数传递、方法的重载以及static(静态)方法等概念。2022年11月12日星期六525.4.1方法引用及参数传递在Java中
,方法引用有两种方式:系统自动引用和程序引用。系统自动引用一般用在一些特定的处理中。本节主要介绍程序引用方法及参数传递问题。2022年11月12日星期六531.方法声明中的形式参数在方法声明中的“()”中说明的
变量被称之为形式参数(形参),形参也相当于本方法中的局部变量,和一般局部变量所不同的是,它自动接受方法引用传递过来的值(相当于赋值)。然后在方法的执行中起作用。2022年11月12日星期六54例如,在Citi
zen类中的方法:publicvoidsetName(Stringname){this.name=name;}当对象引用该方法时,该方法的形参name接受对象引用传递过来的名字,然后它被赋给对象的属性name。2022
年11月12日星期六552.方法引用中的实际参数一般我们把方法引用中的参数称为实际参数(实参),实参可以是常量,变量、对象或表达式。2022年11月12日星期六56例如:Citizenp2=newCitizen
("李明","","男",null,"南京","50110119850624273x");p2.setName("李鸣");2022年11月12日星期六573.参数传递方式参数传递的方式有两种:按值传递和按引用传递。2022年11
月12日星期六581)按值传递方式指的是在方法调用时,传递的参数是按值的拷贝传递。按值传递的重要特点是传递值的拷贝,也就是说传递后就互不相关了。2022年11月12日星期六592)按引用传递方式指的是在方法调用时,传递的参数是按引用进行传递。其实传递引用的地址,也就是变量所对
应的内存空间的地址。传递值的引用,也就是说传递前和传递后都指向同一个引用(也就是同一个内存空间)。2022年11月12日星期六605.4.2方法的重载所谓重载(Overloading)就是指在一个类中定义了多个相同名字的方法,每个方法具
有一组唯一的形式参数和不同的代码,实现不同的功能。2022年11月12日星期六61方法的名字一样,在对象引用时,系统如何确定引用的是哪一个方法呢?在Java中,方法的名称、类型和形式参数等构成了方法的签名,系统根据方法的签名确定引用的是那个方法,因此方法的签名必须唯一。2022年11月12
日星期六62所以我们在编写重载方法时,应该注意以下两点:(1)方法的返回值类型对方法的签名没有影响,即返回值类型不能用于区分方法,因为方法可以没有返回值。(2)重载方法之间是以所带参数的个数及相应参数的数据类型来区分的。2022年11月12日星期六635.4.3静态(static)方法所谓静态方法
,就是以“static”修饰符说明的方法。在不创建对象的前提下,可以直接引用静态方法,其引用的一般格式为:类名.静态方法名([实参表])2022年11月12日星期六64一般我们把静态方法称之为类方法,而把非静态方法称之为类的实例方法(即只能被对象引用)。2
022年11月12日星期六655.4.4最终(Final)方法在Java中,子类可以从从父类继承成员方法和成员变量,并且可以把继承来的某个方法重新改写并定义新功能。但如果父类的某些方法不希望再被子类重写,必须把它们说明为最终方法,final修饰即可。2022年11月1
2日星期六66所谓最终方法,是指不能被子类重写(覆盖)的方法。定义final方法的目的主要是用来防止子类对父类方法的改写以确保程序的安全性。2022年11月12日星期六67一般来说,对类中一些完成特殊功能的方法,只希望子类继承使用而不希望修改,可定义为最终方法。2022年11月12日星期
六68定义最终方法的一般格式如下:[访问限定符]final数据类型最终方法名([参数列表]){//方法体代码………}2022年11月12日星期六69例题5.4详见P832022年11月12日星期六70运行结
果:2022年11月12日星期六715.5变量的进一步讨论我们可以把变量分为静态(static)变量、最终变量(final)和一般变量。一般把静态变量称为类变量,而把非静态变量称为实例变量。2022年11月12日星期六72例题5.9详见P902022年11月12日星期六73
运行结果:2022年11月12日星期六74谢谢!2022年11月12日星期六75