第3章 面向对象的编程基础

上传人:第*** 文档编号:34262026 上传时间:2018-02-22 格式:DOC 页数:48 大小:371KB
返回 下载 相关 举报
第3章 面向对象的编程基础_第1页
第1页 / 共48页
第3章 面向对象的编程基础_第2页
第2页 / 共48页
第3章 面向对象的编程基础_第3页
第3页 / 共48页
第3章 面向对象的编程基础_第4页
第4页 / 共48页
第3章 面向对象的编程基础_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《第3章 面向对象的编程基础》由会员分享,可在线阅读,更多相关《第3章 面向对象的编程基础(48页珍藏版)》请在金锄头文库上搜索。

1、第 3 章 面向对象的编程基础面向对象程序设计(Object Oriented Programming)是目前主流的程序设计方法,它已经基本替代了 1970 年代初期发展的“结构化的” 、基于过程的程序设计技术。Java 语言是一种完全的面向对象的程序设计语言,它全面支持面向对象的程序设计方法。核心内容:1. 面向对象的基本概念2. 类的定义3. 对象的使用3.1 面向对象的基本概念所谓面向对象(object-oriented 简称: OO) ,就是一种一切从对象出发的思维方式,其主要思想为:现实世界是由一个个的对象组成的,并由此建立基于对象的概念模型,通过面向对象的理念使计算机软件系统能与现

2、实世界中的系统一一对应。面向对象程序设计可以被视作一种在程序中包含各种独立而又互相调用的单位和对象的思想,这与传统的思想刚好相反:传统的程序设计主张将程序看作一系列函数的集合,或者直接就是一系列对电脑下达的指令。面向对象程序设计中的每一个对象都应该能够接受数据、处理数据并将数据传达给其它对象,因此它们都可以被看作一个独立的、负有特定责任的角色。与面向过程的程序设计方法不同:面向对象的程序设计方法更符合人们认识客观世界的思维习惯,降低了问题难度和分解问题的复杂度;提高了程序代码的重用性,简化了编程过程。目前已经被证实,面向对象程序设计推广了程序的灵活性和可维护性,并且在大型项目设计中广为应用。面

3、向对象的程序设计方法主要涉及类、对象、封装、继承和多态等基本概念。3.1.1 对象和类面向过程的程序设计是以研究和实现解题过程为主体,而面向对象的程序设计是以研究各种对象为主体。对象是面向对象程序设计的核心,面向对象的程序是由若干对象组成的,通过对象的相互作用来实现整个程序的功能。类是面向对象程序设计的关键,类是同种类型的对象的抽象。1、对象对象是对问题领域中事物的抽象。对象具有三个要素,分别是状态、行为和标识。对象的状态是对象的静态属性,通常用变量来表示该对象的内部的各种信息。每个对象有其自己的内部变量,这些变量的值表示了该对象所处的状态。当对象的变量值发生了改变,则表示该对象状态发生了变化

4、。例如,一部手机:品牌是诺基亚,价格是 1500 元, 颜色为银灰色,这些信息用对象中的内部变量保存,为对象的静态属性。对象的行为是对象的动态属性,也称为对象的功能。对象的行为在程序中用方法来表示,方法便是一种函数,对象的行为或功能被定义在一个个函数中。面向对象的程序设计方法中,对象内部包含了描述状态的各种属性和对其属性进行操作的若干方法。此外,还有对象与其它对象进行通信的接口,以便和其它对象协作完成某些功能。对象的标识是用来区分不同对象的标识符。每个对象都是惟一的,每个对象都具有一个仅属于它的惟一的标识,对象的标识是用对象名来表示的。对象的三个要素:状态、行为和标识,在计算机实现中分别用对象

5、的变量、方法和对象名来表示。2、类类是一组具有相同属性和行为的对象的抽象。类是对现实世界中的实体的高度抽象,是对客观世界中某些实体的共性的提取。从程序设计角度来说,类是一种自定义的数据类型,通常称为类类型,类的某一个具体的对象被称为类的一个实例。类和对象是一般与个别的关系,或者说是抽象与具体的关系。类是一个模板,由它可以产生具有共同特性的不同的对象。类及类的关系构成了对象模型的主要内容,面向对象编程的主要任务就是定义对象模型中的各个类,最后将类实例化为对象。3.1.2 封装性封装(Encapsulation)就是把对象的属性和行为结合成一个独立的单位,并尽可能隐蔽对象的内部细节。封装有两个含义

6、:一是把对象的全部属性和行为结合在一起,形成一个不可分割的独立单位。对象的属性值(除了公有的属性值)只能由这个对象的行为来读取和修改;二是尽可能隐蔽对象的内部细节,对外形成一道屏障,与外部的联系只能通过外部接口实现。封装性具有以下优点:(1)封装的信息隐蔽作用反映了事物的相对独立性,可以只关心它对外所提供的接口,即能做什么,而不注意其内部细节,即怎么提供这些服务。(2)封装的结果使对象以外的部分不能随意存取对象的内部属性,从而有效地避免了外部错误对它的影响,大大减小了查错和排错的难度。另一方面,当对象内部进行修改时,由于它只通过少量的外部接口对外提供服务,因此同样减小了内部的修改对外部的影响。

7、(3)封装机制将对象的使用者与设计者分开,使用者不必知道对象行为实现的细节,只需要用设计者提供的外部接口让对象去做。封装的结果实际上隐蔽了复杂性,并提供了代码重用性,从而降低了软件开发的难度。3.1.3 继承性继承性是面向对象方法中的重要特性。继承(Inheritance)反映了两个类之间的一种关系:一个类拥有了另一个类的所有数据和方法时,称该类继承了另一个类,这两个类具有继承关系。被继承的类称为父类或基类,继承父类所有成员的类称为子类或派生类。继承意味着“自动地拥有” ,即子类中不必重新定义已在父类中定义过的属性和行为,而它却自动地、隐含地拥有其父类的属性与行为。继承允许和鼓励类的重用,提供

8、了一种明确表述共性的方法。一个子类既有自己新定义的属性和行为,又有继承下来的属性和行为。尽管继承下来的属性和行为是隐式的,但无论在概念上还是在实际效果上,都是这个类的属性和行为。当这个特殊类又被它更下层的特殊类继承时,它继承来的和自己定义的属性和行为又被下一层的特殊类继承下去。因此,继承是传递的。继承可分为两种:单重继承和多重继承。单重继承是指只有一个父类的继承;多重继承是指有一个以上父类的继承。单重继承的程序结构比较简单,继承层次为树状结构;多重继承的程序结构相对复杂,其结构为网状。Java 语言只支持单重继承,不支持多重继承,但Java 语言可通过接口(interface)方式弥补由于不支

9、持多重继承而带来的子类不可使用多个父类成员的不足。在软件开发过程中,继承性实现了软件模块的可重用性、独立性,缩短了开发周期,提高了软件开发的效率,同时使软件易于维护和修改。这是因为要修改或增加某一属性或行为,只需在相应的类中进行改动,而它派生的所有类都自动地、隐含地作了相应的改动。3.1.4 多态性多态性(Polymorphism)也是面向对象方法的一个重要特性。多态是指程序中定义的引用变量所指向的对象的具体类型和通过该引用变量调用的实际方法在编程时并不确定,而是在程序运行期间才确定,即一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期

10、间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。在 Java 语言中,多态性主要体现在以下方面:(1)方法重载。通常指在同一个类中,相同的方法名对应着不同的方法实现,但是方法的参数构型不同。在编译时根据实际调用方法的参数确定哪个方法被调用到。这种称为静态绑定。(2)成员覆盖。通常是指在子类中和父类中,有相同的变量名或方法名,但变量名的值、方法体的内容不同。当用超类类型的引用变量引用子类对象时,被引用

11、对象的实际类型而不是引用变量的类型决定了调用哪个类的成员方法。这是在运行时动态确定的,称为动态绑定。Java 中的多态性是通过综合运用向上转型、继承、覆盖,重载等实现的。多态性增强了软件的灵活性和扩展性,在面向对象程序设计中,为了提高程序的抽象程度和简洁程度,多态应用相当普遍。3.2 类的定义Java 程序的基本单位是类,Java 所有的代码都是包含在一个个的类里面的。类可以认为是一种自定义的数据类型,是构造对象的模板,或者说对象是类定义的的数据类型的变量。一个类可以包含有成员变量、方法、初始化代码块,甚至还可以包含其它的类(内部类) 。3.2.1 类的定义形式定义类的形式如下所示: clas

12、s extends implements ,其中,class,extends 和 implements 是定义类时用到的关键字。关键字 class 用于定义一个新类,其后是所定义的类的类名。类名的命名方法同标识符,通常采用有意义的单词或者单词组合,首字母通常大写,如:Student ,DbConn 等。关键字 extends 用于说明定义的新类是某个已存在的类的子类,即指出新类的父类。这个已存在的父类可以是 Java 语言类库中已有的类,也可以是编程者已定义好的类。 extends关键字体现了类之间的继承关系。关键字 implements 用于说明当前定义的新类实现了哪些接口(一个类可以实现多

13、个接口) 。接口是 Java 语言实现多重继承的一种特殊机制,将在 4.3 节中讲述。修饰符 是用来说明类的作用域和其它性质的。修饰符分为以下两类: 访问修饰符:public、默认访问。 非访问修饰符:abstract 、 final、strictfp。(1) public:说明该类为公共类,可以被所有包中的所有类所使用(不在同一包中时需要先导入) 。(2) 默认访问:具有默认访问的类在定义时其前面没有任何访问修饰符,其只能被同一个包中的类所使用,而不能被其它包中的类所访问。(3) abstract:使用该修饰符的类被称为抽象类。抽象类是不能实例化的类,其存在的目的是用于扩展(即被子类继承)

14、。通常抽象类是它的所有子类的属性的高度抽象。比如:如果我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆、三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念,这样我们可以设计一个抽象类:形状类。(4) final:说明该类不能有子类,即任何其他类不能继承自(扩展)final 类,故称为最终类。通常这种类的特点是用来完成某种标准功能的类。final 与 abstract 不能同时修饰一个类。(5) strictfp:说明该类中的所有方法代码在处理浮点数时将遵守 IEEE754 标准。如果没有这个修饰符,则方法中所使用

15、的浮点数操作方式可能与平台相关。【例 3-1】下面程序定义了一个简单的类。/文件名:Student.javapublic class Student private String stuNumber;private String name;private String sex;public String getName()return name; public void printStuInfo()System.out.println(stuNumber+ +name+ +sex);程序说明:1) 该类所在源文件的文件名为:Student.java 。2) 每个源代码文件只能有一个 publi

16、c 类;如果文件中有一个 public 类,那么文件名必须与 public 类的名称一致。3) 一个源代码文件可以有多个非 public 类,不包含 public 类的源代码文件可以具有与该文件中任何类都不匹配的名称。下面介绍类体,类的定义是由类头和类体这两部分组成。类体中定义了类的具体内容,主要包括类的属性和功能,即类的成员变量和方法。3.2.2 成员变量类的成员分为成员变量和方法两种。类可以被看作是数据和操纵该数据的代码的集合,数据存放在成员变量中,操纵该数据的代码则存在于方法中。类的成员变量可以是简单变量,也可以是某个类的对象,还可以是数组和其它复杂数据结构。1、 成员变量的定义格式=;其中, 同标识符,尽量做到“见名知义” ;指变量的数据类型。和是不可省略的。对象成员的定义格式如下:=new () ;其中,是另一个类的名字。一个类的成员变量可以是另一个类的对象,这反映了两个类之间的包含关系。2、 成员变量的修饰符成员变量的修饰符有访问控制修饰符和非访问控

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号