第4章《抽象与封装》_第1页
第4章《抽象与封装》_第2页
第4章《抽象与封装》_第3页
第4章《抽象与封装》_第4页
第4章《抽象与封装》_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

第四章抽象与封装 本章英文缩略词列表 面向对象编程 OOP 从问题域客观存在的事物出发 将这些现实世界的物理实体抽象成概念世界的抽象数据类 再进一步将这种抽象数据类转换为计算机世界的类 类刻画出实体所具有的状态信息与所能发挥的功能信息 是创建对象时所遵循的模板 面向对象编程 续 对类进行实例化 就生成一个个的对象 对象对应于各个具体事物 是程序运行过程中实际发挥作用的类的独立内存映像 借助于类与对象这两个面向对象程序中最基本的要素 按照尽可能符合人类自然思维的方式 来构造软件系统 这就是所谓的面向对象程序设计 OOP OOP的逻辑过程 面向对象设计分析的完整过程如图所示 面向对象的重要特征 面向对象具有以下几个重要特征 抽象 封装 继承 多态 抽象 Abstraction 抽象 抽象是面向对象编程的起点 也是其最本质的特征之一 抽象的广义概念是这样定义的 从研究对象中提取与当前目标主题关系最密切的主要方面 而忽略掉与目标无关的那些方面或关系不大的细枝末节 从而更充分地注意与当前目标有关的方面 更明确地突出主题 这就是抽象 抽象示例 下图阐述了如何由自然界众多的动物实体出发 经过抽象的处理过程 最终得到动物这一概念 封装 Encapsulation 封装 封装也可称为信息隐藏 InformationHiding 是通过对象的方法来访问与改变对象属性的一种机制 封装是面向对象的一个重要原则 其实现的核心是将类的属性与相关的操作捆绑起来 包装成不可分割的 独立的对象实体 将内部的数据与实现细节尽可能隐蔽起来 使外部用户不能直接操纵对象的内部信息 只能通过对象对外提供的施加有一定限制的访问接口来使用对象 封装示例 下图形象地说明了一个类的封装原理 类对数据与行为的封装是借助于不同级别的访问修饰符来达到控制目的的 继承 Inheritance 继承 继承是指从已有的类中可以派生出若干个新类 已有类称为基类或父类 新类称为派生类或子类 子类将自动地获得基类的属性与方法 从而不需再重复定义这些属性与方法 当然子类还可以修改父类的方法或增加新的方法 从而使自己更适合特殊的需要 类之间的继承关系是现实世界中遗传关系的直接模拟 多态 Polymorphism 多态 是指允许不同类的对象对同一消息作出各自的响应 即以统一的风格处理已存在的数据及相关的操作 多态性语言具有灵活 抽象 行为共享 代码共享的优势 较好地解决了应用程序中方法同名的问题 OOP的优越性 从面向过程到面向对象是程序设计技术的一个飞跃 人们之所以要采用面向对象的程序设计技术 其目的在于 提升程序的开发与运行效率 提高代码的可重用性 或者称为复用性 按照与人类习惯思维方法一致的原则开发系统 OOP的优越性 续 提高程序的可靠性与可维护性提高程序的可扩展性增强程序的可控制性 总之 面向对象的程序设计 能够有效分解 降低问题的难度与复杂性 提高整个求解过程的可控制性 可监视性和可维护性 从而获得较高的开发效率与可靠效果 类的描述 类是Java语言面向对象编程的基本要素 用来定义对象的成员变量 数据域 与成员方法 功能接口 描述对象的状态与行为 Java程序将你要表达的实体或概念封装在类中 并由类来创建诸多的实例对象 应用程序的功能便是由各个类的实例对象 通过调用各类方法来实现的 类的定义 修饰符public 说明了类的属性 abstract与final为互斥的两个修饰符 不能同时出现于一个类的声明中 类的声明用来指定该类的访问修饰符 类的名称 父类名称及实现接口等属性 声明类的完整形式为 关键字class后面跟随类名 类名为用户定义的标识符 最好以意义完整且易于识别的英文单词或短句作为类名 类名应该能够描述出类的特征或作用 类名的第一个字母通常要大写 如果类名由多个单词组成 则每一单词的首字母一般都要大写 类的定义 续1 关键字extends后面跟随着基类的名称关键字implements后面跟随着类所实现的接口列表带有 的项目为可选项目 只在必要时才出现类体是类功能实现的主体 是Java语句的集合语句块界定符 及 标识出类体的有效范围 类的描述 续2 成员变量与成员方法为类的成员要素 简称为成员 Member 它们又分为静态 类的要素与对象 实例要素两类 构造方法是具有与类名相同名称的一种特殊方法 用来创建类的对象及对成员变量进行初始化 构造方法为可选项 当省略时 Java系统会按缺省方式定义空白的构造方法 类定义示例 例 建立一个公共的最终类 日期类 其声明格式如下 publicfinalclassDate 类的声明语句 类体定义privateintyear 年privateintmonth 月privateintday 日publicinitDate inty intm intd 初始化年 月 日值的方法publicshowDate 显示当前日期值的方法 属性声明 public protected与private为成员要素访问修饰符 用来限制成员变量或成员方法的访问范围 即哪些类或对象可以访问此成员要素static用来指明成员要素为静态要素 又称类要素 以区别于对象要素 静态要素存在于类的定义区域中 属于类本身的成员 每个该类的对象共享这些要素 属性 成员变量 MemberVariable 又称为属性 Attribute 或数据域 DataField 用来描述类对象的数据特征 属性声明 续1 final用于成员变量时 是作为定义最终变量即常量的关键字 这类常量的值不允许修改 transient 意为短暂的 瞬时的 为专门用于成员变量的修饰符 表明成员变量为临时变量volatile 意为可变的 不稳定的 为专门用于成员变量的修饰符 声明一个被多个并发线程所共享的变量 属性声明 续2 成员变量名为用户自定义的标识符 一般为有意义的英文单词或单词组合 变量名的第一个字母小写 如果包含多个单词 则其他单词的首字母大写 一个定义语句可以声明一个成员变量 也可以声明多个同类型的成员变量 不同类型的成员变量必须分别由不同的声明语句来定义 属性定义示例 例 定义一个包访问属性的学生类Student 该类继承自Person父类 其属性包含学号 姓名 性别 出生日期 电子邮箱 手机号码 QQ号码 通讯地址等 类的定义代码如下 classStudentextendsPerson extends关键字后面跟随基类名称 publicStringcode 学号publicStringname 姓名publicbooleansex 性别privateDatebirthDate 出生日期privateStringEmail 电子邮箱privateStringcellPhoneCode 手机号码privateintQQCode QQ号码publicStringaddress 通讯地址 成员方法定义 略 类的成员方法 成员方法 MemberMethod 又称为功能接口 FunctionInterface 简称为方法 Method 是类对象与外界的接口 描述了类对象的行为方式 反应了对象的行为特征 特别是对属性进行操作的特征 成员方法对成员变量的操作主要体现在以下两个方面 改变对象的属性 一般记为set方法 返回对象的属性 一般记为get方法 成员方法的定义 类中可定义多个方法 其定义格式如下 成员方法修饰符 参数列表 throws 方法体定义 用于描绘方法行为的Java语句 成员方法展开的定义格式为 public protected private static final abstract native synchronized 参数列表 throws 成员方法的定义 续1 参数列表 子句为成员方法的方法原型 其中成员方法修饰符为修饰成员方法的一些关键字 习惯上 人们将属性的声明放在方法之前 但Java编译器对属性和方法的位置并无规定 二者出现的顺序可以任意进行组合穿插 在语法上都是有效的 成员方法的定义 续2 throws子句称为声明抛出异常短语 如果定义的方法可能会产生自己不准备处理或无法处理的异常 异常为一种严重级别不高的错误 应该在方法定义语句的throws子句中声明抛弃该类异常 使得该类异常对象从调用的栈中向上传播 直到有合适的方法捕获到它并给予处理为止 使用对象成员要素 对象创建后 就拥有了类的属性与方法的实例化副本 通过对象引用变量及点符号 便可以使用该对象 实现对对象属性与方法的访问 调用对象成员方法 续 调用对象成员方法的命令格式为 方法名 参数列表 访问对象属性的命令格式为 this关键字 this是一种特殊的引用 它指向对象自身 表示对自身对象的一个引用 通过this这一引用 能够访问对象自身的成员数据 调用对象自身的成员方法 可以将this作为对象特殊的引用变量的名称 该变量可被访对象自身使用 this关键字主要用于类的非静态成员方法 即实例方法 与构造方法中 而在静态方法 即类方法 中是不允许使用this关键字的 this关键字的用途 构造方法中通过this引用同类的其他重载构造方法在非静态成员方法中 通过this访问当前对象的成员变量或成员方法在构造方法中或非静态成员方法中 参数名或方法内的局部变量名与类的属性同名 为区分开来 需要在类的属性名前加上this 前缀在非静态成员方法的参数中 包含有对当前对象引用的对象类型参数 此时需用this来传递这类参数 Java的修饰符 Java的修饰符 Modifier 是一组用来描述与刻画类 属性 构造方法与成员方法的系统关键字 主要包括访问权限控制修饰符与特征修饰符 特征修饰符是用来刻画类 成员变量或成员方法特定特征的修饰符 针对不同的对象 特征修饰符的内容也各不相同 访问权限控制修饰符简称访问控制修饰符或访问修饰符 其作用是指明类 属性或方法是否可以被程序里的其他部分访问和调用 限定程序的哪些其他部分可以访问和调用它们 哪些不可以 Java修饰符列表 类的访问控制修饰符 公共类访问修饰符public一个类被声明为公共类 表明它可以被所有的其他的类所访问和引用 其他的类既包括本包的类 也包括其他包的类 缺省的类访问修饰符缺省的包访问属性规定该类只能被同一个包中的其他类或对象所访问和引用 而不允许被其他包中的类或对象所使用 类成员的访问控制修饰符 公共访问修饰符public 保护访问修饰符protected 私有访问修饰符private 缺省的访问修饰符 类的特征修饰符 类的所有修饰符 成员变量的特征修饰符 成员变量的所有修饰符 成员方法的特征修饰符 成员方法的所有修饰符 缺省的修饰符 访问修饰符的控制范围 注 表示能够访问访问修饰符定义的类 表示能够继承访问修饰符定义的类 static修饰符与静态成员要素 类的成员要素可以被特征修饰符static声明为静态成员要素 静态成员要素属于整个类 能够通过类名来直接使用 而不需引用任何类的实例对象 因而静态成员要素又称为类成员要素 简称类成员 ClassMember 或静态成员 StaticMember 静态成员要素包括静态属性 StaticAttribute 与静态方法 StaticMethod 它们先于类的任何实例对象创建之前而存在 静态属性的特征 静态属性在类加载时自动创建 并被存放在类的内存体中的公共存储单元中 该类所有的对象共享同一个静态属性 存取到的是相同的值 静态属性可以通过类名直接访问 也可以由对象变量来引用 静态属性与非静态属性一样 可以使用public private final等修饰符 静态方法的特征 静态方法属于整个类 静态方法可通过类名直接访问或者由对象变量来引用 静态方法只能访问该类的静态属性 不能访问该类的实例变量 静态方法只能调用该类的其他静态方法 不能调用该类的实例方法 静态方法的特征 续 静态方法不能以任何方式引用this与super关键字 静态方法不能被子类所覆盖 Java的应用程序必须有且只能有一个入口方法main 是程序运行的起点 它存在于所有对象创建之前 因而main方法必须被定义为静态方法 但实例方法却可以访问该类的静态属性与静态方法 四类成员要素的性质与特征 四类成员要素的使用及访问方式表 Java应用程序的基本结构 package import import 定义用户类1 定义类1的若干成员变量定义类1的若干构造方法定义类1的若干成员方法 定义用户类2 定义类2的若干成员变量定义类2的若干构造方法定义类2的若干成员方法 定义用户类n 定义类n的若干成员变量定义类n的若干构造方法定义类n的若干成员方法 成员方法 程序的基本构成单元是类 而成员方法又是类的主要组成部分 类的功能主要由成员方法来体现 成员方法简称方法 它定义了类的行为或动作 描述了对象可以执行的操作规范 规定了类与外界进行交互的接口 方法是一个有名字的 具有相对独立功能的程序模块 对象通过执行成员方法对传递过来的消息作出响应 从而完成特定的功能 方法之间可以互相调用 同一个方法可被一个或多个方法调用任意次 方法的声明 Java程序中 成员方法只能在类中声明 声明方法的格式如下 方法修饰符 参数列表 throws 方法头部声明 方法体定义局部变量声明 语句序列 return 方法定义的两个部分 方法定义中包含两部分内容 方法头部声明与方法体定义 方法头部声明定义了方法的原型与性质 一般由方法名 参数列表 返回类型 方法修饰符和方法抛出异常五部分组成 方法体则定义了方法的具体内容与操作逻辑 方法体通常包含两类功能 一是对类的属性进行各种操作 二是与其他的类与对象进行消息传递操作 头部声明与方法体定义 方法头部声明定义了方法的原型与性质 方法体则定义了方法的具体内容与操作逻辑 方法体通常包含两类功能 一是对类的属性进行各种操作 二是与其他的类与对象进行消息传递操作 局部变量 类中的数据变量可分为成员变量 MemberVariable 与局部变量 LocalVariable 两类成员变量在类体中定义 其作用域为整个类 成员变量在类中定义的顺序与位置并不影响它的作用域范围局部变量的作用域 Scope 又称为局部变量的作用范围 它是变量可被使用的代码块范围 作用域决定了变量的可见性与生存时间 局部变量作用域开始于它的声明 持续到包含该局部变量的程序段结束之处 不同类型的局部变量 其作用域也不尽相同 局部变量的三种类型 定义于方法体内的局部变量 这类局部变量仅能在方法内使用 其作用域局限于所定义的方法体 复合语句 或称为语句块 中定义的局部变量 这类局部变量只在复合语句中有效 方法的形参也称为局部变量 这类局部变量的作用域覆盖整个方法 方法形参在方法被调用时被创建 并以调用方法传来的实参作为其初始值 当方法终止 调用结束时 这些形参自动被释放 其生命周期也随着终止 局部变量的使用原则 局部变量不允许加Java修饰符 局部变量在使用前必须先声明 并赋初值 否则将出错 方法参数传递机制 方法的参数是方法的输入接口 是外界传递给方法进行加工操作的数据 方法的参数传递机制是指采用何种方式将实参传递给形参 参数传递类型 按引用传递 Callbyreference 按引用传递就是将实参的引用 指向实参值的地址 复制一份赋值给方法的形参 方法对形参的操作实际

温馨提示

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

评论

0/150

提交评论