资源预览内容
第1页 / 共76页
第2页 / 共76页
第3页 / 共76页
第4页 / 共76页
第5页 / 共76页
第6页 / 共76页
第7页 / 共76页
第8页 / 共76页
第9页 / 共76页
第10页 / 共76页
亲,该文档总共76页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第3章 面向对象程序设计Object-Oriented Programming3.1 类和对象n面向对象方法 n类的定义 n成员变量 n成员方法 n构造方法 n对象的创建和使用 n类成员与实例成员 面向对象方法现实生活中的对象 n有形的对象 医院 医生 病人 手术器械 体温计 .n无形的对象 治疗方案 手术规程 .面向对象方法n对象的特征分析 静态特征:属性姓名 性别 年龄 职称 专长 量血压 听诊 写病历 开处方 【案例3-1】用面向对象方法模拟医生为病人诊疗过程。案例说明:本案例通过对病人就诊模型的分析与简化,抽象出包括日期、体温计、病人以及医生等四个主要的类,并利用医 生类的接诊、开处方、诊疗等实例成员方法将这些类联系 起来,重现病人就诊时医生用体温计测量病人体温,给病 人诊疗并开据处方的过程。图5-2 案例5-1的运行结果面向对象的基本概念 对象(Object)是一个应用系统中用来描述客观事物的实 体,是具有特定属性(数据)和行为(方法)的基本运行单 位,是类的一个特定状态下的实例。类(Class)是Java代码的基本组织模块,是用以描述一组 具有共同属性和行为的对象的基本原型,是对这组对象 的概括、归纳与抽象表达,它定义了本类对象所应拥有 的状态属性集及操作这组属性的行为方法集。3132面向对象的基本概念(续1)接口(Interface)是一种只包含常量与抽象方法的特殊 的类,是Java语言用以实现类间多重继承功能的唯一手 段。接口定义了一组特定功能的对外接口与规范,而并 不真正实现这种功能,功能的实现留待给实现这一接口 的各个类来完成 34包(Package)是用来容纳一组相关类与接口的容器,是 Java语言组织与管理类与接口的一种机制33类与对象的关系类与对象之间的关系,类似于数据类型与变量之间 的关系;一个类可以生成无数个不同的对象,每 个对象属性值不同,其状态也不同。可以用计算机模型与计算机实体之间的关系来更形 象地说明类与对象之间的关系: 将冯诺依曼计算机模型看作计算机类,则不同品牌 的计算机实体就对应为一个个的实例对象。类与对象的关系示例计算机模型与计算机实体之间的关系:面向对象编程(OOP) 从问题域客观存在的事物出发,将这些现实世界的 物理实体抽象成概念世界的抽象数据类,再进一 步将这种抽象数据类转换为计算机世界的类 (Class);类刻画出实体所具有的状态信息与所 能发挥的功能信息,是创建对象时所遵循的模板 (Template)。对类进行实例化,就生成一个个的 对象,对象对应于各个具体事物,是程序运行过 程中实际发挥作用的类的独立内存映像。借助于 类与对象这两个面向对象程序中最基本的要素, 按照尽可能符合人类自然思维的方式,来构造软 件系统,这就是所谓的面向对象程序设计(OOP) OOP的逻辑过程 面向对象设计分析的完整过程如图所示:现实域抽象抽象类对象实例化映射抽象数据类物理实体逻辑实现概念域计算机世界面向对象的重要特征面向对象具有以下几个重要特征:抽象封装与隐藏继承多态性 33313234抽象抽象(Abstraction):抽象是面向对象编程的起点 ,也是其最本质的特征之一。抽象的广义概念是 这样定义的:从研究对象中提取与当前目标主题 关系最密切的主要方面,而忽略掉与目标无关的 那些方面或关系不大的细枝末节,从而更充分地 注意与当前目标有关的方面,更明确地突出主题 ,这就是抽象抽象示例下图阐述了如何由自然界众多的动物实体出发,经 过抽象的处理过程,最终得到动物这一概念 封装封装(Encapsulation):封装也可称为信息隐藏 (Information Hiding), 是通过对象的方法来访问与 改变对象属性的一种机制。封装是面向对象的一个重 要原则,其实现的核心是将类的属性与相关的操作捆 绑起来,包装成不可分割的、独立的对象实体,将内 部的数据与实现细节尽可能隐蔽起来,使外部用户不 能直接操纵对象的内部信息,只能通过对象对外提供 的施加有一定限制的访问接口来使用对象封装示例下图形象地说明了一个类的封装原理。类对数据与行为的封 装是借助于不同级别的访问修饰符来达到控制目的的 继承继承(Inheritance):继承是指从已有的类中可以派 生出若干个新类,已有类称为基类或父类,新类 称为派生类或子类;子类将自动地获得基类的属 性与方法,从而不需再重复定义这些属性与方法 ;当然子类还可以修改父类的方法或增加新的方 法,从而使自己更适合特殊的需要。类之间的继 承关系是现实世界中遗传关系的直接模拟多态性多态性(Polymorphism):是指允许不 同类的对象对同一消息作出各自的 响应,即以统一的风格处理已存在 的数据及相关的操作。多态性语言 具有灵活、抽象、行为共享、代码 共享的优势,较好地解决了应用程 序中方法同名的问题OOP的优越性 从面向过程到面向对象是程序设计技术的一个飞跃。人们之 所以要采用面向对象的程序设计技术,其目的在于: 提升程序的开发与运行效率提高代码的可重用性(或者称为复用性)按照与人类习惯思维方法一致的原则开发系统OOP的优越性(续) 提高程序的可靠性与可维护性提高程序的可扩展性 增强程序的可控制性 总之,面向对象的程序设计,能够有效分解、降 低问题的难度与复杂性,提高整个求解过程的可 控制性、可监视性和可维护性,从而获得较高的 开发效率与可靠效果类的定义 u在面向对象的程序设计中,将数据与对数据进行的操作合起来定义为类。u类是将数据和与数据相关的操作封装在一起的集合体,用来定义一组对象共同具有的状态(属性)和行为(方法)的模板。u类是一种复杂的数据类型,它不但包含数据,还包含了对数据进行操作的方法(Method),通常将类中的数据称为成员变量,而操作数据的方法称为成员方法,二者统称为类的成员。 类的定义 nJava类的定义格式如下: n说明:(1)类声明定义该类的名称、访问权限、与其他类的关系以及实现的接口等。(2)类主体定义该类中的成员,包含成员变量和成员方法。成员方法是用来描述对成员变量进行的操作,不但定义方 法,一般还要实现该方法。类的定义 n类声明的格式如下: class extends implements n说明:(1)class是定义类的关键字,、都应该是合法的Java标识符。(2)在类的声明中必须包括关键字class和自定义的类名,而 方括号中的是可选项。(3)子句extends 显式地指明当前类的父类,子句implements 则说明当前类要实现接口。 类的定义 n类主体的定义格式如下: n说明: (1)类体的数据声明为成员变量,针对数据的操作声明为成 员方法,数据的操作过程在成员方法的实现中体现。 (2)构造方法主要用于类对象的实例化,又称构造器。 (3)类体中声明的成员变量和方法的排列顺序可以任意。 成员变量 n声明类的成员变量格式如下:修饰符 static final 数据类型 成员变量名1,成员变量名 2,n说明: (1)修饰符的作用是限定成员变量的可访问权限,主要有 public(公共的)、protected(受保护的)、private(私有 的)以及缺省等四种情况 (2)static用于声明类成员变量,用于保存与整个类有关的状 态数据的成员变量称为静态成员变量或者类成员变量,简 称为类变量,final用于声明常量; (3)成员变量的数据类型既可以是基本数据类型,也可以是 引用数据类型,如数组或者其他类对象等。成员方法n成员方法是可被调用执行并返回值的、能实现特定功能的 程序段。n成员方法声明格式如下: 修饰符abstractstaticfinal 返回值类型 方法名(参数列表) throws 异常类 方法体 n说明: (1)方法的修饰符和成员变量的修饰符一样有四种情况; (2)abstract、static和final分别用于指定所声明的方法为抽 象方法、静态方法和最终方法。静态方法又称类成员方法 或类方法,一般用于与类有关的数据操作,可以使用类名 直接调用。成员方法(3)成员方法执行数据操作功能后都会向调用者返回数据操 作的结果,返回值类型就是用于声明该成员方法返回值结 果的数据类型,可以是包括基本数据类型和引用类型在内 任何合法的类型。 (4)若成员方法不返回任何值,则返回值类型用void标记, 不能缺省。 (5)每个成员方法都有一个方法名,紧邻方法名的是用一对 括号()括起来的参数列表,参数列表也称为形式参数表 ,简称形参表。 (6)形参表主要用于声明该成员方法在被调用时需要调用者 提供的、与数据操作相关的参数的个数与数据类型。每个 成员方法允许声明的形参可以有0到多个,每个形参由形参 数据类型、空格符和形参名组成,多个形参之间用逗号分 隔,即便成员方法没有形参,括号()也不能缺省。成员方法(7)形参的作用域是局部的,只限于声明它的成员方法之内 有效。throws用于声明该成员方法在执行过程中可能会抛 出的异常类型。 (8)花括号所括起来的就是方法体,方法体可以包含一 到多条语句,用以实现成员方法所负责的数据操作功能。 若成员方法的返回值类型不为void,则在方法体中需要使用 return语句返回其数据操作的结果,且结果类型必须与方法 声明的返回值类型相一致。 (9)在方法体内可以局部变量,其作用域只限于声明它的方 法体内,且声明中不能使用public等访问修饰符和static关 键字,同时需遵循“先赋值,后使用”的原则,且在同一个类 的不同方法中可以声明同名的局部变量,包括形式参数在 内的所有局部变量都不能在方法体外被访问。成员方法如果方法有返回值类型,则方法体中必须有return语句 如果想让方法执行后得到值a,即返回值为a,那么在方法 中要使用return a语句。 return有“返还”之意,它把表 达式的值返回到调用之处。例如: public class Class3double f(int x)return 2.5+x; public static void main(String args)Class3 aaa=new Class3();double y=aaa.f(3);System.out.println(y);System.out.println(aaa.f(2); 构造方法n每当由类构造对象时都要调用该类特定的构造方法,在Java中,每个类 都至少有一个构造方法。构造方法可以确保用户正确地构造类的对象, 同时,构造方法也会对对象作初始化工作。n构造方法的声明格式如下: () 初始化的程序代码块 n说明: (1)一个类的构造方法可以有多个,它们都具有相同的方法名,即类名 ; (2)与类的成员方法不同,构造方法用于创建类的对象并对对象的成员 变量进行初始化。 (3)构造方法没有返回值类型,但是也不能有void关键字,且只能通过 new运算符调用,且其修饰符一般采用public(或者没有),以便于在其 他位置根据需要定义并实例化该类的对象。可以使用参数值作为变量的 初值,也可以直接给变量赋 具体的数值。构造方法(4)当一个类没有显式声明其构造方法时,Java编译器会自 动为该类生成一个默认的、无参数的构造方法,且实例化 后对象的成员变量在没有特别赋值的情况下自动获得其所 声明类型的默认值。构造方法构造方法分为缺省的构造方法(不带参数)和带参数的构 造方法。 (1)缺省的构造方法 如果类的定义没有编写构造方法,Java语言会自动为用户 提供。这个由Java自动提供的构造方法就是所谓的缺省构造 方法。缺省的构造方法确保每个Java类都至少有一个构造方 法,该方法应符合方法的定义。 例如在下例的类EmpInfo中,我们没有定义构造方法,则 Java自动提供了一个缺省的构造方法,如下: publi
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号