第 1 章 面向对象概述
2012-3-7 Java面向对象程序设计教程 2
主要内容
? 1.1 面向过程与面向对象的方法论比较
? 1.1.1 关于系统建模方法
? 1.1.2 关于程序设计方法
? 1.1.3 面向过程方法的优势
? 1.1.4 面向对象方法的优势
? 1.1.5 结合面向过程与面向对象方法的应用优势
? 1.1.6 历史反思
? 1.2 面向对象技术的基本原则
? 1.3 面向对象技术的基本要素
? 1.3.1 封装性
? 1.3.2 继承性
? 1.3.3 多态性
? 1.3.4 面向对象概念和术语总结
? 1.4 面向对象的软件开发体系
? 1.4.1 面向对象框架下软件开发的生命周期
? 1.4.2 面向对象相关技术的基本概念
? 1.4.3 面向对象程序设计的重要性
? 1.4.4 面向对象分析与设计的重要性
? 1.4.5 Java的地位
1.1 面向过程与面向对象的
方法论比较
2012-3-7 Java面向对象程序设计教程 4
系统建模方法
? 软件危机与系统建模方法的发展
? 两种流行的建模方法,
? 面向过程建模方法
? 面向对象建模方法
2012-3-7 Java面向对象程序设计教程 5
面向过程的建模方法和建模语言
? 始于 20世纪 70年代的结构化分析设计
( Structured Analysis and Design,
SAD)方法。
? 把一个系统看作是功能的集合,可以进行
分解。
? 用数据流图设计系统的模块结构。
? IDEF( ICAM DEFinition method)图形
化建模语言是面向过程建模技术的代表。
2012-3-7 Java面向对象程序设计教程 6
IDEF的基本表示法
? 盒子代表活动,连到盒子上的箭头表示由活动产生的、或活动所需要
的信息或真实对象。
? 盒子左边及上方进入的箭头表示为完成此活动所需要的数据,控制说 明了控制变换的条件或环境,或者说是约束;
? 右边离开盒子的箭头表示执行活动时产生的数据;
? 下方的箭头作为执行的机制,可以是执行活动的人或设备。
? 箭头限制了盒子间的关系,而不是表示活动的顺序。
2012-3-7 Java面向对象程序设计教程 7
面向对象的建模方法与建模语言
? 发源于 20世纪 60年代,Simula语言中引入了类
( Class)的概念;
? 但真正的面向对象程序设计是 Smalltalk语言奠
定基础的,,面向对象, 一词也是 Smalltalk首
先采用的;
? C++的问世促进面向对象技术的发展,也使之成
为标准化的面向对象程序设计语言。
? 20世纪 90年代初,Booch,Jocobson、
Rumbaugh一起开发了统一建模语言 (Unified
Modeling Language,UML)。 UML可以用于确
定、展示和记录软件系统,UML中的图形标记尤
其适用于面向对象的软件设计。
2012-3-7 Java面向对象程序设计教程 8
UML的基本表示法
? UML有一套复杂的标记法,这里只给出对类的基
本表示,就是在一个矩形框中可以详细描述类
(抽象类、接口、对象实例等)的名称、属性和
操作。
2012-3-7 Java面向对象程序设计教程 9
面向过程程序设计方法
? 从程序设计范型( Paradigm,指设计程
序的规范、模型和风格)看,
程序 = 过程(定义) +(过程)调用。
? 从程序语言角度出发,依靠各种循环、函
数调用、参数传递维护程序。
? 重视程序流程,不在乎数据的传递方式,
只要程序能运行就可以了。
2012-3-7 Java面向对象程序设计教程 10
面向过程程序设计方法的缺点
? 子程序(过程)的抽象级别(函数)太低,难
以重用。
? 需要花相当多的成本维护程序与程序之间的关
联性。
? 数据和操作相分离,当一个或多个数据的结构
发生了变化,这种变化将波及程序的很多部分
甚至遍及整个程序,往往变量和参数传来传去,
传到最后根本就不知道这个变量的作用何在,
故程序的复杂性很难控制。
? 已不适宜描述复杂的数据对象。
2012-3-7 Java面向对象程序设计教程 11
面向对象软件开发方法
? 面向对象程序的基本元素为对象( Object)。
? 程序结构一般由类的定义和类的使用两部分组
成。
? 程序中的一切操作都是通过向对象发送相应的
消息来实现:对象接收到消息后,启动有关的
方法完成相应的操作。
? 从面向对象程序设计范型看,
程序 = 对象 + 消息。
2012-3-7 Java面向对象程序设计教程 12
面向对象技术的优点
? 直观性
? 可增加程序的模块性( Modularity)
? 可提高程序的可复用性( Reusability)
? 增加可扩展性( Extendibility)
? 可改善程序的可维护性
( Maintainability),减少维护负荷
? 可控制程序的复杂性
? 可改进质量,降低成本
2012-3-7 Java面向对象程序设计教程 13
面向对象技术的缺点与困难
? 面向对象需要完全改变每个人的思想以及
开发文化
? 面向对象不仅仅是编程
? 面向对象需要更关注于需求、分析和设计
? 开发人员必须和用户紧密合作
? 面向对象的许多优点要经过较长的时间才
能显示出来
? 面向对象技术不能保证你能构建出正确的
系统
2012-3-7 Java面向对象程序设计教程 14
讨 论
? 面向过程方法的优势
? 面向对象方法的优势
? 结合面向过程与面向对象方法的应用优势
? 历史反思
1.2 面向对象技术的基本原则
2012-3-7 Java面向对象程序设计教程 16
OO( Object Orientation)四原则
? 抽象( Abstraction)
? 封装( Encapsulation)
? 模块化( Modularity)
? 分层( Hierarchy)
2012-3-7 Java面向对象程序设计教程 17
问题域的合理抽象
? 实体抽象 一个对象表
示一个问题域的实体的
有用模型。
? 动作抽象 一个对象提
供一个通用化的操作集,
它们的执行是相似或有
关联的功能。
? 子系统抽象 一个对象
是一组对象和操作的集
合,它们是一个大系统
的特定组成部分。
? 对象设计成败的关键就是
抽象类型必须符合人们对
该客观事物的认识习惯,
这就要求设计人员对问题
域应该有深入的理解,并
且具有较强的综合分析能
力,而达到这一步往往是
有难度的。
1.3 面向对象技术的基本要素
2012-3-7 Java面向对象程序设计教程 19
写字课老师:强调, 飞凤家,
—— 遥远的记忆,仍耳熟能详 …
面向对象老师:强调, PIE”
—— 多态( Polymorphism)
—— 继承( Inheritance)
—— 封装( Encapsulation)
“写好飞凤家”对于学习面向对象的启

2012-3-7 Java面向对象程序设计教程 20
封装性
? 外界要改变一个对象的状态,也就是对它
所包含的数据进行操作,只能向该对象发
出请求消息,然后由该对象的对应方法来
改变其自身的状态。
? 是一种典型的, 黑箱, 机制。
? 有利于代码复用和信息隐藏。
2012-3-7 Java面向对象程序设计教程 21
信息隐藏( Information hiding)
? 如果一个类想获取另
一个类的信息,必须
先征得同意,而不是
直接拿来就用;
? 意味着类模块中除了
向外界提供的接口以
外,还有大量不为外
界所知的用以支持这
些接口实现的属性和
方法。
2012-3-7 Java面向对象程序设计教程 22
继承性
? 继承是在类、子类以及对象之间自动地共
享属性和方法的一种机制。
? 继承具有传递性,即如果有类 C继承 B,B
(间接)继承 A,则 C(间接)继承 A。
? 一个类实际上继承了层次结构中在其上面
的所有类的全部描述。
2012-3-7 Java面向对象程序设计教程 23
继承性保证类可合理层次化
2012-3-7 Java面向对象程序设计教程 24
多态性
? 同一个方法名的操作不仅仅定义一种行为,
因此有比较强的表达能力和更多的用途。
? 多态形式,
参数多态(即重载,Overload)
包含多态(即覆盖,Override)
? 多态为描述客观事物提供了极大的能动性。
2012-3-7 Java面向对象程序设计教程 25
不同人对 play()请求的响应
2012-3-7 Java面向对象程序设计教程 26
面向对象概念和术语
abstract class(抽象类) 对象不能从中实例化的类
abstraction(抽象) 某项目(如类或操作)的基本特征
aggregation(聚合) 表示两个类或组件之间是,is part of”关系
aggregation hierarchy(聚合层次) 通过聚合联系的一组类
association(关联) 对象和其它对象发生联系
attribute(属性) 类知道的东西(数据 /信息)
cardinality(基数) 表示概念“多少”?
class(类) 相似对象的软件抽象,创建对象的模板
cohesion(内聚) 封装单元(例如组件或类)的相关程度
collaboration(协作) 类协作来完成它们的职责
2012-3-7 Java面向对象程序设计教程 27
面向对象概念和术语(续)
component(组件) 可以独立开发、分发以及与其它组件一起构建较大
单元的内聚功能单元
composition(组合) 更强类型的聚合,其中“整体”完全负责它的各组
成部分,每“部分”对象仅和一个“整体”对象相
联系
concrete class(具体类) 可以进行对象实例化的类
coupling(耦合) 两个项目的依赖程度
encapsulation(封装) 把相关的概念(例如类或组件)归组到一个项目
information hiding(信息隐藏) 限制外部对属性的访问
inheritance(继承) 表示,is a”、,is like”或,is kind of”关系
inheritance hierarchy(继承层次) 通过继承相联系的一组类
instance(实例) 对象是类的一个实例
2012-3-7 Java面向对象程序设计教程 28
面向对象概念和术语(续)
instantiate(实例化) 从类中实例化对象
interface(接口) 定义内聚行为集的一个或多个操作特征标记的集合
message(消息) 消息是信息请求或执行一个动作的请求
messaging(消息传递) 为了协作,类互相发送与接收消息
method(方法) 类完成的事情(与结构化编程中的函数相似)
multiple inheritance(多重继承) 类直接从一个以上的类继承
object(对象) 一个人、地址、物品、事件、概念、屏幕显示或者报

object space(对象空间) 主存,加上网络上所有可供使用的存储空间
optionality(可选性) 表示概念“你想要吗?”
override(覆盖) 有时在子类中你需要覆盖(重定义)属性与方法
2012-3-7 Java面向对象程序设计教程 29
面向对象概念和术语(续)
pattern(模式) 考虑到相关因素时通用问题的可复用方案
persistence(持久性) 对象怎样永久被保存的问题
persistent object(持久对象) 一个保存到永久存储的对象
polymorphism(多态) 以不同方式响应同一消息的不同对象,使对象可以不
必知道相互的类型而交互
single inheritance(单一继承) 一个类直接从唯一一个类继承
stereotype(原型) 表示一种建模元素的通用用法
subclass(子类) 如果类 B继承自类 A,我们说 B是 A的子类
superclass(父类) 如果类 B继承自类 A,我们说 A是 B的父类
transitory object(临时对象) 一个没有被保存到永久存储的对象
1.4 面向对象的软件开发体系
2012-3-7 Java面向对象程序设计教程 31
面向对象框架下软件开发的生命周期
2012-3-7 Java面向对象程序设计教程 32
OO框架下软件项目开发的一般过程
业务模型 需求模型 分析模型 设计模型 实现模型 测试模型
关键 UML
元素
业务流程
(用例)、
业务域对

系统、角色、
用例、交互
业务包 /类 /对
象 /消息
软硬件配置、
包 /类 /对象 /消

组件、节点、
编码
测试计划和
测试案例
关键问题 业务建模 系统黑箱建

不含实现细节
的问题域业务
元素建模
面向特定实现
(如软硬件配
置)分析图及
其说明书更改
分布式环境物
理元素建模以
及按需求编码
单元(类 /
操作)测试、
集成系统测

目标(元
素之间的
低耦合高
聚合)
足够的业
务或企业
信息
足够的用例 /
方案信息以
及递增 /迭代
计划
满足需求的最
简单业务 /问
题域模型
支持最大编码
或手工编码的
足够信息
优化组件框架
(网络性能等)
足够的测试
内容
静态结构

业务域对

角色方框图
及用例图
包 /类图 包 /类图 组件与配置图,
逆向类图

2012-3-7 Java面向对象程序设计教程 33
OO框架下软件项目开发的一般过程(续)
业务模型 需求模型 分析模型 设计模型 实现模型 测试模型
动态时基

业务流程
(用例)
用例图、各
用例方案的
顺序图、活
动图
各用例方案的
顺序图,状态
基类型的状态
图及复杂操作
的活动图
各用例方案的
顺序图,状态
基类型的状态
图及复杂操作
的活动图
选择性更改显
示分布信息的
顺序图

关键团队
成员
业务分析

业务分析师 业务分析师 开发工程师 架构师,开发
工程师
开发工程师,
测试工程师
模型确认 项目经理、
架构师、
客户
项目经理、
架构师、客

项目经理、架
构师、客户
项目经理、架
构师
项目经理、架
构师
项目经理、
架构师、客

2012-3-7 Java面向对象程序设计教程 34
面向对象相关技术的基本概念及其关系
? 面向对象分析
( Object Oriented Analysis,OOA)
OOA = 对象 + 分类 + 继承 + 消息通信
? 面向对象设计
( Object Oriented Design,OOD)
? 面向对象程序设计
( Object Oriented Programming,OOP)
? Java的地位