第三章面向对象与对象模型 面向对象的程序设计(OOP)已成为现代软件开发的必 然选择。通过掌握面向对象的技术,能开发出复杂、高级的 系统,这些系统是完整健全的,但又是可护充的。OOP是建 立在把对象作为基本实体看待的面向对象的模型上的,这种 模型可以使对象之间能相互交互作用 面向对象程序设计在一个好的面向对象程序设计语言 (OOPL)的支持下能得到最好的实现。]ava就是一种优秀 的OOPL,它提供了用来支持面向对象程序设计模型所需的 切条件。Java有自己完善的对象模型,并提供了一个庞大的 Java类库,并有一套完整的面向对象解决方案和体系结构。 本章介绍面向对象的概念和对象建模的方法,讲解Java 对象模型中的核心部分:类及类的成员。使读者学会如何用 创建和使用]aⅤa对象
Java程序设计大学教程 第三章 面向对象与对象模型 面向对象的程序设计(OOP)已成为现代软件开发的必 然选择。通过掌握面向对象的技术,能开发出复杂、高级的 系统,这些系统是完整健全的,但又是可扩充的。OOP是建 立在把对象作为基本实体看待的面向对象的模型上的,这种 模型可以使对象之间能相互交互作用。 面向对象程序设计在一个好的面向对象程序设计语言 (OOPL)的支持下能得到最好的实现。Java就是一种优秀 的OOPL,它提供了用来支持面向对象程序设计模型所需的一 切条件。Java有自己完善的对象模型,并提供了一个庞大的 Java类库,并有一套完整的面向对象解决方案和体系结构。 本章介绍面向对象的概念和对象建模的方法,讲解Java 对象模型中的核心部分:类及类的成员。使读者学会如何用 创建和使用Java对象
3.1面向对象的概念 面向对象方法学是面向对象程序设计技术的理论基础。面向对象程 设计具有符合人类抽象思维的认知习惯,使得程序开发过程与人 的认知过程同步,便于建立规范化的分析设计方法,使程序具有 更好的封装性、可读性、可维护性、可重角性等一系列优点。 ■面向对象技术以基本对象模型为单位,将对象内部处理细节封装在 模型内部,重视对象模块间的接口联系和对象与外部环境间的联系 能层次清晰地表示对象模型。面向对象的特点主要概括为抽象性、 继承性、封装性和多态性。 ■模型提供了一个物理系统的抽象,模型可以让工程师们忽略无关的 细节而把注意力集中到系统的重要部分来进行思考。软件模型除了 用于系统设计还可以用在很多的方面,例如预期系统的质量、当系 统的某些方面变化时推理特定的属性、测试关键的系统特征等。模 型可以先开发出来用于指导物理系统的开发,或者也可以由一个芑 在的至或煮开发至統产生,作为瑁解系統 为优化系 模语言,用 于对软件进行描述、可视化处理、构造和建立软件系统制品的文档
Java程序设计大学教程 3.1 面向对象的概念 ◼ 面向对象方法学是面向对象程序设计技术的理论基础。面向对象程 序设计具有符合人类抽象思维的认知习惯,使得程序开发过程与人 类的认知过程同步,便于建立规范化的分析设计方法,使程序具有 更好的封装性、可读性、可维护性、可重用性等一系列优点。 ◼ 面向对象技术以基本对象模型为单位,将对象内部处理细节封装在 模型内部,重视对象模块间的接口联系和对象与外部环境间的联系, 能层次清晰地表示对象模型。面向对象的特点主要概括为抽象性、 继承性、封装性和多态性。 ◼ 模型提供了一个物理系统的抽象,模型可以让工程师们忽略无关的 细节而把注意力集中到系统的重要部分来进行思考。软件模型除了 用于系统设计还可以用在很多的方面,例如预期系统的质量、当系 统的某些方面变化时推理特定的属性、测试关键的系统特征等。模 型可以先开发出来用于指导物理系统的开发,或者也可以由一个已 存在的系统或者开发中的系统产生,作为理解系统行为、优化系统 实现的手段。统一建模语言UML是一个通用的可视化建模语言,用 于对软件进行描述、可视化处理、构造和建立软件系统制品的文档
3.1.1面向对象基本原理 面向对象技术,正是利用对现实世界中对象的抽象和对象之间相互关联和 相互作用的描述对现实#址行m并使其射到标统中所 ■抽象性——指对现实世界中某一类实体或事件进行抽象,从中提取共同信息, 找出共同规律,反过来又把它们集中在一个集合中,定义为所设计目标系统中 的对象 继承性—新的对象类由继承原有对象类的某些特性或全部特性而产生出来 原有对象类称为基类(或超类、父类),新的对象类称为派生类(或子类 派生类可以直接继承基类的共性,又允许派生类发展自己的个性。继承性简化 了对新的对象类的设计。 封装性——是指对象的使用者通过预先定义的接口关联到某一对象的服务和数 据时,无需知道这些服务是如何实现的。即用户使用对象时无需知道对象内部 的运行细节。这样,以前所开发的系统中已使用的对象能够在新系统中重新采 用,减少了新系统中分析、设计和编程的工作量。 多态性一一是指不同类型的对象可以对相同的激励做出适当的不同相应的能力。三 多态性丰富了对象的内容,扩大了对象的适应性,改变了对象单一继承的关系
Java程序设计大学教程 3.1.1 面向对象基本原理 面向对象技术,正是利用对现实世界中对象的抽象和对象之间相互关联和 相互作用的描述来对现实世界进行模拟,并且使其映射到目标系统中。所 以面向对象的特点主要概括为抽象性、继承性、封装性和多态性。 ◼ 抽象性——指对现实世界中某一类实体或事件进行抽象,从中提取共同信息, 找出共同规律,反过来又把它们集中在一个集合中,定义为所设计目标系统中 的对象。 ◼ 继承性——新的对象类由继承原有对象类的某些特性或全部特性而产生出来, 原有对象类称为基类(或超类、父类),新的对象类称为派生类(或子类), 派生类可以直接继承基类的共性,又允许派生类发展自己的个性。继承性简化 了对新的对象类的设计。 ◼ 封装性——是指对象的使用者通过预先定义的接口关联到某一对象的服务和数 据时,无需知道这些服务是如何实现的。即用户使用对象时无需知道对象内部 的运行细节。这样,以前所开发的系统中已使用的对象能够在新系统中重新采 用,减少了新系统中分析、设计和编程的工作量。 ◼ 多态性——是指不同类型的对象可以对相同的激励做出适当的不同相应的能力。 多态性丰富了对象的内容,扩大了对象的适应性,改变了对象单一继承的关系
3.1.2建立面向对象的思维 对象是建立面向对象程序所依赖的基本单元。用更专业的话来说, 所谓对象就是一种代码的实例,这种代码执行特定的功能,具有 自包含或者封装的性质。这种封装代码通常叫做类。 封装”的对象具有自己的函数,这种函数被称作“方法”,而 对象的属性则被称为“字段”。当对象内部定义了字段的时候, 它们通常不能扩展到实例以外。 用于创建对象的类有一种功能强大的特性,这就是它们可以继承 其他类。在继承了类后,我们可以通过覆盖( override)方法来 获得希望的结果。 面向对象强调从问题域的概念到软件程序和界面的直接映射;心 理学的研究也表明,把客观世界看成是许多对象更接近人类的自 然思维方式。对象比函数更为稳定;软件需求的变动往往是功能 相关的变动,而其功能的执行者对象通常不会有大的变动。另外 面向对象的开发也支持、鼓励软件工程实践中的信息隐藏、数据 抽象和封裝。在一个对象内部的修改被局部隔离。面向对象开发 的软件易于修改、扩充和维护
Java程序设计大学教程 3.1.2 建立面向对象的思维 ◼ 对象是建立面向对象程序所依赖的基本单元。用更专业的话来说, 所谓对象就是一种代码的实例,这种代码执行特定的功能,具有 自包含或者封装的性质。这种封装代码通常叫做类 。 ◼ “封装”的对象具有自己的函数,这种函数被称作“方法”,而 对象的属性则被称为“字段”。当对象内部定义了字段的时候, 它们通常不能扩展到实例以外。 ◼ 用于创建对象的类有一种功能强大的特性,这就是它们可以继承 其他类。 在继承了类后,我们可以通过覆盖(override)方法来 获得希望的结果。 ◼ 面向对象强调从问题域的概念到软件程序和界面的直接映射;心 理学的研究也表明,把客观世界看成是许多对象更接近人类的自 然思维方式。对象比函数更为稳定;软件需求的变动往往是功能 相关的变动,而其功能的执行者对象通常不会有大的变动。另外, 面向对象的开发也支持、鼓励软件工程实践中的信息隐藏、数据 抽象和封装。在一个对象内部的修改被局部隔离。面向对象开发 的软件易于修改、扩充和维护
3.1.3UML和对象建模 ■模型与建模模型提 类 实例 示例 供了一个物理系统的 类名 (类名) 正方形 抽象,模型可以让工 属性 属性值 边长 操作 位置 程师们忽略无关的细 边界颜色 节而把注意力集中到 内部颜色 系统的重要部分来进 画图 擦图 思考。丛软件建模 移动 技术的发展过程 人们认识到建模语言 是一种图形化的文档 描述性语言,利用它 可以解决在软件建模 过程中存在的沟通障 碍问题
Java程序设计大学教程 3.1.3 UML和对象建模 ◼ 模型与建模 模型提 供了一个物理系统的 抽象,模型可以让工 程师们忽略无关的细 节而把注意力集中到 系统的重要部分来进 行思考。从软件建模 技术的发展过程中, 人们认识到建模语言 是一种图形化的文档 描述性语言,利用它 可以解决在软件建模 过程中存在的沟通障 碍问题
3.1.3UML和对象建模 统一建模语言 Gardene ardenerName String 用的可视化建F #fruitName: String 模语言,用 对软件进行描 Gardene +gain int 述、可视化处 plant: void harvest: void 理、构造和建 gain: void 立软件系统制 泛化关系 的文档 (继承关系) 关联关系 可以把人们对 所需要构建系 可见性 统的想法和理 Berry TropicalFruit Citrus Fruit 解记录下来 类名称 以便用于对系 +Tropical Fruit 统的分析、设 +CitrusFruit 方法 +gain. int gain: int 研究、配 置和维护
Java程序设计大学教程 3.1.3 UML和对象建模 ◼ 统一建模语言 UML是一个通 用的可视化建 模语言,用于 对软件进行描 述、可视化处 理、构造和建 立软件系统制 品的文档。它 可以把人们对 所需要构建系 统的想法和理 解记录下来, 以便用于对系 统的分析、设 计、研究、配 置和维护。 关联关系 泛化关系 (继承关系) 字段 方法 类名称 可见性 ( - # + )
3.1.3UML和对象建模 ■使用建模工具灬… E 建模工具的出 h·p·柘 现提高了建模 sglasrdensys?l 的生产力 回的JB0 ·助回田踢,·副P只只中啼 个优秀的建模 Investor nterface REalestate 工具应该能够 BBasic 完成模型与代 码之间的自动 转换,也可以 -investment float 保持设计模型「 ◆gn hare styloid 实现代码在 变更时的步调 name 致
Java程序设计大学教程 3.1.3 UML和对象建模 ◼ 使用建模工具 建模工具的出 现提高了建模 的生产力。一 个优秀的建模 工具应该能够 完成模型与代 码之间的自动 转换,也可以 保持设计模型 与实现代码在 变更时的步调 一致
3.2类 ■类是对具有共同实现的一些对象或一系列对象 的描述。 通俗地讲,如果不同的对象可以根据其类似的 属性特征和行为操作划分成不同类型的话,那 么决定他们属性特征和行为操作的东西就是类 例如:对于园丁所种植的香蕉、橘子、葡萄等 不同的水果对象,它们有共同的名称属性,以 及种植和收获的操作,因此可将它们划归为果 园系统中的水果类
Java程序设计大学教程 3.2 类 ◼ 类是对具有共同实现的一些对象或一系列对象 的描述。 ◼ 通俗地讲,如果不同的对象可以根据其类似的 属性特征和行为操作划分成不同类型的话,那 么决定他们属性特征和行为操作的东西就是类。 ◼ 例如:对于园丁所种植的香蕉、橘子、葡萄等 不同的水果对象,它们有共同的名称属性,以 及种植和收获的操作,因此可将它们划归为果 园系统中的水果类
3.2.1什么是]ava类 ■当用户编写自己的Java程广cass类名 extends基类 当程序运行时,已声明的 象的过程称为实例化(ins //类的函数成员 构造函数1 类的一个新实例( stand构造函数2 类是一种抽象数据类型,在 类型来定义。类的语法结朴 方法1; 的类名称。如果其继承自 方法2 关键字加基类名称。 /类的数据成员 类通常不需要从头生成。 字段1 而来,继承祖先类的可用 字段2 即使是从头创建的新类也 过我们可以合法省略 exter}
Java程序设计大学教程 3.2.1 什么是Java类 ◼ 当用户编写自己的Java程序时,主要工作就是编写类。 当程序运行时,已声明的类用来创建新对象。由类创建对 象的过程称为实例化(instantiation),每个对象都是 类的一个新实例(instance)。 ◼ 类是一种抽象数据类型,在Java中类也被当作一个数据 类型来定义。类的语法结构包括关键字class、跟在后面 的类名称。如果其继承自某个基类,还需要使用extends 关键字加基类名称。 ◼ 类通常不需要从头生成。相反,他们可以从其他的类派生 而来,继承祖先类的可用类成员,包括:字段、方法等。 即使是从头创建的新类也必须是继承自Object类,只不 过我们可以合法省略extends Object而已。 class 类名 extends 基类 { //类的函数成员 构造函数1; 构造函数2; ... 方法1; 方法2; ... //类的数据成员 字段1; 字段2; ... }
3.2.2类成员 白国“ Gardener java 类成 Gardener &o Gardener ■数据|- gardenerName: String 白字段 an banana 变量|- banana: Fruit fi gardenerName 函数 grape: Fruit n grape 操 -orange Fruit 作 n orange 命构造函数 口方+ Gardener ◆ Gardener( String)j操 作 +work void 白色方法 口构- gain void 去 aIn i化。三 plant: void o work
Java程序设计大学教程 3.2.2 类成员 ◼ 类成员包括数据成员和函数成员。 ◼ 数据成员是面向对象的术语,用于表示类中的数据 变量,即Java中的字段(field)。 ◼ 函数成员也是面向对象的术语,用于表示类中的操 作。Java的函数成员包括方法和构造函数: 方法是一些封装在类中的过程和函数,用于执行类的操 作,完成类的任务。 构造函数是一种特殊的方法,用于对象的创建和初始化