北京理工大学
软件工程实践
吴 际
北京航空航天大学
第十二讲
面向对象方法与 UML介绍
内容和目的
? 我们的座标
? 面向对象方法
? 面向对象:能与不能
? 统一建模语言 UML
我们的座标
? 应用开发的变化
? 开发工具和手段的发展
? 开发方法和技术的发展
应用开发的变化
? 70年代:小型机(或服务器)上的数学程序
? 80年代:单机(或以太网)上的、文本界面
(或简单图形界面)、计算型应用
? 90年代:互联网( Internet),丰富图形界面、
事务处理型应用,要求快速提交产品
? 现在,分布于 Internet,Intranet,多种界面形
式(基于 Web Browser,Application GUI等),
多种事务处理的集成(电子商务、信息管理),
多种标准的支持 (XML,J2EE,Corba,.NET),
多种平台的支持 (Windows,Linux,Unix,… )
开发工具和手段的发展
? 70年代:基于汇编代码的调试器
? 80年代:基于高级语言的调试器( Turbo C,
Microsoft C,Borland C,Turbo Pascal)
? 90年代:集成了调试器、编辑器、配置管理、
框架代码构造、及时编码提示、应用 GUI界面
编辑等的集成开发环境,如 Visual Studio,
Delphi
? 现在:在集成开发环境基础上,提供更强大的
开发平台支持(,NET,JDK),同时更关注应
用的平台无关性和运行安全性
开发方法和技术的发展
? 70年代:结构化方法(设计、编码)
? 80年代:结构化方法(分析、设计、编
码),状态图,需求工程
? 90年代:面向对象分析、设计、编码,
对象建模
? 现在:商务建模 (business modeling)、
面向对象建模(分析、设计),体系结
构设计(构件化)
面向对象方法
? 结构化与面向对象的提出
? 面向对象方法特征
? 面向对象主要流派
结构化与面向对象的提出
? CFD & DFD,自顶而下的层次分解策略
? 任何一层有变动,其下面的所有层次都必须重新进行层次分

? 层次间的解释关系使得难以维护层次间的一致性
? 强调数据、功能分解,但忽略了数据、功能的整合
? 数据与功能分离的结构化认知观点,实际偏离了人认
知世界的基本原则,
? 以实体为单位,以关系为核心
? 尽管有缺点,但结构化仍有可借鉴之处,
? 结构化原则
? 数据字典
? 状态图
What do you think about OO?
大幕拉开:面向对象
? 面相对象的目标:以人的(获接近于人
的)认知方法和原则来描述事物
? 完全不同于 结构化 的描述手段,
? 类、对象
? 继承
? 多态
? 消息
类、对象是核心
? 面向对象分析、设计、编码的基本单位
? 数据与功能的有效封装
? 可直接映射到现实或抽象的实体
? 关系、状态、行为
? 开发管理的基本单位
? 类测试就是, 单元测试, !
继承:面向对象冠上明珠
? 如果没有继承,谁能在一个小时之内,只使用
SDK接口编写出 Notepad?如果使用继承,你只
需十分钟(或更少)!
? 继承至少提供了两个方向的设计支持,
? 重用
? 抽象、接口( COM,DCOM,Bean)
? 没有继承,几乎不可能有通用的容器类
(Container or Collector)可供使用
? 多继承:你使用过多少次?
多态:面向对象 ‘ 自适应 ’ 中

? 多态( polymorphism),多种形态,统
一语义
? 接口描述了通讯协议
? 多态使得基于接口的通讯能够自适应
Arg1,agr2,

多态:面向对象 ‘ 自适应 ’ 中

? 两种多态,
? 同一个类中的不同形态接口
? 不同子类以不同形态实现(或重载)父类接

? 典型例子:画图程序中 GraphManager类
的 Draw,Move,Open,…
? 典型例子:文档编辑中针对不同对象的
统一的 Cut/Copy/Paste操作
消息:可能让你失望
? 不要试图用信息理论或通讯理论中的消
息来理解
? 也不要用操作系统中的消息(事件)来
理解
? 所谓两个对象间的一个消息就是一个对
象使用了另一个对象的操作 (operation),
简单说就是对象的操作调用!
? Windows中的 SendMessage和
PostMessage根本就与面向对象无关!
对象状态
? 对象状态只决定于对象的数据,和全局
数据、非对象的局部数据无关
? 对象状态和对象行为之间的关系,
? <s1,b1>,<s2,b2>,b1 = b2 iff s1 = s2,
? 如果你的程序不满足这条定理,有两种
情况,
? 类的某个方法使用了全局变量
? 类的某个方法中的局部变量初始值不确定
对象关系:无法让人满意
? 目前的面向对象提供了三种对象关系描
述手段,
? 继承
? 聚集(组成)
? 关联:对象之间有关系!
? 然而,现实世界中实体之间的关系丰富
多彩,岂止这三种?
面向对象分析
? 目标:使用对象来描述问题域,进而抽象出问
题域类,并把求解问题的约束分配到问题域类
? 关注:是否完整、清晰的描述了问题域及约束
? 雷区:使用 DFD,然后把每个处理节点都抽象
为一个类
? 雷区:很快就在某个局部(通常为方法)进入
算法、编码
? 面向对象分析模型的价值(领域重用、测试)
面向对象设计
? 目标:引入类(族)实现问题域类(在概念层
次上),同时把系统约束分解、落实到类的方
法层次
? 关注:体系结构、接口、效率
? 雷区:有些类是 ‘ 上帝 ’,而有些类只是 ‘ 弱
智的代表 ’
? 雷区:盲目追求所谓封装、抽象类
? 面向对象设计模型的价值(设计 pattern,风险
跟踪、测试)
适合面向对象的开发过程
? 必须能够管理面向对象分析、设计、实
现、测试、维护各阶段的模型的一致性
? 需要给出一套基于类的开发任务管理方
法(任务定义、风险管理、任务评审)
? 能够在开发的不同阶段提供不同的知识
库(不仅仅是类库!)以供重用
? RUP是个不错的选择
面向对象:能与不能
? Can
? 使你以更有效的手段描述、实现系统
? 提高系统的重用度
? 有效缩短开发周期
? Can not
? 避免错误,尤其是分析、设计错误
? 自动生成精巧的算法
统一建模语言 UML
? 引 论
? 建模技术
? UML的模型图
? UML的基本视图
? UML的目的、主要特点和和应用领域
引论
? Why Unified?
? UML是一种建模语言
? UML的设计目标
? UML的发展历程
Why Unified?
? 面对众多的建模语言, 用户没有能力区别不同语
言之间的差别 。
? 在众多的建模语言中, 实际上各有千秋, 需要取
长补短, 日臻完善 。
? 虽然不同的建模语言大多相同, 但仍存在某些细
微的差别, 这极大地妨碍了用户之间的交流 。
UML是一种建模语言
? 建模方法 = 建模语言 + 建模过程 。 建模语言
定义了用于表示设计的符号 (通常是图形符号 );
建模过程描述进行设计所需要遵循的步骤 。
? 标准建模语言 UML是一种建模语言, 而不是一
种方法, 它统一了面向对象建模的基本概念,
术语及其图形符号, 为人们建立了便于交流的
共同语言 。
UML的设计目标
?UML是由 Booch,Rumbaugh 和 Jacobson 发起,
在 Booch方法,OMT方法和 OOSE方法的基础上,集
众家之长,几经修改而成。 UML的设计目标是,
?运用面向对象概念来构造系统模型 (不仅仅针对软件 )
?建立起从概念模型直至可执行体之间明晰的对应关系
?着眼于那些有重大影响的问题。
?创建一种对人和机器都适用的建模语言。
UML的发展历程
? 1994.10,Booch 和 Rumbaugh 将 Booch93和 OMT-2 统一,
1995.10.发布 UM0.8。
? 1995年秋, 经过 Booch 等三人的努力, 1996.6 和 1996.10发布
UML0.9和 UML0.91。
? 1996年成立 UML成员协会, 有 700多公司支持 UML,占领 OO市场的
85%。
? 1997.1发布 UML1.0,1997.9发布 UML1.1。
? 1997.11 OMG采纳 UML1.1作为 OO技 术的标准建模语言 。
? 此后, UML的维护工作由 Cris Kobryn领导的 OMG 版本修改小组 RTF
( Revision Task Force)负责,
? 1998.6,UML V,1.1 (编辑修改版 ),
? 1999.6,UML V,1.3 (技术终订版 ),
? 目前正处于 UML V,2.0阶段
UML的发展历程 (续 )




OOPSLA95 Unified Method 0.8
工业

标准

统一

分散

各部

Booch93 OMT-2
1996.6和 1996.10 UML 0.9&0.91
1997.11.17
1997.9公布 UML 1.1
1997.1公布 UML 1.0 合作伙
伴意见
UML 1.1被 OMG
接纳为标准
其他方法 Booch91 OMT-1 OOSE
1999.6 UML1.3
建模技术
? 构造模型的目的
? 建模技术要点
? 系统的多种特性
构造模型的目的
? 在着手解决一个复杂问题之前, 对解决方案进行
检测 。
? 用于同客户和其他相关人员进行交流 。
? 加强视觉效果 。
? 对复杂问题进行适度简化 。
模型是对事物的抽象 。 人们常常在正式建造实物之前, 先建
立模型, 以便更透彻地了解它的本质, 抓住问题的要害 。
建模技术要点
? 构造模型的基本技术是抽象,应突出与问题有关的
特征,将与问题无关的性质略去。
? 不必追求绝对的真实和完全,只需从期望的目的角
度看其是否充分。
? 应当刻画问题的关键方面,略去相对次要的因素。
? 建模语言应支持人的由模糊到清晰、由粗到细逐渐
完善的认识过程。
? 应采用可视化图形建模语言。
系统的多种特性
? 在功能和性能方面:功能正确, 性能良好
( 效率要高 ) 。
? 在非功能方面:鲁棒性, 可扩充性, 可再用
性, 兼容性, 可移值性, 可验证性, 完整性
以及易使用性等方面要好 。
一个系统应具有多方面的特点,
一个系统要从多个视角去描述 。
一个视图可能包含多个模型图, 每张模型图都应当
简单明了, 易于交流 。
UML的模型图
UML定义了 5 类, 共 9 种模型图,
用例图, 从用户角度描述系统的功能, 并指出各功能
的操作者 。
静态图, 类图, 对象图 和包图 (在 UML 1.1 中, 包图
不再看作一种独立的模型图 )。
行为图, 状态图, 活动图 。
交互图, 顺序图, 合作图 。
实现图, 构件图 描述部件的物理结构以及各部件之间
的依赖关系; 配置图 定义系统中软硬件的物理构架 。
关于保险业务的一张用例图
保险销售人员 客 户
客户统计表
签署保险文件
销售统计表
静态图:类图、对象图和包图
? 静态图包括类图, 对象图和包图, 用以描述模型
中类及其实例之间的静态关系 。
? 类图用于定义系统中的类, 包括描述类之间的关
系 (关联, 继承, 聚合 )以及类的内部结构, 即类
的属性和操作 。
? 对象图显示类的对象实例, 一个对象图是类图的
一个实例 。
? 包图由包或类组成, 主要表示包与包, 或包与类
之间的关系 。 包图用于描述系统的分层结构 。
? 关于金融贸易的一张类图
客 户 业务量 商 人 1 1..*
Owns
1..* 1..*
Handles
Contains 0..*
0..*
证 券
债 券 互助基金 股 票
? 类图和对象图
类图 展示类
Uses
0..1 1..*
计算机
名字,String
内存,Integer
作者
名字,String
年龄,Integer
小影:作者
名字 =,王小影,
年龄 = 32
小影的工作 PC,
计算机
名字 =, Dell PIV”
内存 = 256MB
小影的工作 PC,计
算机
名字 =, HP PIII”
内存 = 128 对象图 展示类的实例
行为图:状态图,活动图
? 行为图包括状态图和活动图,描述系统的动态
模型和组成对象间的交互关系。
? 状态图描述一类对象的所有可能的状态以及事
件发生时状态的转移条件。
? 活动图描述为满足用例要求所要进行的活动以
及活动间的约束关系。使用活动图可以很方便
地表示并行活动。
一部电梯的状态图
上升 [几层 ]
在第一层 上升 [几层 ]
向第一层下降
下降状态 空 闲 状

上升状态
到达 [第几层 ]
到达 [第几层 ]
下降 [几层 ]
超时 []
一台打印机服务器的活动图
创建附加文件
显示 "磁盘已满 "
的信息
显示 "正在打印 "
的信息
[磁盘已满 ]
[尚有磁盘空间 ]
打印机,
打印 [文件 ]
删除显示信
息的对话框
交互图:顺序图,合作图
? 交互图包括顺序图和合作图,它描述对象间的交
互 (动态合作 )关系 。
? 顺序图:用以显示对象之间在时间顺序方面的动
态合作关系。因此,如果强调时间和顺序,应当
使用顺序图。
? 合作图:着重描述对象间的通信方面的动态合作
关系。因此,如果强调通信关系,则可以选择合
作图。
一台打印机服务器的顺序图
,计算机, 打印服务程序, 打印机, 打印队列
〔打印机空闲〕
打印〔文件〕 〔打印机忙〕打印〔文件〕
打印 〔 文件 〕
一台打印机服务器的合作图
[打印机忙 ]
1.2保存 [文件 ]
,计算机, 打印队列
1:打印 [文件 ]
,打印服务程序, 打印机
[打印机空闲 ]
1.1打印 [文件 ]
实现图:构件图,配置图
? 实现图包括构件图和配置图。
? 构件图:描述部件的物理结构以及各
部件之间的依赖关系。
? 配置图:定义系统中 (特别是在分布式
及网络环境中 )软硬件的物理构架 。
反映程序代码构件之间
依赖关系的构件图
main.obj,
主类
comhnd.obj,
命令处理器
Whnd.obj,
窗口处理器
client.exe,
客户程序
graphic.dll,
图形库
comhnd.cpp,
命令处理器
Whnd.cpp,
窗口处理器
main.cpp,
主类
描述系统物理构架的配置图
,DecNet协议,
客户 A,
个人电脑 PC
客户 B,
个人电脑 PC
,TCP/IP协议,
,TCP/IP协议,
服务器,02
数据库 服务器,
VAX
UML的基本视图
? UML的用例视图
? UML的逻辑视图
? UML的构件视图
? UML的并发视图
? UML的配置视图
UML的五类基本视图
构件示图
用例视图
配置视图
逻辑视图
并发视图
UML的五类基本视图 (续 )
? 用例视图, 从系统外部执行者的角度理解, 展示
系统功能 。
? 逻辑视图, 从系统的静态结构和动态行为的角度
展示系统内部功能性设计 。
? 构件示图, 展示代码构件的组织结构 。
? 并发视图, 展示系统的并发性, 刻画并发系统中
的通讯和同步问题 。
? 配置视图, 展示系统的物理的体系结构, 其中用
到的计算机和各种设备称作节点 。
UML的用例视图
? 从系统外部执行者的角度理解系统的功能:它描
述执行者与系统的交互, 其执行者可以是一个用
户, 也可以是另一个系统 。
? 用例图面向客户, 建模人员, 开发人员和测试人
员, 是系统模型图的核心 。
? 用例视图:用例图和活动图描述 。
? 一张用例图是系统的一种用途的描述;一组用例
图描述了整个系统所期望的用途 。
UML的逻辑视图
? 描述系统如何提供要求的功能,
? 静态结构,
? 类 (界面, 内部结构 ); 对象;关系
? 用类图和对象图描述 。
? 动态行为,
? 对象之间相互发送消息而引发的动态合作关系
? 用状态图, 顺序图, 合作图和活动图描述
? 各种特性:永久性, 并发性
? 主要是面向设计人员和开发人员
UML的构件视图
? 描述实现的各个模块及其相互之间的关系,
? 模块的内部结构
? 模块间的依赖关系
? 关于各构件的一些附加信息,
? 资源分配 (构件的责任 )
? 其它管理信息, 如开发工作的进展报告等
? 主要面向开发人员
? 构件视图:由构件图组成, 其中构件表示不
同类型的代码模块
UML的并发视图
? 系统中进程和处理器的划分与任务的分配
? 属于非功能性特性,
? 着眼于资源的有效利用
? 并行执行, 并发地执行多线程控制, 处理线程之间的通
信和同步
? 处理来自外部环境的同步事件
? 面向开发人员和系统集成人员
? 描述并发视图的主要模型图,
? 动态图:状态图, 合作图, 活动图
? 实现图:构件图, 配置图
UML的配置视图
? 展示系统的物理配置, 如计算机和其它设备 (统
称结点 )及其相互之间的连接关系, 包括在物理
的体系结构中如何配置构件的映像关系 。
? 面向开发, 集成和测试人员 。
? 配置视图 用配置图描述 。
面向对象描述的三个层面
概 念 层
说 明 层
实 现 层
Business Model
Architecture
Detailing
1:层次间没有分解对应关系
2:每个面向对象描述元素都可对应到这三个层面 !
UML的主要特点、目的和应用领域
? UML的主要特点
? 使用 UML的目的
? UML的应用领域
? UML的主要特点
? UML统一了 Booch,OMT和 OOSE等方法中的基
本概念:用例图从 OOSE来;类图从 OMT和
Booch等方法来; 实现图 (构件图和配置图 )从
Booch的模块 图 和过程图来 。
? UML吸取了 OO技术领域各流派的长处:状态图
从 Harel 而来;活动图从工作流图而来;合作图
从 Booch的对象图和 Fusion的对象交互作用图等
而来;等等 。
? 在演变过程中 UML提出了一些新的概念 。
使用 UML的目的
软件开发的过程犹如雕琢一件艺术品, 由无形
到有形, 由粗到细 。 但软件开发的最终形式必
须生成程序代码 。 因此当考虑使用 UML时, 一
定要想清楚, 使用 UML的目的以及对编写代码
有何帮助 。
?学习面向对象技术
?和领域专家交流
?帮助理解全局
学习面向对象技术
? UML的各种模型图, 其中用例图描述系统的功
能及其外部的使用者, 确定谁使用系统以及做
什么 。
? 类图描述系统的静态构架, 即构成系统的各种
对象类及其相互关系 。 对象图是类图的实例化,
描述系统在某个时刻可能包含的对象和相互关
系 。
? 行为图和交互图描述系统的动态行为 。
? 构件图和配置图描述系统实现体的构成及其在
硬件环境中的配置情况 。
和领域专家交流
? 有效的方法是使用用例 。 一个用例描述了系统
的某一侧面, 所有用例构成了系统的整个外观 。
用例也有助于制订项目规划和对问题进行深入
理解 。
? 类图很有用, 但应注重在概念层上使用 。 应将
每个类对应用户心中一个概念, 并用用户的语
言来命名和定义 。
? 对于侧重于工作流过程的应用系统, 活动图非
常有用 。 活动图也有助于对实际业务流程中的
并行特性进行自然描述 。
帮助理解全局
? 对于大型项目, 常常只见树木不见森林, 采用
UML有助于理解全局 。 譬如, 类图可了解系统
中有哪些类型的事物, 哪些需要作进一步的考
察 。
? 对大型软件, 无论概念层, 说明层或实现层,
其模型都可能十分庞大 。 此时通常需要分层次
地绘制很多张模型图, 并为整个软件系统建立
全局路线图 。 在较高的抽象层次, 用包图刻画
类图的分组情况 。
UML的应用领域
? UML是一个通用的标准建模语言,可对任何具有静
态结构和动态行为的系统进行建模。
? UML适用于系统开发的不同阶段:需求分析阶段用
用例;分析阶段用类图;实现阶段用动态模型;构
造阶段用 OO编程语言 。
? 在测试阶段:单元测试用类图;集成测试用部件图
和合作图;系统测试用用例图 。
? 在应用标准建模语言 UML时, 需要有相应的开发工
具来支持 。
小 结
? 关于面向对象技术的评论;
? 基本的模型元素;
? 关于视图与 模型 图的评注。
关于面向对象技术的评论
? OO技术的构造方法把软件系统当作结构化抽象数
据类型实现的集合 。 UML为 OO技术提供了强有力
的支持 。
? 在 OO构架中, 每个模块建造在一个数据抽象 (一
组数据结构 )上, 由作为正式接口一部分的服务及
其特性来描述 。
? OO系统的模块称为类, 其接口对应于表示抽象数
据类型规格说明中功能的服务 。 OO技术允许一个
抽象数据类型有多个实现 。
? 基本的模型元素

属性
操作

状态
结点
用例
界面
构件
对象
属性
操作
注释体
? 关于视图与 模型 图的评注
? 不同的视图可以有少量的重叠,一张图可以同时属于多个
视图。
? 图与图之间应有内在联系,最终由这些图描绘系统的全貌。
? 视图之间和图与图之间,须便于交叉浏览和追踪分析检查。
? 视图:展示系统的不同侧面;是由一组模型图构成的一个
抽象;一组视图构成一个系统的完整画卷。
? 模型图:描述视图内容的图形; UML有九种不同类型的模
型图。
? 模型元素:模型图用到各种 OO概念 (如类、对象、消息等 )
以及这些概念之间的关系 (如关联、依赖和泛化等 ); 一种
元素可在多种图中出现,但其表示符号和语义不变。
谢谢!
吴 际
82317649(O)
wuji@safepro.buaa.edu.cn