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