? 2008 BUPT TSEG
软件工程模型与方法
Models & Methods of Software Engineering
第八章 面向对象基础肖丁 dxiao@bupt.edu.cn
2? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心本章内容
8.1 面向对象基本思想
8.2 面向对象的主要概念和基本原则
8.3 几种经典的面向对象的分析和设计方法
8.4 统一建模语言 UML简介
3? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.1 面向对象基本思想
面向对象方向 20世纪 60年代末提出,90年代得到了广泛的应用,其思路是从现实世界中的 客观对象 (如人或事物)出发,尽量 运用人类的自然思维方式(如抽象和分类) 来构造软件系统。
结构化开发方法将系统划分为功能和数据两个部分,数据和功能分别设计和实现。
面向对象从现实出发,将系统抽象为一组交互的对象,每个对象既包含功能,也拥有数据。
4? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.1 面向对象基本思想
以图书管理信息系统为例来比较结构化开发方法和面向对象方法的思路。
结构化方法:
图书基本信息读者基本信息图书借阅信息图书预约信息等数据库管理图书基本信息办理借阅办理还书查询图书基本信息查询自己的借阅信息等函数和过程
5? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.1 面向对象基本思想
面向对象的方法:
从图书借阅的应用中抽象出三类对象:
数据:
姓名、学号、班级
、入学年份、宿舍
、电话等功能:
借书、还书、预约
、查询图书信息、
查询借阅信息、交罚款等学生数据:
书名,ISBN号、出版社、出版日期、
作者等功能:
告知图书状态、查询借阅时间、查询借阅该书读者信息等图书数据:
姓名、工作按证号
、所在、入职年份
、职称、电话等功能:
借书、还书、预约
、查询图书信息、
查询借阅信息、交罚款等教师
6? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.1 面向对象基本思想
可见,面向对象不仅是一些具体的软件开发技术与策略,而且是一整套关于如何看待软件系统与现实世界的关系、用什么观点来研究问题并进行问题求解、以及如何进行系统构造的软件方法学。
从这个意义上讲,面向对象方法是一种运用对象、类、继承、封装、聚合、关联、
消息、多态性等概念来构造系统的软件开发方法。面向对象基本思想可以概括为:
7? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.1 面向对象基本思想
对象,从现实世界中客观存在的事物出发来构建软件系统:
强调直接以问题域(现实世界)中的事物为中心来思考和分析
把它们抽象地表示为软件系统中的对象,作为软件系统的基本构成单位。
这样就可以使软件系统直接映射到问题域,保持问题域中事物及其相互关系的本来面貌。
8? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.1 面向对象基本思想
属性和服务,用对象的属性表示事物的静态特征;用对象的服务表示事物的动态特征。
关联,通过关联表达类之间的静态关系。
消息,对象之间通过消息进行通信,实现对象之间的动态联系。
封装,类和对象的属性与服务结合为一体,对外屏蔽其内部细节,只有公共的服务对外是可见的。
分类,对事物进行分类。
聚合,复杂的对象可以用简单的对象作为其构成部分。
继承,通过在不同程度上运用抽象的原则,可以得到较一般的类和较特殊的类。特殊类继承一般类的属性与服务,
从而简化系统的构造过程及文档。
9? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.2 OO的主要概念和基本原则
8.2.1 主要概念
8.2.2 基本原则
10? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.2.1 主要概念
对象
类
关联和链
继承 /泛化
聚合
11? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心对象
理解对象的两个角度:
现实世界:客观存在的任何事物都可以被看作是对象
有形的对象,如一个人或一件物品;
无形的对象,如一项计划或者一个事件。
对象是一个独立单位,它具有自己的静态特征和动态特征。
软件系统:对象是用来描述现实世界客观事物的一个实体,是构成系统的一个基本单位。
对象由一组属性和对这组属性进行操纵的一组操作组成。
属性用来描述对象静态特征,
操作用来描述对象动态特征。
12? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心类
类是具有相同属性、操作、关系和语义的对象集合的描述。
类为属于该类的全部对象提供了统一的抽象描述
,由类名、属性和服务三个主要部分组成。
对象是类的实例。
类 名属 性操 作
+ 借 阅 图 书 ( )
+ 归 还 图 书 ( )
+ 预 约 图 书 ( )
+ 查 询 图 书 ( )
- 学 号
- 姓 名学 生学 号 = G 1 0 0 5
姓 名 = 王 林学 生 2,学 生学 号 = G 1 0 0 9
姓 名 = 陈 浩学 生 3,学 生学 号 = G 1 0 3 0
姓 名 = 孙 周学 生 1 0 0 0,学 生学 号 = G 1 0 0 1
姓 名 = 张 红学 生 1,学 生
13? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心关联和链
关联用来描述类之间的静态联系,可以包含关联的名称、关联的方向和多重性等属性。
链是关联的实例,用于描述具体对象之间的某种联系。
对象之间的链可以通过对象的属性表达出来。
例如,用类“学生”的对象的属性来记录该对象具体借阅的“图书”对象。
图 书学 生借 阅关联名称:借阅关联方向:单向多重性,7(表示最多借阅 7本)
14? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心继承 /泛化
继承也称泛化,是 OO描述类之间相似性的一种重要机制。
当需要定义的一个新类与已经存在的类存在一定程度的相似度的时候,可以通过继承已经存在的类的方法来创建新类,从而减少定义新类的工作量。
在类的继承层次结构中,位于较高层次的类叫做一般类 /超类 /父类,而位于较低层次的类叫做 特殊类 /子类 。
继承使得特殊类自动地拥有或隐含地复制一般类的全部属性、操作和关联。
15? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心继承 /泛化
只有当两个类之间是
,is a”,
,is like”
,is a kind of,关系时,才可使用继承。
继承可分为单继承和多继承。
如果一个子类继承了超过一个以上的父类的属性和操作,那么这种继承就是多继承 ;
否则就是单继承。
继承是可传递的,可以跨越任意层次
。
子类继承其所有祖先类的属性、操作和关联。
- 姓 名
-,,,,,,
人 员
- 学 号
- 班 级
-,,,,,,
研 究 生
- 职 称
- 工 龄
-,,,,,,
教 职 工
- 在 职 单 位
-,,,,,,
在 职 研 究 生
16? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心聚合
聚合刻画了现实世界事物的构成关系,是一种具有 整体 --部分 语义的关联,也就是说,
聚合是关联的一种,只是普通关联的语义没有聚合那么强 。
其语义可表达为:
,有一个”
,是一部分”
17? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.2.2基本原则
分类
封装和信息隐藏
消息通信
多态性
18? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心分类
分类是按照某种原则划分事物的类别,利用它有助于对复杂世界的认识。
在面向对象的方法中,分类就是把具有相同属性和操作的对象划分为一类,用类作为这些对象的抽象描述。
运用分类原则,可以清楚地表示对象和类之间的关系以及特殊类和一般类之间的关系 。
19? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心封装和信息隐藏
封装是指将属于对象的各种信息 (属性) 和对象的行为 (操作) 组织起来,形成一个实体 → 对象。
接口:定义外部实体能对对象进行的操作方式;
信息隐藏有两方面含义:
对象属性只有通过对象对外发布的接口访问;
外部对象只关心接口的访问方法,不关心接口的内部实现;
20? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心消息通信
消息是对象间实现通信的手段。
操作是对象与外界的接口,当系统中的其他对象或其他系统成分请求这个对象执行某个操作时,
该对象就响应这个请求,执行该操作的实现。
在面向对象系统中,把向对象发出的操作请求称为消息。
一条消息应包括:消息名、入口参数和返回参数。对象接收到消息后先分析消息的合法性,然后为请求者提供服务。
一个对象可以是消息的发送者,也可以是消息的接收者,还可以作为消息中的参数。
21? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心多态性
多态性 (polymorphism)是一种方法,指在不同的类中可以定义相同的操作,而这些操作在这些类中可以有不同的实现。
简单说,当将子类对象的引用传给声明为父类的一个对象变量,如果子类有这个方法就调用子类的方法,如果子类没有这个方法就调用父类的这个方法。
多态性也是一种特性,这种特性 使得一个属性或变量在不同时期可以表示不同类型的对象 。从而增加了代码的灵活性和扩展性。
22? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心多态性
设有一个类,称为乐器,表示为 Instrument,在该类中定义了一个操作 play();
类管乐器 Wind、打击乐器 Percussion、弦乐器
Stringed和铜管乐器 Brass继承类 Instrument而成为该类的子类,不同的子类对 play操作都有不同的实现。
现在,需要写一段代码,分别创建上述 4个子类的对象,并让这些对象执行 play操作。
如果要填加以个木管乐器 Woodwind,怎么修改原有的代码?
23? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心多态性
public class Music {
// 不用关心数组元素具体是绑定到哪种对象
static void tuneAll(Instrument[] e) {
for(int i = 0; i < e.length(); i++)
e[i].play();
}
public static void main(String[] args) {
Instrument[] orchestra = new Instrument[4];
int i = 0;
// 将子类对象的引用赋值给引用父类对象的变量
orchestra[i++] = new Wind();
orchestra[i++] = new Percussion();
orchestra[i++] = new Stringed();
orchestra[i++] = new Brass();
tuneAll(orchestra);
}
} //
24? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.3 面向对象的分析和设计方法
8.3.1 OOA/OOD
8.3.2 Booch方法
8.3.3 对象建模技术( OMT)
8.3.4 面向对象软件工程方法( OOSE )
25? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.3.1 OOA/OOD
OOA/OOD 方法是由 Peter Coad和 Ed Yourdon在 1991年提出的。这是一种逐步进阶的面向对象建模方法,其特点是概念清晰,简单易学。
OOA使用了基本的 结构化原则并结合了面向对象的概念,
包括确定类与对象、标识结构、定义主题、定义属性、定义服务
OOA的结果是结构化的文档,自顶向下包括五个层次:
主题层 (只有主题 )
类与对象层 (上层中加入类与对象 )
结构层 (上层中加入结构 )
属性层 (上层中加入属性 )
服务层 (上层中加入服务 )
26? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
OOA
确定类与对象主要是描述如何找到类和对象。
从应用系统需求出发,以整个应用为基础标识类与对象,然后按这些类与对象分析系统的职责。
获取充足的环境和对象行为信息;
标识结构按照两种不同的原则进行:
第一种是按照一般化/特殊化结构,确定已标识出的类之间的继承层次关系。
第二种是按照整体/部分关系,来确定一个对象怎样由其它对象组成,以及对象怎样组合成更大的复杂对象。
27? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
OOA
标识主题是通过把类与对象划分成更大的单元来完成的。
主题是一组类与对象。
主题的大小应合适地选择,使得人们可以从模型很好地理解系统。
标识属性是通过标识与类有关的信息和关联来完成的。
标识好的属性应放在合适的继承层次上。关联也要通过检查问题域上的关系标识出来。
定义服务就是定义类上的操作。
主要是通过定义对象状态,以及定义诸如创建、访问
、连接、计算、监控等服务来完成。
28? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
OOD
设计问题域部分
问题域部分实际上是 OOA工作的进一步延伸,
在 OOA工作基础上进行。
设计人机交互部分
突出人如何使用系统,以及系统如何向用户提交信息。
29? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
OOD
设计任务管理部分
识别事件驱动任务;
识别时钟驱动任务;
识别优先任务和关键任务;
识别协调者;
定义每一个任务。
设计数据管理部分
数据存放方法的设计,需要确定采用关系型数据库还是面向对象数据库;
相应服务的设计,设计哪些类来实现数据的持久化服务。
30? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.3.2 Booch方法
Booch方法是 Grady Booch从 1983年开始研究,
1991年后走向成熟的一种方法。
Booch方法强调多次重复和开发者的创造性,包含一组启发性的过程式建议:
在一定抽象层次上标识类与对象;
标识类与对象的语义;
标识类与对象之间的关系;
实现类与对象;
31? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.3.2 Booch方法
Booch方法使用四个主图和两个辅图来描述系统各方面的联系:
四个主图:
类图描述类之间的关系;
对象图描述具体的对象和在对象之间传递的消息;
模块图用来描述这些程序构件;
进程图描述过程(进程)如何被分配给特定的处理器。
两个辅图:
状态转换图:用于描述某个类的状态空间和状态变化;
时序图:描述不同对象间的动态交互。
Booch方法的缺点在于不能有效地找出每个对象和类的操作。
32? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.3.3 OMT
OMT最早是由 Loomis,Shan和 Rumbaugh在 1987年提出,J,Rumbaugh在 1991年正式把 OMT应用于面向对象的分析和设计。
这个方法是在实体关系模型上扩展了类、继承和行为而得到的。
OMT包括了一组定义得很好的并且相互关联的概念,它们是
类 (class)、对象 (object)、泛化( generalization)、继承
(inheritance)、链 (1ink)、链属性 (link attribute)、聚合(
aggregation)、操作 (operation)、事件 (event)、场景
(scenario)、属性 (attribute),子系统 (subsystem)、模块
(module)等。
33? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.3.3 OMT
OMT包含四个步骤:
分析
系统设计
对象设计
实现
OMT的三种模型:
对象模型,用类和关系来刻画系统的静态结构。
动态模型,用事件和对象状态来刻画系统的动态特性
。
功能模型,按照对象的操作来描述如何从输入给出输出结果。
34? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.3.3 OMT
OMT的四个步骤,
分析:其目的是建立可理解的现实世界模型。
分析模型由上述三种模型组成。
初始的需求用问题陈述来表达。
系统设计:用于确定高层次的开发策略。
系统被划分成子系统,并分配到处理器和任务。
对象设计:其目标是确定对象的细节,包括定义对象的操作和算法。
实现:在良好的面向对象编程风格和编码原则指导下进行的。
35? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.3.4 OOSE
面向对象软件工程( OOSE)是由 Ivar Jacobson提出的,他将面向对象的思想贯穿到软件工程中,
目的是为了得到一个能适应变化的、健壮的、可维护的系统。
OOSE的过程由五个模型构成:
需求模型
分析模型
设计模型
实现模型
测试模型
36? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.3.4 OOSE
需求模型:从用户的观点出发完整地刻画了系统的功能需求
,主要建模手段有
用例( Use Case)
问题域对象模型
人与系统的交互界面
分析模型:主要目的是要建立健壮的、可扩展的系统的基本结构。 OOSE定义了三种对象类型:
实体对象刻画系统要长期管理的信息和信息上的行为。
界面对象刻画系统界面,使用户和系统能进行双向通信。
控制对象本身不完成任何功能,只是向其他对象委托职责,负责协调其他对象的工作。
通过将 RM中的对象分别识别到 AM中的不同对象类型并分析对象间的关系实现分析模型。
37? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.3.4 OOSE
设计模型:最终表现为由类 (对象) 模块,并且这些类 (对象) 有了详细定义。
实现模型:就是用某种程序设计语言来实现设计模型。
测试模型:关于类 (对象) 的底层测试。
38? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.4 UML简介
8.4.1 UML的出现和发展
8.4.2 UML概述
8.4.3 UML中的扩展机制
8.4.4 UML中的图
8.4.5 基于 UML的面向对象软件开发过程
39? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.4.1 UML的出现和发展
统一建模语言 UML是由 Grady Booch,Ivar
Jacobson和 James Rumbaugh发起,在 Booch方法、
OOSE方法和 OMT方法基础上,广泛征求意见,
集众家之长,几经修改而成的一个面向对象分析与设计建模语言。
该建模语言得到了,UML 伙伴联盟”的应用与反馈,并得到工业界的广泛支持,由 OMG 组织采纳作为业界标准,是软件界第一个统一的建模语言
。
40? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.4.1 UML的出现和发展
UML发展的四个阶段:
各自为政:上世纪 80年代到 1993年期间,面向对象方法出现了百家争鸣的局面,但是不同方法的模型相互转换几乎不可能;
统一阶段,1994年 10月开始,Rational 公司的 Booch、
Rumbaugh和 Jacobson 在 Booch,OMT和 OOSE方法的基础上进行研究,于 1996年发布了统一建模语言 UML( Unified
Modeling Language) ;
标准化阶段,OMG为了使 UML标准更加完善,发布了征求建议书( RFP),随后,Rational软件有限公司建立了 UML
Partners联盟,各软件开发商和系统集成商共同努力,1997
年制定出 UML1.1标准,被 OMG采纳 ;
工业界应用,1998年 OMG接管了 UML标准的维护工作,
UML已成为软件工业界事实上的标准。
41? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.4.2 UML概述
UML 是一种标准的图形化建模语言,它是面向对象分析与设计的一种标准表示,它
不是一种可视化的程序设计语言,而是一种可视化的建模语言;
不是工具或知识库的规格说明,而是一种建模语言规格说明,是一种表示的标准;
不是过程,也不是方法,但允许任何一种过程和方法使用它。
42? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
UML的特点和目标
为建模者提供现成的、易用的、表达能力强的可视化建模语言,以开发和交换有意义的模型;
提供可扩展性和特殊化机制以延伸核心概念;
与具体的实现无关,可应用于任何语言平台和工具平台;
与具体的过程无关,可应用于任何软件开发的过程;
支持更高级的开发概念,例如构件、协作、框架和模式,
强调在软件开发中对架构、框架、模式和构件的重用(
UML 1.4规范);
与最好的软件工程实践经验集成;
可升级,具有广阔的适用性和可用性;
推动对象工具市场的成长。
43? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
UML的基本结构
基本构造块 Basic building block
事物 Thing
关系 Relationship
图 Diagram
语义规则 Rule
name,scope,visibility,integrity,execution
通用机制 Common mechanism
specification,adornment,common division、
extensibility mechanism
44? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
UML的基本结构
事物 Thing 及关系 Relationship
Structural thing
Class,interface,collaboration,use case,component,
node
Behavior thing
Interaction,state machine
Group thing
package
Annotation thing
note
依赖 Dependency
关联 Association
泛化 Generalization
实现 Realization
45? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
UML的组成
UML 用模型来描述系统的结构 (静态特征) 以及行为 (动态特征) 。从不同的视角为系统的架构建模,
形成系统的不同视图 ( view),称为 4+1试图逻辑视图
Logic view
实现视图
Component view
进程视图
Process view
部署视图
Deployment view
用例视图
Use case view
46? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
UML的组成
用例视图:强调从用户的角度看到的或需要的系统功能,这种视图也叫做用户模型视图( user model view) 或场景视图( scenario view);
逻辑视图,展现系统的静态或结构组成及特征,也称为结构模型视图
( structural model view) 或静态视图( static view);
并发视图:描述设计的并发和同步等特性,关注系统非功能性需求,也称为行为模型视图( behavioral model view)、过程视图( process view
),协作视图( collaborative view)和动态视图( dynamic view);
构件视图:关注软件代码的静态组织与管理,也称为实现模型视图(
implementation model view )和开发视图( development view);
部署视图:描述硬件的拓扑结构以及软件和硬件的映射问题,关注系统非功能性需求(性能、可靠性等),也称为环境模型视图或物理视图(
physical view);
47? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
UML的组成
每种 UML视图都是由一个或多个图组成的,一个图就是系统架构在某个侧面的表示,所有图一起组成了系统的完整视图。 UML1.4中规定的 9种图包括:
用例图( Use case diagram):描述系统的功能;
类图( Class diagram):描述系统的静态结构(类及其相互关系);
对象图( Object diagram),描述系统在某个时刻的静态结构(对象及其相互关系);
48? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
UML的组成
顺序图( Sequence diagram):按时间顺序描述系统元素间的交互;
协作图( Collaboration diagram):按照时间和空间的顺序描述系统元素间的交互和它们之间的关系;
状态图( State diagram):描述了系统元素的状态条件和响应;
活动图( Activity diagram):描述了系统元素的活动;
构件图( Component diagram):描述了实现系统的元素的组织;
部署图( Deployment diagram):描述了环境元素的配置并把实现系统的元素映射到配置上。
49? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
UML的组成
视图和组成视图的图之间的对应关系:
用例视图:使用用例图和活动图;
逻辑视图和并发视图:使用类图、对象图,顺序图,协作图,状态图和活动图;
构件视图:使用构件图;
部署视图:使用部署图。
50? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心用例图
参与者 ( Actor):是具有行为能力的事物,可以是一个人(由所扮演的角色来识别)、计算机系统、硬件设备或组织。
场景( Scenario),是参与者和被讨论系统之间一系列特定的活动和交互,通常被称为“用例的实例”。场景是使用系统的一个特定情节或用例的一条执行路径。例如,借书成功的场景或者由于各种原因借书不成功的场景。
用例( Use Case),通俗地讲,用例就是描述参与者如何使用系统来达到目标的一组成功场景和失败场景的集合。例如,借书就是一个用例。
51? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心用例图的作用
用例图主要用于构建用例建模,绘制用例图可按照以下步骤进行:
首先要确定系统的边界,找出在系统边界之外与系统进行交互的参与者;
然后从这些参与者与系统进行交互的角度,
通过用例来描述参与者怎样使用系统,以及系统向他们提供哪些功能来实现其目标。
52? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心用例图
在 UML 语言中,用例图包含系统边界、参与者和用例等三种模型元素图示,
参与者:
用例:
系统边界
aActor
N e w U s e C a s e
53? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心类图
UML类图用于描述类以及类之间的关系。
类图包含三个部分:
类名:表示问题域中的概念,含义清晰准确
属性,可见性 属性名:类型名 = 初始值 {性质串 }
操作,可见性 操作名(参数表):返回值类型 {性质串 }
类 名属 性操 作
54? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心类图中的属性
属性的可见性:
公有的( public):能够被系统中其它任何操作查看和使用,
当然也可以被修改;属性名前用,+”表示;
私有的( private):仅在类内部可见,只有类内部的操作才能存取该属性,不能被其子类直接存取,属性名前用,-”表示;
保护的( protected):供类中的操作存取,并且该属性也能被其子类直接存取,属性明前用,#”表示。
W a s h i n g M a c h i n e
+ b r a n d N a m e,S t r i n g
+ s e r i a l N u m b e r,S t r i n g
+ c a p a c i t y,I n t e g e r
- s t a t u s,S t a t u s = o f f { o n,o f f }
55? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心类图中的操作
操作的型构( signature) 包括:操作名、参数表和返回值类型;同一个类中各操作型构必须是唯一的 。
参数表由多个参数(用逗号分开)构成,参数的语法格式为:
参数名:参数类型名 = 缺省值
56? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心类图中的操作
实例操作与类操作
实例操作:使用操作前必须创建对象;
类操作:即使没有创建对象,该操作也能被调用;
+ b r a n d N a m e,S t r i n g
+ s e r i a l N u m b e r,S t r i n g
+ c a p a c i t y,I n t e g e r
- s t a t u s,S t a t u s = o f f { o n,o f f }
+ m a c h i n e s,I n t e g e r
W a s h i n g M a c h i n e
+ a d d C l o t h e s ( C,S t r i n g )
+ r e m o v e C l o t h e s ( C,S t r i n g )
+ a d d D e t e r g e n t ( D,I n t e g e r )
+ t u r n O n ( ),B o o l e a n
+ b r a n d N a m e,S t r i n g
+ s e r i a l N u m b e r,S t r i n g
+ c a p a c i t y,I n t e g e r
- s t a t u s,S t a t u s = o f f { o n,o f f }
+ m a c h i n e s,I n t e g e r
W a s h i n g M a c h i n e
+ a d d C l o t h e s ( C,S t r i n g )
+ r e m o v e C l o t h e s ( C,S t r i n g )
+ a d d D e t e r g e n t ( D,I n t e g e r )
+ t u r n O n ( ),B o o l e a n
+ g e t M a c h i n e s ( ),I n t e g e r
57? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心类之间关系的表示
UML中类之间的关系可分为:
关联
聚合
继承
依赖
58? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心普通关联
用连接两个类的直线表示;
如果类与类之间的关联是单向的,则称为导航关联。
多重性:表示关联关系的数量关系。
角色:类在一个关联关系中扮演的角色;
研 究 生 教 师协 助人 汽 车拥 有
0,,*
人 汽 车拥 有
0,,*1,,*
研 究 生教 师协 助
10,,*
任 课 教 师助 教
59? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心反身关联
也称为递归关联
一个类可能与它自己发生关联,这样的关联称为反身关联。
当一个类的对象可以充当多种角色时,反身关联就可能发生。
人丈 夫妻 子
1
1
网络节点
n
n
连接
N o d e 2N o d e 1
N o d e 4
N o d e 5
N o d e 7
N o d e 6
N o d e 3
N o d e 8
8 个网络节点的对象图
60? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心限定关联
在 UML中,唯一标识对象的 ID(标识)信息叫做限定符( qualifier)。
利用限定符来查找对象,将得到符合条件的一个对象集合。在类图中,限定词放置在关联关系末端的一个小方框内,紧挨着开始导航的类
。
书 架 书
1 1
书 I D
书 架 书
1 *
61? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心有序关联及关联类
要明确表示关联中的次序关系,一定要将约束
,{ordered}”放在表示关联的直线旁且紧挨着对象被排序的类。
关联间的异或关系
当两个关联不能同时存在时使用
关联类
具有属性和操作的关联可用用关联类表示银 行 出 纳 员顾 客服 务
{ o r d e r e d }
助 教研 究 生 教 师协 助 任 课 教 师导 师指 导学 生
{ x o r }
考 核 记 录研 究 生教 师协 助
10,,*
助 教 任 课 教 师
62? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心例子:保险公司
保险公司有 0或多个保险合同,这些合同与 1个或多个客户有关。客户有 0或多个保险合同,这些合同都与 1个保险公司有关。
保险合同位于一家保险公司和一个或多个客户之间,用它建立保险公司和客户之间的保险关系
保险合同用 0或 1个保险单表示,也就是合同的书面表示,一个保险单表示一份保险合同
63? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心聚合
聚合用来表达事物之间的整体 --部分关系;
把作为“整体”的类称为 聚集 ( aggregate),作为“部分”的类称为 成分 。
识别聚合关系的常用方法是寻找“由 …… 构成
”、“包含”、“是 …… 的一部分”等子句兴 趣 小 组学 生 老 师
1
5,,*
辅 导 教 师兴 趣 小 组学 生老 师
1
5,,*
辅 导 教 师
64? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心聚合
组合:更强类型的聚合;要求部分的生存周期取决于整体的生存周期,部分不能脱离整体而单独存在,每个部分只能属于一个整体。
聚合另一层重要意义:
将一组对象集合看做一个统一的单元,将整体对象定义成控制对象,它为整个集合提供接口。当操作应用于整体对象时,整体对象往往需要将操作再传播给各成员对象,以便使集合像一个单独的对象那样运作。订 单条 目人文 档 段 落字 符拥 有
1
*
1
*
1
*
复 制 复 制复 制 复 制 复 制
65? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心聚合
关联、聚合和组合的联系和区别关联 对象之间互相了解,以便在一起工作聚合1,保护整体的完整性
2,如同一个单元在运作
3,操作通过一个对象控制--依次向下传播组合每一部分只能是一个整体的成员部分不能脱离整体而单独存在
66? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心例子:油画
一幅油画由许多图形组成,图形可以由直线、圆、多边形和各种线型混合而成的组合图等。
67? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心继承交 通 工 具地 铁 轿 车 公 共 汽 车车 船轮 船 快 艇试 题选 择 题 填 空 题 简 答 题 程 序 设 计 题
继承关系中包含父类和子类,用一个带空心三角形的直线表示,
空心三角形紧挨着父类。
继承可以有多个层次
68? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心继承
如果一个类中没有包含足够的信息来实例化一个具体的对象,这样的类称为 抽象类 。抽象类往往用来表征对问题领域进行分析、设计得出的抽象概念,
是对一系列看上去不同、但本质上相同的具体概念的抽象。抽象类是不能够被直接实例化。
例如,对“汽车”、“船”进行抽象形成的“交通工具”概念。
抽象类中一般都带有抽象的操作。抽象类的子类一定要实现抽象类中的抽象操作,为抽象操作提供方法(算法实现),否则该子类仍然是抽象类。
与抽象类恰好相反的类称为 具体类 。具体类有自己的对象,并且该类中的操作都有具体实现的方法。
69? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心继承交 通 工 具
{ a b s t r a c t }
d r i v e ( ) { a b s t r a c t }
汽 车
d r i v e ( )
船
d r i v e ( )
驱 动 车 轮 转 动驱 动 螺 旋 桨人驾驶 *
70? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心依赖
依赖关系描述的是两个模型元素(类、构件、用例)之间语义上的连接关系。
其中,一个模型元素是独立的,另一个模型元素是非独立的(依赖的),它依赖于独立的模型元素,如果独立的模型元素发生改变,将会影响依赖该模型元素的其他模型元素。
比如,某个类中使用另一个类的对象作为操作中的参数,则这二个类之间就具有依赖关系。
增 加 ( 学 生,x )
删 除 ( 学 生,x )
讨 论 班
… …
学 生
… …
… …
71? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心对象图
对象图可以看作类图的实例,表示在某一时刻这些类的具体实例和这些实例之间的具体连接关系。
对象图中,表示对象之间静态联系的线称作“链
”。因此链可以看作是关联的实例。
对象的图示中在对象的名字下面要加下划线。对象名有下列三种表示格式:
对象名:类名
,类名
对象名
72? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心对象图研 究 生协 助
10,,*
任 课 教 师助 教姓 名学 号教 师姓 名工 号张 强,研 究 生姓 名 = 张 强学 号 = G 1 0 3
王 晓,研 究 生姓 名 = 王 晓学 号 = G 1 2 6
李 宏,教 师姓 名 = 李 宏工 号 = 2 6 9 0
73? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心交互图
UML中的交互图是顺序图和协作图的统称,
用于详细地描述对象的动态行为,即捕获对象需要提供哪些操作、对象之间如何协作来实现用例的各个场景。
交互图仅表达用例的一个场景,而不要同时表达多个场景。
顺序图是强调消息交互时间顺序的交互图;
协作图则是强调接收和发生消息的对象的结构组织的交互图。
74? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心顺序图
顺序图是一种详细表示对象之间以及对象与参与者之间交互的图,它由一组协作的对象(或参与者)以及他们之间可发送的消息组成,强调消息之间的顺序。
顺序图是二维的,垂直方向表示时间,水平方向表示不同的对象或参与者。
顺序图中的主要元素包括:
对象或参与者
生命线
控制焦点
消息
75? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心顺序图例
76? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心对象或参与者
参与要描述的消息交互场景中的对象和参与者依次排列在水平方向上,他们的顺序并不重要,消息发起者一般放在最左侧。
对象或参与者在序列图上并不都处于一排,而是错落有致的。其规则是:
所有在通信开始前就存在的对象放置在图的顶部;
在中途被创建的对象,放置在箭头指向的位置;
顺序图中,可以明确地给出对象名,也可以使用匿名对象。
77? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心生命线
对象生命线表示对象在一段时间内的存在
,用垂直虚线表示,并位于对象符号之下。
在所有通信完成后仍然存在的对象的生命线,要延伸超出图中最后一个箭线 ;
如果对象在中途被销毁,那么用一个大的,X”标记它的析构(销毁),该标记或者放在引起析构的箭线处,或者放在从被销毁的对象最终返回的箭线处(在自析构的情况下)。
78? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心控制焦点
控制焦点表示了对象的一个操作执行的持续时间
,也表示了对象和它的调用者之间的控制关系。
控制焦点也叫激活。
在顺序执行的情况下,一个控制焦点表示一个对象的操作或者它的从属操作活动着的持续时间。
用一个窄长的矩形表示控制焦点。矩形的顶端和它的开始时刻对齐,即画在开始该动作箭线所指向之处。矩形的末端和它的结束时刻对齐,即画在返回的箭线的尾部。
对象操作递归调用自己或调用本对象的其他操作时,控制焦点表示为左图。
79? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心消息
消息是对象之间通信的描述,说明了一个通信过程,指明消息的发送对象和接收对象。
一个消息的执行会引起一个操作的调用、发送一个信号、或引起一个对象被创建或删除。接收消息的对象可能会向调用者返回一个结果。
把消息表示为从一条生命线到另一条生命线的一条带有箭头的水平实线(简称为箭线),从源对象指向目标对象。箭线上必须书写消息的名称及其参数或者参数表达式。
对于到一个对象自身的消息,箭头就从同一个对象符号开始和结束。
80? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心消息的分类
实箭头用于过程调用或其他的嵌套控制流
。在外层控制恢复之前,要完成整个嵌套序列。这样的消息称为同步消息。可以把实箭线用于普通的过程调用。
枝装箭线用于异步通信,也就是没有控制嵌套。发送者发出消息后,立即继续执行中的下一步,不进行等待。
虚的枝装箭线显示地表示从调用过程的返回。也可以省略返回箭线,这种做法假设在每个调用后都有一个配对的返回。
81? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心消息的描述
发送消息的时间可以忽略,用水平消息箭头表示
,如果发送消息是需要时间的,可把消息箭头向下倾斜,使箭线头部在尾部下方,表示消息需要一段时间到达。
若需要对消息进行迭代建模,就在消息的顺序号后加一个,*”号,其后可以加条件表达式,表示按照给定的表达式重复该消息。
若需要对一组消息进行重复,可把这组消息用一个矩形围起来,并在附近写出重复条件。
若需要对含有分支的控制流建模,可把分支画成从一个点出发的多个箭线,每个箭线由监护条件标识。
82? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心打电话的顺序图
83? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心建立顺序图时应遵循的策略
( 1)根据用例描述,设置交互的语境,包括可能需要的对象和参与者。
( 2)在顺序图的上部列出所选定的一组对象或参与者,并为它们设置生命线。通常把发起交互的对象放在左边。
( 3)在交互期间被创建和撤销的对象,在适当的时刻,用消息箭线在它们的生命线上显式地予以指明。
( 4)决定消息将怎样或以什么样的顺序在对象之间传递。通过参与者或者首先发出消息的对象,
看它需要哪些对象为它提供操作,它向哪些对象提供操作。追踪相关的对象,进一步做这种模拟
,直到分析完与当前语境有关的全部对象。
84? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心建立顺序图时应遵循的策略
( 5)在各对象下方的生命线上,按使用该对象操作的先后次序排列各个代表操作执行的控制焦点
。
( 6)两个对象的操作执行如果属于同一个控制线程,则接收者操作的执行应在发送者发出消息后开始,并在发送者结束之前结束。不同控制线程之间的消息有可能在接收者的某个操作的执行过程中到达。
( 7)对对象所执行的操作的功能以及时间或空间约束进行描述。
( 8)如果需要可视化消息的迭代或分支,就使用迭代或分支的表示法。
85? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心协作图
协作图是一种强调发送和接收消息的对象结构组织的交互图,显示围绕对象以及它们之间的链而组织的交互。
协作图由对象、链以及链上的消息构成,
其中也可以有参与者。参与者和对象之间
、对象和对象之间的实线称为链,链上带箭头的实线是对象之间的消息。
86? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心协作图例
:Cla ssA,Cla ssB
:Cla ssC,Cla ssD
:Cla ssE
,Emp l oye e
1 a 和1 b 是互斥的条件迭代是有一个" * " 和一个可选的跟在消息序号后面的迭代子句表示
1a,[te s t1],msg 1 ()
1b,[no t te s t1],msg 3 ()
2*[ i:= 1,.N ],ms g 5()
1a,1 m s g2( )
1b,1:m s g4( )
msg 1()
参与者类链消息序号条件
87? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心协作图与顺序图的区别
顺序图和协作图可以相互转换,而不丢失语义信息。
两种图从不同的角度描述了系统中不同对象间的交互过程。
顺序图对象间没有链,对象间 有消息存在隐含了其间有链存在 ;
顺序图不显式地显示消息的顺序号,消息的顺序隐藏在从图的顶部到底部所有消息的物理顺序中;
顺序图能够描述消息的返回
88? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心等价的顺序图
89? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心订单协作图实例
:Order Entry Window
:Delivery Item
:Order Line
:Order
:Reorder Item
:Stock Item
prepare()
1*[for all order lines]:prepare()
1.1:hasStock:=check()
1.2:[hasStock]:remove()
1.2.1:needsReorder:=needToReorder()
1.2.2[needsReorder]:new1.3:[hasStock]:new
90? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心状态图
现实中的事物往往具有以下特征:
大多数事物在其生命周期中经历了不同的状态;
对象在一段有限的时间内,位于某个状态中;
存在引起事物状态变化的事件;
事物在其状态间按次序转化;
事物从一个阶段到另一个阶段的递进是即时的,
即状态的改变不需要时间;
当事件发生时,事物可能需要采取一些动作。
91? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
UML状态图表示事 件 型 构 [ 监 护 条 件 ] / 动 作 表 达 式源 状 态内 部 转 换 分 栏目 标 状 态内 部 转 换 分 栏
92? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心事件
事件指的是发生的且引起某些动作( action)执行的事情
,这些事情的发生可能会引起状态的转换。
事件可以分为以下几种:
( 1)信号事件。一个对象对另一个对象信号的接收,导致一个信号事件。把这样的事件的型构( signature)放在由它所触发的操作上。
( 2)调用事件。对操作调用的接收,导致一个调用事件
。这样的操作由接收事件的对象实现。
( 3)时间事件。在指定时间(经常是当前状态的入口)
后,经过了一定的时间或到了指定日期 /时间,导致一个时间事件。
( 4)改变事件(条件变为真事件)。用布尔表达式描述的指派条件变为真,就导致一个改变事件。无论表达式的值何时由假变成真,事件都发生。可以把其看作是连续测试条件,直到它为真。
93? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心事件的表示
事件的定义格式如下:
事件名(用逗号分隔的参数列表)
参数的格式如下:
参数名:类型表达式
通常事件后面还跟有一个监护条件( guard condition),它是一个布尔表达式。当事件发生后,还要监测其监护条件,如果监护条件为假,则该事件不触发状态转换,并且事件丢失。
时间事件改变事件
94? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心事件动作
动作是在状态内或在状态转化时所做的操作,一个动作可能是:
执行对象的一个操作,如设置或修改本对象的一个属性;
调用另一个对象的一个公共操作;
产生发送给分析范围之外的事件(例如,操作员、硬件设备或在另一个系统 /子系统中的对象);
向一个对象发送信号;
创建或撤消另一个对象;
95? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心动作表达式
动作表达式指在事件后面放置一条斜线,后面描述希望执行的动作,例,when(温度 >120度 )/测试设备 ( )表示当 when(温度 >120度 )事件发生后,要执行的动作表达式是测试设备()。
如果动作表达式包含的动作不止一个,只要将它们之间用逗号分割开就可以了。例如,假设当
when(温度 >120度 )事件发生后,要执行的动作表达式是测试设备并且发送通知,则其表达式如下
:
when(温度 >120度 )/ 测试设备(),发送通知()
96? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心状态
状态是对象生命期的一个阶段,在该阶段中该对象要满足一些特定的条件,并可从事特定的活动。
状态图中有一个初始状态和多个终止状态;
状态名称分栏放置状态名,在同一张状态图里不允许相同名称的状态。没有名称的状态是匿名的,同一张图中的各匿名状态被认为是互不相同的。
内部转换分栏给出对象在这个状态中所执行的动作
、活动和内部转换 。
状 态 名 称内 部 转 换 分 栏
97? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心状态内的要素入口动作表示在进入状态时,执行相应的动作表达式规定的动作。
出口动作表示在退出状态时,执行相应的动作表达式规定的动作。
活动是在一个状态内执行的处理过程,是一个动作或动作的集合。
对象收到事件后,不会引起对象状态的变化,
却会触发对象的响应,这种情形被称为内部转换。
延迟事件是指在当前状态下暂不处理、但将推迟到该对象的另一个状态下排队处理的事件。
98? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心状态转换
转换是两个状态之间的一种关系,表示当一个特定事件出现
,且如果满足一定的条件(如果有的话),对象就从第一个状态(源状态)进入第二个状态(目标状态),并执行一定的动作。
把转换表示成从源状态出发并在目标状态上终止的带箭头的实线,并把事件型构、监护条件和动作表达式放在其上。
以下是两个转换示例:
( 1) right-mouse-down(location)[location in window]/object:=
pick-object(location);
当鼠标落在窗口中,且按下了右键,就引发了一个转换。在转换中,把所选中的对象赋给了变量 object。
( 2) object.highlight;
调用 object的 highlight操作,引发了一个状态转换。该转换无监护条件,转换也不执行任何动作。
99? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心状态图实例
100? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心组合状态图
一个状态可以进一步细分为很多子状态,
组合状态是由两个或多个子状态构成的状态,而且子状态还可以是组合状态。
子状态之间可以拥有,and”和,or”两种关系。对象处于组合状态 s1 and s2,当且仅当对象既处于子状态 1,又处于子状态 2;对象处于组合状态 s1 or s2,当且仅当对象处于子状态 1或子状态 2。
a u t h
a u t h o r i z i n g a u t h o r i z e d
[ p e r m i t t e d ]
c h e c k i n g d i s p a t c h i n g
w a i t i n g
p r o c e s s
a c t i v e
r e j e c t e d
[ ! p e r m i t t e d ]
c a n c e l l e d
c a n c e l
d e l i v e r e d
101? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心活动图
UML活动图( activity diagram)类似传统的流程图,显示出活动、判定点和分支,可用来对类中的方法、用例或企业业务过程建模。
UML活动图的符号:
起始点:实心圆圈代表;
终点:带有外边界的实心圆代表;
执行的活动:圆角矩形框代表,如起床、锁门;
活动转移:箭头代表,用于对活动发生的顺序建模。
判定:菱形代表,或直接从一个活动中引出可能的路径。表示对条件进行判断,根据判定结果再决定执行哪条路径。
并发活动:用与路径垂直的横线表示;
102? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心活动图实例起 床打 包 早 餐
[ 饿 ] [ 不 饿 ]
吃 早 餐锁 门起 床吃 早 餐 打 包 早 餐
[ 饿 ] [ 不 饿 ]
锁 门打 开 收 音 机听 音 乐 准 备 晚 饭并发活动
103? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心带泳道的活动图
为了表达活动图中的活动分别由哪些对象来负责,可以将活动图分割成多个平行的段,这些段被称为泳道( swim
lane)。
每个泳道的顶部可以显示角色名,该角色负责的活动放在各个角色的泳道中。
一个泳道到另一个泳道之间可以发生转移。
男 主 人女 主 人制 定 请 客 计 划邀 请 朋 友打 扫 房 间购 买 物 品烹 饪招 待 朋 友欢 送 朋 友整 理 房 间
104? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心构件图
构件是定义了良好接口的物理实现单元,
是系统中可替换的部分。
在 UML中,用构件表示将类和接口等逻辑元素打包而形成的物理模块。
U t i l i t y,,d i a l o g,d l l
包名 构件名构件
105? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心构件和类
相同点:
都有名称
都能实现一组接口
都可以参与依赖、关联、继承和聚合关系
都可以有实例
都可以参与交互
不同点:
类表示逻辑抽象,而构件表示存在于比特空间中的物理抽象。
构件表示的是物理模块,而不是逻辑模块,与类处于不同的抽象级别。
类可以拥有属性和操作,而构件通常仅拥有通过其接口向外提供或请求的操作。
106? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心构件与类依赖关系
构件 dialog.dll实现了类 a、类 b以及这两个类之间的关联,则构件 dialog.dll和类 a、类 b之间就存在依赖关系。这种依赖关系既如下图所示,d i a l o g,d l l
a b
1 *
d i a l o g,d l l
a b
1
*
107? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心构件与接口
接口是描述类或构件所提供操作的集合。
构件有两类接口:
提供型接口:定义了构件对外提供的服务
需求型接口:定义了构件需要向其他构件请求的服务。
一个构件可以实现多个接口,也可以使用多个接口。良好定义的构件不直接依赖于其他构件,而是依赖于构件所支持的接口
。
108? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心构件与接口
构件 component.java对外提供接口
ImageObserver中的服务,则 component.java
必须实现接口 ImageObserver。
c o m p o n e n t,j a v a
I m a g e,j a v a
I m a g e O b s e r v e r
c o m p o n e n t,j a v a
I m a g e,j a v a
,i n t e r f a c e,
I m a g e O b s e r v e r
i m a g e U p d a t e ( ),B o o l e a n
109? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心构件的分类
( 1)源代码构件。源代码构件只在编译时是有意义的,例如实现一个或多个类的源代码文件。
( 2)二进制构件。二进制构件是对象代码,是源代码构件的编译结果。它是一个对象代码文件,一个静态库文件或一个动态库文件。二进制构件只在链接时有意义,如果二进制组件是动态库文件,则在运行时有意义。
( 3)可执行构件。是可执行的程序文件,是链接 (
静态链接或动态链接 )所有二进制构件所得到的结果
。一个可执行构件代表处理器 (计算机 )上运行的可执行单元。
110? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心构件图示例
构件图用于展示一组构件以及它们之间的关系。
o r d e r,h
{ v e r = 2,0 }
o r d e r,c p p
{ v e r = 2,2 }
c u s t o m e r,h
{ v e r = 3,1 }
A n i m a t o r,e x e
R e n d e r,d l l
D i a l o g,d l l
二进制、可执行构件之间的关系源代码构件及它们的关系
111? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心部署图
部署图对系统的硬件拓扑结构建模,通常也用于展示在节点上活动的构件的配置。
部署图通常包含节点、节点之间的关系、
构件以及构件和节点之间的依赖关系。
一般针对每个具体应用,都应该绘制部署图。特别是在对嵌入式系统或分布式系统建模时,多使用部署图。
112? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心部署图中的节点
节点是在运行时存在并代表一项计算资源的物理元素,一般至少拥有一些内存,通常具有处理能力,通常表示一个可以在其上部署构件的处理器或设备。
利用节点可以为系统的拓扑结构建模。
节 点 名 称
113? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心节点中的构件
一个节点上可以有一个或多个构件,一个构件也可以部署在一个或多个节点上。
s a l e s
p o s,e x e
o r d e r,e x e
s a l e s
p o s,e x e
o r d e r,e x e
114? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心节点间的关系
节点之间最常见的关系是关联关系,用来表示节点之间的物理连接。 k i o s k
c o n s o l e
s e v e r
,1 0 - T E t h e r n e t,
,R S - 2 3 2,
节点连接使用了以太网连接协议和串口连接协议。
115? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心部署图实例
116? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心包图
包是对模型元素分组的机制。
使用包的最常见目的是把模型元素组织成为组,作为一个集合进行命名和处理。
包可以拥有类、接口、构件、节点、用例和图,也可以拥有其它包。
拥有是一种组成关系,这意味着被拥有的元素被声明在包中。
如果包被撤消了,元素也要被撤消。一个元素只能被一个包所拥有。
设计良好的包,会把在语义上接近并倾向于一起变化的元素组织在一起,是松耦合、高内聚的,
而且对其内容的访问具有严密的控制。
117? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心包的层次组织
包图示为类似书签卡片的形状,由二个长方形组成,小长方形标签位于大长方形的左上角。
包中还可以有包,这样包之间可以有一个层次,且在组织上是一棵严格的树。
118? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心包中元素的命名
一个包形成了一个命名空间
同一个包中,同一种元素的名字必须是唯一的;
不同包中,元素可以重名;
同一个包中,不同元素可以重名,但最好不要重名;
包中还可以包含其他的包,引用包中类的方法为:
P1包拥有名为 Queue的类,可以用 P1::Queue这种方式引用;
包 Vision中有一个名为 Camera的类,而包 Vision又在包Sensor中。类 Camera的全名为 Sensor::Vision::Camera。
119? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心包之间的关系
包之间不但可以具有拥有关系,也可以具有引入( import)依赖、访问( access)依赖和泛化关系。
引入依赖:是两个包之间的一种许可依赖关系,一个包中的可见性为公有的模型元素,可以在指定的包(包括嵌套在该包中的子包)中被引用,相当于把一个包的内容拷贝到另一个包中,引入的模型元素属于引入到的包,而它的原始版本仍然存在原始的包内。在访问引入的模型元素时不需要在其前面加路径名。
120? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心引入依赖示意图包中元素的可见性以及包之间的引入依赖
121? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心访问依赖
访问依赖是两个包之间的一种许可依赖关系,它允许客户包使用提供者包中的可见性为公有的元素,当客户包引用这些元素时,需要使用元素的全路径名。
把访问依赖绘制成带有箭头的虚线,其上标有,access,。
H u m a n
R e s o u r c e s
,a c c e s s,
P r o d u c t O r d e r s
122? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心包中元素的可见性
利用可见性控制外部包对包中内容的存取方式。
UML 中对包定义了三种可见性:
公共的( +):对引入( import)或访问(
access)它所位于包的包以及这些包的子包中的元素是可见的
私有的( -):只对它所位于的包中的元素是可见的
受保护的( #),只对它所位于的包以及该包的子包中的元素是可见的
123? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心包中元素的可见性
引入和访问依赖不是传递的。
如果一个包 A与和它处在同等嵌套层次上的包 B之间无引入或访问依赖,则包 A中的元素不可以引用或访问包 B中的元素。如图 8- 69中子系统 C和 E之间无引入或访问依赖,因此子系统 C中的元素不能访问子系统 E中的元素,反之亦然。
如果一个包 A与它包含的包 B无引入或者访问依赖,则包 A中的元素不可以引入或访问包 B中的元素
,但包 B可以引入或访问包 A中的可见性为公共的元素。
如果包 A中的元素对包 B是可见的,那么这个元素对嵌套于包 B内的所有包也都是可见的,也就是说
,被包含的里层的包能够看到外层的包所能见到的所有元素。
124? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心如何划分包
划分良好的包具有高内聚、低耦合、访问控制等特点,包划分没有严格的标准,具有一定的随意性。
( 1)识别低层包。把语义上接近并倾向于一起变化的元素组织在一个包中。例如,把具有继承关系的一组类放在一个包中,把关联紧密的一组类放在一个包中,把具有包含、扩展或者继承关系的用例放在一个包中。把独立的模型元素暂时放在一个包中。
( 2)合并包
如果低层包数量过多,则合并为高层包。若低层包之间在概念上接近或具有较强的相关性,从作用上属于某项大的功能,在图中有较强的耦合性,或在分布上处于同一台处理机,则考虑把它们合并。每个包最好有 7± 2个内层成分。
125? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心如何划分包
( 3)组织包的层次。包的层次不宜太多,
否则会影响理解。
( 4)标识包中模型元素的可见性。对每一个包,区别哪些元素可以被包外的其他元素访问,把它们标记为公共的。把所有其它的元素标记为受保护的或私有的。
( 5)建立包间的关系。根据需要,用引入依赖、访问依赖或泛化关系显式地连接包
。
126? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.4.5 基于 UML的面向对象软件开发过程
使用 UP作为指导基于 UML面向对象开发过程,在业务建模、需求、设计、实现和测试这几个流程中使用 UML进行建模的方法如下:
(1)业务建模。采用 UML的对象图和类图表示目标软件系统所基于的应用领域中的概念和概念间的关系。如果领域中含有明显的流程处理部分,可以考虑利用 UML的活动图来刻画领域中的工作流 。
127? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.4.5 基于 UML的面向对象软件开发过程
(2)需求。 UML 的用例视图以用户为中心,对系统的功能性需求进行建模。
用文本形式或 UML活动图描述用例 ;
利用 UML用例图表示参与者与用例之间、用例和用例之间的关系。
采用 UML顺序图图形化描述参与者和系统之间的系统事件。
利用系统操作契约刻画系统事件的发生引起系统内部状态的变化。
如果目标系统比较庞大,用例较多,则可以用包来组织和管理这些用例,将关系密切的用例组织到同一个包里,用 UML包图刻画这些包及其关系。
128? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.4.5 基于 UML的面向对象软件开发过程
(3)设计。包括软件体系结构设计和用例实现的设计。
采用 UML包图设计软件体系结构,刻画系统的分层、分块思路。
采用 UML协作图或顺序图寻找参与用例实现的类及其职责(属性和操作)。
用 UML类图描述这些类及其关系,这些类属于体系结构的不同的包中。
用 UML状态图描述那些具有复杂生命周期行为的类。
用 UML活动图描述复杂的算法过程和有多个对象参与的业务处理过程。
此外,还可以使用 UML构件图描述软件代码的静态组织与管理,UML部署图描述硬件的拓扑结构以及软件和硬件的映射问题。
129? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.4.5 基于 UML的面向对象软件开发过程
( 4)实现。把设计得到的类转换成某种面向对象程序设计语言的代码。
( 5) 测试。对系统的测试通常分为单元测试、集成测试、系统测试和接受测试几个不同级别。
软件工程模型与方法
Models & Methods of Software Engineering
第八章 面向对象基础肖丁 dxiao@bupt.edu.cn
2? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心本章内容
8.1 面向对象基本思想
8.2 面向对象的主要概念和基本原则
8.3 几种经典的面向对象的分析和设计方法
8.4 统一建模语言 UML简介
3? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.1 面向对象基本思想
面向对象方向 20世纪 60年代末提出,90年代得到了广泛的应用,其思路是从现实世界中的 客观对象 (如人或事物)出发,尽量 运用人类的自然思维方式(如抽象和分类) 来构造软件系统。
结构化开发方法将系统划分为功能和数据两个部分,数据和功能分别设计和实现。
面向对象从现实出发,将系统抽象为一组交互的对象,每个对象既包含功能,也拥有数据。
4? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.1 面向对象基本思想
以图书管理信息系统为例来比较结构化开发方法和面向对象方法的思路。
结构化方法:
图书基本信息读者基本信息图书借阅信息图书预约信息等数据库管理图书基本信息办理借阅办理还书查询图书基本信息查询自己的借阅信息等函数和过程
5? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.1 面向对象基本思想
面向对象的方法:
从图书借阅的应用中抽象出三类对象:
数据:
姓名、学号、班级
、入学年份、宿舍
、电话等功能:
借书、还书、预约
、查询图书信息、
查询借阅信息、交罚款等学生数据:
书名,ISBN号、出版社、出版日期、
作者等功能:
告知图书状态、查询借阅时间、查询借阅该书读者信息等图书数据:
姓名、工作按证号
、所在、入职年份
、职称、电话等功能:
借书、还书、预约
、查询图书信息、
查询借阅信息、交罚款等教师
6? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.1 面向对象基本思想
可见,面向对象不仅是一些具体的软件开发技术与策略,而且是一整套关于如何看待软件系统与现实世界的关系、用什么观点来研究问题并进行问题求解、以及如何进行系统构造的软件方法学。
从这个意义上讲,面向对象方法是一种运用对象、类、继承、封装、聚合、关联、
消息、多态性等概念来构造系统的软件开发方法。面向对象基本思想可以概括为:
7? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.1 面向对象基本思想
对象,从现实世界中客观存在的事物出发来构建软件系统:
强调直接以问题域(现实世界)中的事物为中心来思考和分析
把它们抽象地表示为软件系统中的对象,作为软件系统的基本构成单位。
这样就可以使软件系统直接映射到问题域,保持问题域中事物及其相互关系的本来面貌。
8? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.1 面向对象基本思想
属性和服务,用对象的属性表示事物的静态特征;用对象的服务表示事物的动态特征。
关联,通过关联表达类之间的静态关系。
消息,对象之间通过消息进行通信,实现对象之间的动态联系。
封装,类和对象的属性与服务结合为一体,对外屏蔽其内部细节,只有公共的服务对外是可见的。
分类,对事物进行分类。
聚合,复杂的对象可以用简单的对象作为其构成部分。
继承,通过在不同程度上运用抽象的原则,可以得到较一般的类和较特殊的类。特殊类继承一般类的属性与服务,
从而简化系统的构造过程及文档。
9? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.2 OO的主要概念和基本原则
8.2.1 主要概念
8.2.2 基本原则
10? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.2.1 主要概念
对象
类
关联和链
继承 /泛化
聚合
11? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心对象
理解对象的两个角度:
现实世界:客观存在的任何事物都可以被看作是对象
有形的对象,如一个人或一件物品;
无形的对象,如一项计划或者一个事件。
对象是一个独立单位,它具有自己的静态特征和动态特征。
软件系统:对象是用来描述现实世界客观事物的一个实体,是构成系统的一个基本单位。
对象由一组属性和对这组属性进行操纵的一组操作组成。
属性用来描述对象静态特征,
操作用来描述对象动态特征。
12? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心类
类是具有相同属性、操作、关系和语义的对象集合的描述。
类为属于该类的全部对象提供了统一的抽象描述
,由类名、属性和服务三个主要部分组成。
对象是类的实例。
类 名属 性操 作
+ 借 阅 图 书 ( )
+ 归 还 图 书 ( )
+ 预 约 图 书 ( )
+ 查 询 图 书 ( )
- 学 号
- 姓 名学 生学 号 = G 1 0 0 5
姓 名 = 王 林学 生 2,学 生学 号 = G 1 0 0 9
姓 名 = 陈 浩学 生 3,学 生学 号 = G 1 0 3 0
姓 名 = 孙 周学 生 1 0 0 0,学 生学 号 = G 1 0 0 1
姓 名 = 张 红学 生 1,学 生
13? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心关联和链
关联用来描述类之间的静态联系,可以包含关联的名称、关联的方向和多重性等属性。
链是关联的实例,用于描述具体对象之间的某种联系。
对象之间的链可以通过对象的属性表达出来。
例如,用类“学生”的对象的属性来记录该对象具体借阅的“图书”对象。
图 书学 生借 阅关联名称:借阅关联方向:单向多重性,7(表示最多借阅 7本)
14? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心继承 /泛化
继承也称泛化,是 OO描述类之间相似性的一种重要机制。
当需要定义的一个新类与已经存在的类存在一定程度的相似度的时候,可以通过继承已经存在的类的方法来创建新类,从而减少定义新类的工作量。
在类的继承层次结构中,位于较高层次的类叫做一般类 /超类 /父类,而位于较低层次的类叫做 特殊类 /子类 。
继承使得特殊类自动地拥有或隐含地复制一般类的全部属性、操作和关联。
15? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心继承 /泛化
只有当两个类之间是
,is a”,
,is like”
,is a kind of,关系时,才可使用继承。
继承可分为单继承和多继承。
如果一个子类继承了超过一个以上的父类的属性和操作,那么这种继承就是多继承 ;
否则就是单继承。
继承是可传递的,可以跨越任意层次
。
子类继承其所有祖先类的属性、操作和关联。
- 姓 名
-,,,,,,
人 员
- 学 号
- 班 级
-,,,,,,
研 究 生
- 职 称
- 工 龄
-,,,,,,
教 职 工
- 在 职 单 位
-,,,,,,
在 职 研 究 生
16? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心聚合
聚合刻画了现实世界事物的构成关系,是一种具有 整体 --部分 语义的关联,也就是说,
聚合是关联的一种,只是普通关联的语义没有聚合那么强 。
其语义可表达为:
,有一个”
,是一部分”
17? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.2.2基本原则
分类
封装和信息隐藏
消息通信
多态性
18? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心分类
分类是按照某种原则划分事物的类别,利用它有助于对复杂世界的认识。
在面向对象的方法中,分类就是把具有相同属性和操作的对象划分为一类,用类作为这些对象的抽象描述。
运用分类原则,可以清楚地表示对象和类之间的关系以及特殊类和一般类之间的关系 。
19? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心封装和信息隐藏
封装是指将属于对象的各种信息 (属性) 和对象的行为 (操作) 组织起来,形成一个实体 → 对象。
接口:定义外部实体能对对象进行的操作方式;
信息隐藏有两方面含义:
对象属性只有通过对象对外发布的接口访问;
外部对象只关心接口的访问方法,不关心接口的内部实现;
20? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心消息通信
消息是对象间实现通信的手段。
操作是对象与外界的接口,当系统中的其他对象或其他系统成分请求这个对象执行某个操作时,
该对象就响应这个请求,执行该操作的实现。
在面向对象系统中,把向对象发出的操作请求称为消息。
一条消息应包括:消息名、入口参数和返回参数。对象接收到消息后先分析消息的合法性,然后为请求者提供服务。
一个对象可以是消息的发送者,也可以是消息的接收者,还可以作为消息中的参数。
21? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心多态性
多态性 (polymorphism)是一种方法,指在不同的类中可以定义相同的操作,而这些操作在这些类中可以有不同的实现。
简单说,当将子类对象的引用传给声明为父类的一个对象变量,如果子类有这个方法就调用子类的方法,如果子类没有这个方法就调用父类的这个方法。
多态性也是一种特性,这种特性 使得一个属性或变量在不同时期可以表示不同类型的对象 。从而增加了代码的灵活性和扩展性。
22? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心多态性
设有一个类,称为乐器,表示为 Instrument,在该类中定义了一个操作 play();
类管乐器 Wind、打击乐器 Percussion、弦乐器
Stringed和铜管乐器 Brass继承类 Instrument而成为该类的子类,不同的子类对 play操作都有不同的实现。
现在,需要写一段代码,分别创建上述 4个子类的对象,并让这些对象执行 play操作。
如果要填加以个木管乐器 Woodwind,怎么修改原有的代码?
23? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心多态性
public class Music {
// 不用关心数组元素具体是绑定到哪种对象
static void tuneAll(Instrument[] e) {
for(int i = 0; i < e.length(); i++)
e[i].play();
}
public static void main(String[] args) {
Instrument[] orchestra = new Instrument[4];
int i = 0;
// 将子类对象的引用赋值给引用父类对象的变量
orchestra[i++] = new Wind();
orchestra[i++] = new Percussion();
orchestra[i++] = new Stringed();
orchestra[i++] = new Brass();
tuneAll(orchestra);
}
} //
24? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.3 面向对象的分析和设计方法
8.3.1 OOA/OOD
8.3.2 Booch方法
8.3.3 对象建模技术( OMT)
8.3.4 面向对象软件工程方法( OOSE )
25? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.3.1 OOA/OOD
OOA/OOD 方法是由 Peter Coad和 Ed Yourdon在 1991年提出的。这是一种逐步进阶的面向对象建模方法,其特点是概念清晰,简单易学。
OOA使用了基本的 结构化原则并结合了面向对象的概念,
包括确定类与对象、标识结构、定义主题、定义属性、定义服务
OOA的结果是结构化的文档,自顶向下包括五个层次:
主题层 (只有主题 )
类与对象层 (上层中加入类与对象 )
结构层 (上层中加入结构 )
属性层 (上层中加入属性 )
服务层 (上层中加入服务 )
26? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
OOA
确定类与对象主要是描述如何找到类和对象。
从应用系统需求出发,以整个应用为基础标识类与对象,然后按这些类与对象分析系统的职责。
获取充足的环境和对象行为信息;
标识结构按照两种不同的原则进行:
第一种是按照一般化/特殊化结构,确定已标识出的类之间的继承层次关系。
第二种是按照整体/部分关系,来确定一个对象怎样由其它对象组成,以及对象怎样组合成更大的复杂对象。
27? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
OOA
标识主题是通过把类与对象划分成更大的单元来完成的。
主题是一组类与对象。
主题的大小应合适地选择,使得人们可以从模型很好地理解系统。
标识属性是通过标识与类有关的信息和关联来完成的。
标识好的属性应放在合适的继承层次上。关联也要通过检查问题域上的关系标识出来。
定义服务就是定义类上的操作。
主要是通过定义对象状态,以及定义诸如创建、访问
、连接、计算、监控等服务来完成。
28? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
OOD
设计问题域部分
问题域部分实际上是 OOA工作的进一步延伸,
在 OOA工作基础上进行。
设计人机交互部分
突出人如何使用系统,以及系统如何向用户提交信息。
29? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
OOD
设计任务管理部分
识别事件驱动任务;
识别时钟驱动任务;
识别优先任务和关键任务;
识别协调者;
定义每一个任务。
设计数据管理部分
数据存放方法的设计,需要确定采用关系型数据库还是面向对象数据库;
相应服务的设计,设计哪些类来实现数据的持久化服务。
30? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.3.2 Booch方法
Booch方法是 Grady Booch从 1983年开始研究,
1991年后走向成熟的一种方法。
Booch方法强调多次重复和开发者的创造性,包含一组启发性的过程式建议:
在一定抽象层次上标识类与对象;
标识类与对象的语义;
标识类与对象之间的关系;
实现类与对象;
31? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.3.2 Booch方法
Booch方法使用四个主图和两个辅图来描述系统各方面的联系:
四个主图:
类图描述类之间的关系;
对象图描述具体的对象和在对象之间传递的消息;
模块图用来描述这些程序构件;
进程图描述过程(进程)如何被分配给特定的处理器。
两个辅图:
状态转换图:用于描述某个类的状态空间和状态变化;
时序图:描述不同对象间的动态交互。
Booch方法的缺点在于不能有效地找出每个对象和类的操作。
32? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.3.3 OMT
OMT最早是由 Loomis,Shan和 Rumbaugh在 1987年提出,J,Rumbaugh在 1991年正式把 OMT应用于面向对象的分析和设计。
这个方法是在实体关系模型上扩展了类、继承和行为而得到的。
OMT包括了一组定义得很好的并且相互关联的概念,它们是
类 (class)、对象 (object)、泛化( generalization)、继承
(inheritance)、链 (1ink)、链属性 (link attribute)、聚合(
aggregation)、操作 (operation)、事件 (event)、场景
(scenario)、属性 (attribute),子系统 (subsystem)、模块
(module)等。
33? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.3.3 OMT
OMT包含四个步骤:
分析
系统设计
对象设计
实现
OMT的三种模型:
对象模型,用类和关系来刻画系统的静态结构。
动态模型,用事件和对象状态来刻画系统的动态特性
。
功能模型,按照对象的操作来描述如何从输入给出输出结果。
34? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.3.3 OMT
OMT的四个步骤,
分析:其目的是建立可理解的现实世界模型。
分析模型由上述三种模型组成。
初始的需求用问题陈述来表达。
系统设计:用于确定高层次的开发策略。
系统被划分成子系统,并分配到处理器和任务。
对象设计:其目标是确定对象的细节,包括定义对象的操作和算法。
实现:在良好的面向对象编程风格和编码原则指导下进行的。
35? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.3.4 OOSE
面向对象软件工程( OOSE)是由 Ivar Jacobson提出的,他将面向对象的思想贯穿到软件工程中,
目的是为了得到一个能适应变化的、健壮的、可维护的系统。
OOSE的过程由五个模型构成:
需求模型
分析模型
设计模型
实现模型
测试模型
36? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.3.4 OOSE
需求模型:从用户的观点出发完整地刻画了系统的功能需求
,主要建模手段有
用例( Use Case)
问题域对象模型
人与系统的交互界面
分析模型:主要目的是要建立健壮的、可扩展的系统的基本结构。 OOSE定义了三种对象类型:
实体对象刻画系统要长期管理的信息和信息上的行为。
界面对象刻画系统界面,使用户和系统能进行双向通信。
控制对象本身不完成任何功能,只是向其他对象委托职责,负责协调其他对象的工作。
通过将 RM中的对象分别识别到 AM中的不同对象类型并分析对象间的关系实现分析模型。
37? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.3.4 OOSE
设计模型:最终表现为由类 (对象) 模块,并且这些类 (对象) 有了详细定义。
实现模型:就是用某种程序设计语言来实现设计模型。
测试模型:关于类 (对象) 的底层测试。
38? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.4 UML简介
8.4.1 UML的出现和发展
8.4.2 UML概述
8.4.3 UML中的扩展机制
8.4.4 UML中的图
8.4.5 基于 UML的面向对象软件开发过程
39? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.4.1 UML的出现和发展
统一建模语言 UML是由 Grady Booch,Ivar
Jacobson和 James Rumbaugh发起,在 Booch方法、
OOSE方法和 OMT方法基础上,广泛征求意见,
集众家之长,几经修改而成的一个面向对象分析与设计建模语言。
该建模语言得到了,UML 伙伴联盟”的应用与反馈,并得到工业界的广泛支持,由 OMG 组织采纳作为业界标准,是软件界第一个统一的建模语言
。
40? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.4.1 UML的出现和发展
UML发展的四个阶段:
各自为政:上世纪 80年代到 1993年期间,面向对象方法出现了百家争鸣的局面,但是不同方法的模型相互转换几乎不可能;
统一阶段,1994年 10月开始,Rational 公司的 Booch、
Rumbaugh和 Jacobson 在 Booch,OMT和 OOSE方法的基础上进行研究,于 1996年发布了统一建模语言 UML( Unified
Modeling Language) ;
标准化阶段,OMG为了使 UML标准更加完善,发布了征求建议书( RFP),随后,Rational软件有限公司建立了 UML
Partners联盟,各软件开发商和系统集成商共同努力,1997
年制定出 UML1.1标准,被 OMG采纳 ;
工业界应用,1998年 OMG接管了 UML标准的维护工作,
UML已成为软件工业界事实上的标准。
41? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.4.2 UML概述
UML 是一种标准的图形化建模语言,它是面向对象分析与设计的一种标准表示,它
不是一种可视化的程序设计语言,而是一种可视化的建模语言;
不是工具或知识库的规格说明,而是一种建模语言规格说明,是一种表示的标准;
不是过程,也不是方法,但允许任何一种过程和方法使用它。
42? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
UML的特点和目标
为建模者提供现成的、易用的、表达能力强的可视化建模语言,以开发和交换有意义的模型;
提供可扩展性和特殊化机制以延伸核心概念;
与具体的实现无关,可应用于任何语言平台和工具平台;
与具体的过程无关,可应用于任何软件开发的过程;
支持更高级的开发概念,例如构件、协作、框架和模式,
强调在软件开发中对架构、框架、模式和构件的重用(
UML 1.4规范);
与最好的软件工程实践经验集成;
可升级,具有广阔的适用性和可用性;
推动对象工具市场的成长。
43? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
UML的基本结构
基本构造块 Basic building block
事物 Thing
关系 Relationship
图 Diagram
语义规则 Rule
name,scope,visibility,integrity,execution
通用机制 Common mechanism
specification,adornment,common division、
extensibility mechanism
44? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
UML的基本结构
事物 Thing 及关系 Relationship
Structural thing
Class,interface,collaboration,use case,component,
node
Behavior thing
Interaction,state machine
Group thing
package
Annotation thing
note
依赖 Dependency
关联 Association
泛化 Generalization
实现 Realization
45? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
UML的组成
UML 用模型来描述系统的结构 (静态特征) 以及行为 (动态特征) 。从不同的视角为系统的架构建模,
形成系统的不同视图 ( view),称为 4+1试图逻辑视图
Logic view
实现视图
Component view
进程视图
Process view
部署视图
Deployment view
用例视图
Use case view
46? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
UML的组成
用例视图:强调从用户的角度看到的或需要的系统功能,这种视图也叫做用户模型视图( user model view) 或场景视图( scenario view);
逻辑视图,展现系统的静态或结构组成及特征,也称为结构模型视图
( structural model view) 或静态视图( static view);
并发视图:描述设计的并发和同步等特性,关注系统非功能性需求,也称为行为模型视图( behavioral model view)、过程视图( process view
),协作视图( collaborative view)和动态视图( dynamic view);
构件视图:关注软件代码的静态组织与管理,也称为实现模型视图(
implementation model view )和开发视图( development view);
部署视图:描述硬件的拓扑结构以及软件和硬件的映射问题,关注系统非功能性需求(性能、可靠性等),也称为环境模型视图或物理视图(
physical view);
47? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
UML的组成
每种 UML视图都是由一个或多个图组成的,一个图就是系统架构在某个侧面的表示,所有图一起组成了系统的完整视图。 UML1.4中规定的 9种图包括:
用例图( Use case diagram):描述系统的功能;
类图( Class diagram):描述系统的静态结构(类及其相互关系);
对象图( Object diagram),描述系统在某个时刻的静态结构(对象及其相互关系);
48? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
UML的组成
顺序图( Sequence diagram):按时间顺序描述系统元素间的交互;
协作图( Collaboration diagram):按照时间和空间的顺序描述系统元素间的交互和它们之间的关系;
状态图( State diagram):描述了系统元素的状态条件和响应;
活动图( Activity diagram):描述了系统元素的活动;
构件图( Component diagram):描述了实现系统的元素的组织;
部署图( Deployment diagram):描述了环境元素的配置并把实现系统的元素映射到配置上。
49? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
UML的组成
视图和组成视图的图之间的对应关系:
用例视图:使用用例图和活动图;
逻辑视图和并发视图:使用类图、对象图,顺序图,协作图,状态图和活动图;
构件视图:使用构件图;
部署视图:使用部署图。
50? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心用例图
参与者 ( Actor):是具有行为能力的事物,可以是一个人(由所扮演的角色来识别)、计算机系统、硬件设备或组织。
场景( Scenario),是参与者和被讨论系统之间一系列特定的活动和交互,通常被称为“用例的实例”。场景是使用系统的一个特定情节或用例的一条执行路径。例如,借书成功的场景或者由于各种原因借书不成功的场景。
用例( Use Case),通俗地讲,用例就是描述参与者如何使用系统来达到目标的一组成功场景和失败场景的集合。例如,借书就是一个用例。
51? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心用例图的作用
用例图主要用于构建用例建模,绘制用例图可按照以下步骤进行:
首先要确定系统的边界,找出在系统边界之外与系统进行交互的参与者;
然后从这些参与者与系统进行交互的角度,
通过用例来描述参与者怎样使用系统,以及系统向他们提供哪些功能来实现其目标。
52? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心用例图
在 UML 语言中,用例图包含系统边界、参与者和用例等三种模型元素图示,
参与者:
用例:
系统边界
aActor
N e w U s e C a s e
53? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心类图
UML类图用于描述类以及类之间的关系。
类图包含三个部分:
类名:表示问题域中的概念,含义清晰准确
属性,可见性 属性名:类型名 = 初始值 {性质串 }
操作,可见性 操作名(参数表):返回值类型 {性质串 }
类 名属 性操 作
54? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心类图中的属性
属性的可见性:
公有的( public):能够被系统中其它任何操作查看和使用,
当然也可以被修改;属性名前用,+”表示;
私有的( private):仅在类内部可见,只有类内部的操作才能存取该属性,不能被其子类直接存取,属性名前用,-”表示;
保护的( protected):供类中的操作存取,并且该属性也能被其子类直接存取,属性明前用,#”表示。
W a s h i n g M a c h i n e
+ b r a n d N a m e,S t r i n g
+ s e r i a l N u m b e r,S t r i n g
+ c a p a c i t y,I n t e g e r
- s t a t u s,S t a t u s = o f f { o n,o f f }
55? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心类图中的操作
操作的型构( signature) 包括:操作名、参数表和返回值类型;同一个类中各操作型构必须是唯一的 。
参数表由多个参数(用逗号分开)构成,参数的语法格式为:
参数名:参数类型名 = 缺省值
56? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心类图中的操作
实例操作与类操作
实例操作:使用操作前必须创建对象;
类操作:即使没有创建对象,该操作也能被调用;
+ b r a n d N a m e,S t r i n g
+ s e r i a l N u m b e r,S t r i n g
+ c a p a c i t y,I n t e g e r
- s t a t u s,S t a t u s = o f f { o n,o f f }
+ m a c h i n e s,I n t e g e r
W a s h i n g M a c h i n e
+ a d d C l o t h e s ( C,S t r i n g )
+ r e m o v e C l o t h e s ( C,S t r i n g )
+ a d d D e t e r g e n t ( D,I n t e g e r )
+ t u r n O n ( ),B o o l e a n
+ b r a n d N a m e,S t r i n g
+ s e r i a l N u m b e r,S t r i n g
+ c a p a c i t y,I n t e g e r
- s t a t u s,S t a t u s = o f f { o n,o f f }
+ m a c h i n e s,I n t e g e r
W a s h i n g M a c h i n e
+ a d d C l o t h e s ( C,S t r i n g )
+ r e m o v e C l o t h e s ( C,S t r i n g )
+ a d d D e t e r g e n t ( D,I n t e g e r )
+ t u r n O n ( ),B o o l e a n
+ g e t M a c h i n e s ( ),I n t e g e r
57? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心类之间关系的表示
UML中类之间的关系可分为:
关联
聚合
继承
依赖
58? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心普通关联
用连接两个类的直线表示;
如果类与类之间的关联是单向的,则称为导航关联。
多重性:表示关联关系的数量关系。
角色:类在一个关联关系中扮演的角色;
研 究 生 教 师协 助人 汽 车拥 有
0,,*
人 汽 车拥 有
0,,*1,,*
研 究 生教 师协 助
10,,*
任 课 教 师助 教
59? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心反身关联
也称为递归关联
一个类可能与它自己发生关联,这样的关联称为反身关联。
当一个类的对象可以充当多种角色时,反身关联就可能发生。
人丈 夫妻 子
1
1
网络节点
n
n
连接
N o d e 2N o d e 1
N o d e 4
N o d e 5
N o d e 7
N o d e 6
N o d e 3
N o d e 8
8 个网络节点的对象图
60? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心限定关联
在 UML中,唯一标识对象的 ID(标识)信息叫做限定符( qualifier)。
利用限定符来查找对象,将得到符合条件的一个对象集合。在类图中,限定词放置在关联关系末端的一个小方框内,紧挨着开始导航的类
。
书 架 书
1 1
书 I D
书 架 书
1 *
61? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心有序关联及关联类
要明确表示关联中的次序关系,一定要将约束
,{ordered}”放在表示关联的直线旁且紧挨着对象被排序的类。
关联间的异或关系
当两个关联不能同时存在时使用
关联类
具有属性和操作的关联可用用关联类表示银 行 出 纳 员顾 客服 务
{ o r d e r e d }
助 教研 究 生 教 师协 助 任 课 教 师导 师指 导学 生
{ x o r }
考 核 记 录研 究 生教 师协 助
10,,*
助 教 任 课 教 师
62? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心例子:保险公司
保险公司有 0或多个保险合同,这些合同与 1个或多个客户有关。客户有 0或多个保险合同,这些合同都与 1个保险公司有关。
保险合同位于一家保险公司和一个或多个客户之间,用它建立保险公司和客户之间的保险关系
保险合同用 0或 1个保险单表示,也就是合同的书面表示,一个保险单表示一份保险合同
63? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心聚合
聚合用来表达事物之间的整体 --部分关系;
把作为“整体”的类称为 聚集 ( aggregate),作为“部分”的类称为 成分 。
识别聚合关系的常用方法是寻找“由 …… 构成
”、“包含”、“是 …… 的一部分”等子句兴 趣 小 组学 生 老 师
1
5,,*
辅 导 教 师兴 趣 小 组学 生老 师
1
5,,*
辅 导 教 师
64? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心聚合
组合:更强类型的聚合;要求部分的生存周期取决于整体的生存周期,部分不能脱离整体而单独存在,每个部分只能属于一个整体。
聚合另一层重要意义:
将一组对象集合看做一个统一的单元,将整体对象定义成控制对象,它为整个集合提供接口。当操作应用于整体对象时,整体对象往往需要将操作再传播给各成员对象,以便使集合像一个单独的对象那样运作。订 单条 目人文 档 段 落字 符拥 有
1
*
1
*
1
*
复 制 复 制复 制 复 制 复 制
65? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心聚合
关联、聚合和组合的联系和区别关联 对象之间互相了解,以便在一起工作聚合1,保护整体的完整性
2,如同一个单元在运作
3,操作通过一个对象控制--依次向下传播组合每一部分只能是一个整体的成员部分不能脱离整体而单独存在
66? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心例子:油画
一幅油画由许多图形组成,图形可以由直线、圆、多边形和各种线型混合而成的组合图等。
67? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心继承交 通 工 具地 铁 轿 车 公 共 汽 车车 船轮 船 快 艇试 题选 择 题 填 空 题 简 答 题 程 序 设 计 题
继承关系中包含父类和子类,用一个带空心三角形的直线表示,
空心三角形紧挨着父类。
继承可以有多个层次
68? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心继承
如果一个类中没有包含足够的信息来实例化一个具体的对象,这样的类称为 抽象类 。抽象类往往用来表征对问题领域进行分析、设计得出的抽象概念,
是对一系列看上去不同、但本质上相同的具体概念的抽象。抽象类是不能够被直接实例化。
例如,对“汽车”、“船”进行抽象形成的“交通工具”概念。
抽象类中一般都带有抽象的操作。抽象类的子类一定要实现抽象类中的抽象操作,为抽象操作提供方法(算法实现),否则该子类仍然是抽象类。
与抽象类恰好相反的类称为 具体类 。具体类有自己的对象,并且该类中的操作都有具体实现的方法。
69? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心继承交 通 工 具
{ a b s t r a c t }
d r i v e ( ) { a b s t r a c t }
汽 车
d r i v e ( )
船
d r i v e ( )
驱 动 车 轮 转 动驱 动 螺 旋 桨人驾驶 *
70? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心依赖
依赖关系描述的是两个模型元素(类、构件、用例)之间语义上的连接关系。
其中,一个模型元素是独立的,另一个模型元素是非独立的(依赖的),它依赖于独立的模型元素,如果独立的模型元素发生改变,将会影响依赖该模型元素的其他模型元素。
比如,某个类中使用另一个类的对象作为操作中的参数,则这二个类之间就具有依赖关系。
增 加 ( 学 生,x )
删 除 ( 学 生,x )
讨 论 班
… …
学 生
… …
… …
71? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心对象图
对象图可以看作类图的实例,表示在某一时刻这些类的具体实例和这些实例之间的具体连接关系。
对象图中,表示对象之间静态联系的线称作“链
”。因此链可以看作是关联的实例。
对象的图示中在对象的名字下面要加下划线。对象名有下列三种表示格式:
对象名:类名
,类名
对象名
72? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心对象图研 究 生协 助
10,,*
任 课 教 师助 教姓 名学 号教 师姓 名工 号张 强,研 究 生姓 名 = 张 强学 号 = G 1 0 3
王 晓,研 究 生姓 名 = 王 晓学 号 = G 1 2 6
李 宏,教 师姓 名 = 李 宏工 号 = 2 6 9 0
73? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心交互图
UML中的交互图是顺序图和协作图的统称,
用于详细地描述对象的动态行为,即捕获对象需要提供哪些操作、对象之间如何协作来实现用例的各个场景。
交互图仅表达用例的一个场景,而不要同时表达多个场景。
顺序图是强调消息交互时间顺序的交互图;
协作图则是强调接收和发生消息的对象的结构组织的交互图。
74? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心顺序图
顺序图是一种详细表示对象之间以及对象与参与者之间交互的图,它由一组协作的对象(或参与者)以及他们之间可发送的消息组成,强调消息之间的顺序。
顺序图是二维的,垂直方向表示时间,水平方向表示不同的对象或参与者。
顺序图中的主要元素包括:
对象或参与者
生命线
控制焦点
消息
75? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心顺序图例
76? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心对象或参与者
参与要描述的消息交互场景中的对象和参与者依次排列在水平方向上,他们的顺序并不重要,消息发起者一般放在最左侧。
对象或参与者在序列图上并不都处于一排,而是错落有致的。其规则是:
所有在通信开始前就存在的对象放置在图的顶部;
在中途被创建的对象,放置在箭头指向的位置;
顺序图中,可以明确地给出对象名,也可以使用匿名对象。
77? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心生命线
对象生命线表示对象在一段时间内的存在
,用垂直虚线表示,并位于对象符号之下。
在所有通信完成后仍然存在的对象的生命线,要延伸超出图中最后一个箭线 ;
如果对象在中途被销毁,那么用一个大的,X”标记它的析构(销毁),该标记或者放在引起析构的箭线处,或者放在从被销毁的对象最终返回的箭线处(在自析构的情况下)。
78? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心控制焦点
控制焦点表示了对象的一个操作执行的持续时间
,也表示了对象和它的调用者之间的控制关系。
控制焦点也叫激活。
在顺序执行的情况下,一个控制焦点表示一个对象的操作或者它的从属操作活动着的持续时间。
用一个窄长的矩形表示控制焦点。矩形的顶端和它的开始时刻对齐,即画在开始该动作箭线所指向之处。矩形的末端和它的结束时刻对齐,即画在返回的箭线的尾部。
对象操作递归调用自己或调用本对象的其他操作时,控制焦点表示为左图。
79? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心消息
消息是对象之间通信的描述,说明了一个通信过程,指明消息的发送对象和接收对象。
一个消息的执行会引起一个操作的调用、发送一个信号、或引起一个对象被创建或删除。接收消息的对象可能会向调用者返回一个结果。
把消息表示为从一条生命线到另一条生命线的一条带有箭头的水平实线(简称为箭线),从源对象指向目标对象。箭线上必须书写消息的名称及其参数或者参数表达式。
对于到一个对象自身的消息,箭头就从同一个对象符号开始和结束。
80? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心消息的分类
实箭头用于过程调用或其他的嵌套控制流
。在外层控制恢复之前,要完成整个嵌套序列。这样的消息称为同步消息。可以把实箭线用于普通的过程调用。
枝装箭线用于异步通信,也就是没有控制嵌套。发送者发出消息后,立即继续执行中的下一步,不进行等待。
虚的枝装箭线显示地表示从调用过程的返回。也可以省略返回箭线,这种做法假设在每个调用后都有一个配对的返回。
81? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心消息的描述
发送消息的时间可以忽略,用水平消息箭头表示
,如果发送消息是需要时间的,可把消息箭头向下倾斜,使箭线头部在尾部下方,表示消息需要一段时间到达。
若需要对消息进行迭代建模,就在消息的顺序号后加一个,*”号,其后可以加条件表达式,表示按照给定的表达式重复该消息。
若需要对一组消息进行重复,可把这组消息用一个矩形围起来,并在附近写出重复条件。
若需要对含有分支的控制流建模,可把分支画成从一个点出发的多个箭线,每个箭线由监护条件标识。
82? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心打电话的顺序图
83? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心建立顺序图时应遵循的策略
( 1)根据用例描述,设置交互的语境,包括可能需要的对象和参与者。
( 2)在顺序图的上部列出所选定的一组对象或参与者,并为它们设置生命线。通常把发起交互的对象放在左边。
( 3)在交互期间被创建和撤销的对象,在适当的时刻,用消息箭线在它们的生命线上显式地予以指明。
( 4)决定消息将怎样或以什么样的顺序在对象之间传递。通过参与者或者首先发出消息的对象,
看它需要哪些对象为它提供操作,它向哪些对象提供操作。追踪相关的对象,进一步做这种模拟
,直到分析完与当前语境有关的全部对象。
84? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心建立顺序图时应遵循的策略
( 5)在各对象下方的生命线上,按使用该对象操作的先后次序排列各个代表操作执行的控制焦点
。
( 6)两个对象的操作执行如果属于同一个控制线程,则接收者操作的执行应在发送者发出消息后开始,并在发送者结束之前结束。不同控制线程之间的消息有可能在接收者的某个操作的执行过程中到达。
( 7)对对象所执行的操作的功能以及时间或空间约束进行描述。
( 8)如果需要可视化消息的迭代或分支,就使用迭代或分支的表示法。
85? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心协作图
协作图是一种强调发送和接收消息的对象结构组织的交互图,显示围绕对象以及它们之间的链而组织的交互。
协作图由对象、链以及链上的消息构成,
其中也可以有参与者。参与者和对象之间
、对象和对象之间的实线称为链,链上带箭头的实线是对象之间的消息。
86? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心协作图例
:Cla ssA,Cla ssB
:Cla ssC,Cla ssD
:Cla ssE
,Emp l oye e
1 a 和1 b 是互斥的条件迭代是有一个" * " 和一个可选的跟在消息序号后面的迭代子句表示
1a,[te s t1],msg 1 ()
1b,[no t te s t1],msg 3 ()
2*[ i:= 1,.N ],ms g 5()
1a,1 m s g2( )
1b,1:m s g4( )
msg 1()
参与者类链消息序号条件
87? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心协作图与顺序图的区别
顺序图和协作图可以相互转换,而不丢失语义信息。
两种图从不同的角度描述了系统中不同对象间的交互过程。
顺序图对象间没有链,对象间 有消息存在隐含了其间有链存在 ;
顺序图不显式地显示消息的顺序号,消息的顺序隐藏在从图的顶部到底部所有消息的物理顺序中;
顺序图能够描述消息的返回
88? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心等价的顺序图
89? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心订单协作图实例
:Order Entry Window
:Delivery Item
:Order Line
:Order
:Reorder Item
:Stock Item
prepare()
1*[for all order lines]:prepare()
1.1:hasStock:=check()
1.2:[hasStock]:remove()
1.2.1:needsReorder:=needToReorder()
1.2.2[needsReorder]:new1.3:[hasStock]:new
90? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心状态图
现实中的事物往往具有以下特征:
大多数事物在其生命周期中经历了不同的状态;
对象在一段有限的时间内,位于某个状态中;
存在引起事物状态变化的事件;
事物在其状态间按次序转化;
事物从一个阶段到另一个阶段的递进是即时的,
即状态的改变不需要时间;
当事件发生时,事物可能需要采取一些动作。
91? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
UML状态图表示事 件 型 构 [ 监 护 条 件 ] / 动 作 表 达 式源 状 态内 部 转 换 分 栏目 标 状 态内 部 转 换 分 栏
92? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心事件
事件指的是发生的且引起某些动作( action)执行的事情
,这些事情的发生可能会引起状态的转换。
事件可以分为以下几种:
( 1)信号事件。一个对象对另一个对象信号的接收,导致一个信号事件。把这样的事件的型构( signature)放在由它所触发的操作上。
( 2)调用事件。对操作调用的接收,导致一个调用事件
。这样的操作由接收事件的对象实现。
( 3)时间事件。在指定时间(经常是当前状态的入口)
后,经过了一定的时间或到了指定日期 /时间,导致一个时间事件。
( 4)改变事件(条件变为真事件)。用布尔表达式描述的指派条件变为真,就导致一个改变事件。无论表达式的值何时由假变成真,事件都发生。可以把其看作是连续测试条件,直到它为真。
93? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心事件的表示
事件的定义格式如下:
事件名(用逗号分隔的参数列表)
参数的格式如下:
参数名:类型表达式
通常事件后面还跟有一个监护条件( guard condition),它是一个布尔表达式。当事件发生后,还要监测其监护条件,如果监护条件为假,则该事件不触发状态转换,并且事件丢失。
时间事件改变事件
94? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心事件动作
动作是在状态内或在状态转化时所做的操作,一个动作可能是:
执行对象的一个操作,如设置或修改本对象的一个属性;
调用另一个对象的一个公共操作;
产生发送给分析范围之外的事件(例如,操作员、硬件设备或在另一个系统 /子系统中的对象);
向一个对象发送信号;
创建或撤消另一个对象;
95? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心动作表达式
动作表达式指在事件后面放置一条斜线,后面描述希望执行的动作,例,when(温度 >120度 )/测试设备 ( )表示当 when(温度 >120度 )事件发生后,要执行的动作表达式是测试设备()。
如果动作表达式包含的动作不止一个,只要将它们之间用逗号分割开就可以了。例如,假设当
when(温度 >120度 )事件发生后,要执行的动作表达式是测试设备并且发送通知,则其表达式如下
:
when(温度 >120度 )/ 测试设备(),发送通知()
96? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心状态
状态是对象生命期的一个阶段,在该阶段中该对象要满足一些特定的条件,并可从事特定的活动。
状态图中有一个初始状态和多个终止状态;
状态名称分栏放置状态名,在同一张状态图里不允许相同名称的状态。没有名称的状态是匿名的,同一张图中的各匿名状态被认为是互不相同的。
内部转换分栏给出对象在这个状态中所执行的动作
、活动和内部转换 。
状 态 名 称内 部 转 换 分 栏
97? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心状态内的要素入口动作表示在进入状态时,执行相应的动作表达式规定的动作。
出口动作表示在退出状态时,执行相应的动作表达式规定的动作。
活动是在一个状态内执行的处理过程,是一个动作或动作的集合。
对象收到事件后,不会引起对象状态的变化,
却会触发对象的响应,这种情形被称为内部转换。
延迟事件是指在当前状态下暂不处理、但将推迟到该对象的另一个状态下排队处理的事件。
98? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心状态转换
转换是两个状态之间的一种关系,表示当一个特定事件出现
,且如果满足一定的条件(如果有的话),对象就从第一个状态(源状态)进入第二个状态(目标状态),并执行一定的动作。
把转换表示成从源状态出发并在目标状态上终止的带箭头的实线,并把事件型构、监护条件和动作表达式放在其上。
以下是两个转换示例:
( 1) right-mouse-down(location)[location in window]/object:=
pick-object(location);
当鼠标落在窗口中,且按下了右键,就引发了一个转换。在转换中,把所选中的对象赋给了变量 object。
( 2) object.highlight;
调用 object的 highlight操作,引发了一个状态转换。该转换无监护条件,转换也不执行任何动作。
99? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心状态图实例
100? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心组合状态图
一个状态可以进一步细分为很多子状态,
组合状态是由两个或多个子状态构成的状态,而且子状态还可以是组合状态。
子状态之间可以拥有,and”和,or”两种关系。对象处于组合状态 s1 and s2,当且仅当对象既处于子状态 1,又处于子状态 2;对象处于组合状态 s1 or s2,当且仅当对象处于子状态 1或子状态 2。
a u t h
a u t h o r i z i n g a u t h o r i z e d
[ p e r m i t t e d ]
c h e c k i n g d i s p a t c h i n g
w a i t i n g
p r o c e s s
a c t i v e
r e j e c t e d
[ ! p e r m i t t e d ]
c a n c e l l e d
c a n c e l
d e l i v e r e d
101? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心活动图
UML活动图( activity diagram)类似传统的流程图,显示出活动、判定点和分支,可用来对类中的方法、用例或企业业务过程建模。
UML活动图的符号:
起始点:实心圆圈代表;
终点:带有外边界的实心圆代表;
执行的活动:圆角矩形框代表,如起床、锁门;
活动转移:箭头代表,用于对活动发生的顺序建模。
判定:菱形代表,或直接从一个活动中引出可能的路径。表示对条件进行判断,根据判定结果再决定执行哪条路径。
并发活动:用与路径垂直的横线表示;
102? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心活动图实例起 床打 包 早 餐
[ 饿 ] [ 不 饿 ]
吃 早 餐锁 门起 床吃 早 餐 打 包 早 餐
[ 饿 ] [ 不 饿 ]
锁 门打 开 收 音 机听 音 乐 准 备 晚 饭并发活动
103? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心带泳道的活动图
为了表达活动图中的活动分别由哪些对象来负责,可以将活动图分割成多个平行的段,这些段被称为泳道( swim
lane)。
每个泳道的顶部可以显示角色名,该角色负责的活动放在各个角色的泳道中。
一个泳道到另一个泳道之间可以发生转移。
男 主 人女 主 人制 定 请 客 计 划邀 请 朋 友打 扫 房 间购 买 物 品烹 饪招 待 朋 友欢 送 朋 友整 理 房 间
104? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心构件图
构件是定义了良好接口的物理实现单元,
是系统中可替换的部分。
在 UML中,用构件表示将类和接口等逻辑元素打包而形成的物理模块。
U t i l i t y,,d i a l o g,d l l
包名 构件名构件
105? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心构件和类
相同点:
都有名称
都能实现一组接口
都可以参与依赖、关联、继承和聚合关系
都可以有实例
都可以参与交互
不同点:
类表示逻辑抽象,而构件表示存在于比特空间中的物理抽象。
构件表示的是物理模块,而不是逻辑模块,与类处于不同的抽象级别。
类可以拥有属性和操作,而构件通常仅拥有通过其接口向外提供或请求的操作。
106? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心构件与类依赖关系
构件 dialog.dll实现了类 a、类 b以及这两个类之间的关联,则构件 dialog.dll和类 a、类 b之间就存在依赖关系。这种依赖关系既如下图所示,d i a l o g,d l l
a b
1 *
d i a l o g,d l l
a b
1
*
107? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心构件与接口
接口是描述类或构件所提供操作的集合。
构件有两类接口:
提供型接口:定义了构件对外提供的服务
需求型接口:定义了构件需要向其他构件请求的服务。
一个构件可以实现多个接口,也可以使用多个接口。良好定义的构件不直接依赖于其他构件,而是依赖于构件所支持的接口
。
108? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心构件与接口
构件 component.java对外提供接口
ImageObserver中的服务,则 component.java
必须实现接口 ImageObserver。
c o m p o n e n t,j a v a
I m a g e,j a v a
I m a g e O b s e r v e r
c o m p o n e n t,j a v a
I m a g e,j a v a
,i n t e r f a c e,
I m a g e O b s e r v e r
i m a g e U p d a t e ( ),B o o l e a n
109? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心构件的分类
( 1)源代码构件。源代码构件只在编译时是有意义的,例如实现一个或多个类的源代码文件。
( 2)二进制构件。二进制构件是对象代码,是源代码构件的编译结果。它是一个对象代码文件,一个静态库文件或一个动态库文件。二进制构件只在链接时有意义,如果二进制组件是动态库文件,则在运行时有意义。
( 3)可执行构件。是可执行的程序文件,是链接 (
静态链接或动态链接 )所有二进制构件所得到的结果
。一个可执行构件代表处理器 (计算机 )上运行的可执行单元。
110? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心构件图示例
构件图用于展示一组构件以及它们之间的关系。
o r d e r,h
{ v e r = 2,0 }
o r d e r,c p p
{ v e r = 2,2 }
c u s t o m e r,h
{ v e r = 3,1 }
A n i m a t o r,e x e
R e n d e r,d l l
D i a l o g,d l l
二进制、可执行构件之间的关系源代码构件及它们的关系
111? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心部署图
部署图对系统的硬件拓扑结构建模,通常也用于展示在节点上活动的构件的配置。
部署图通常包含节点、节点之间的关系、
构件以及构件和节点之间的依赖关系。
一般针对每个具体应用,都应该绘制部署图。特别是在对嵌入式系统或分布式系统建模时,多使用部署图。
112? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心部署图中的节点
节点是在运行时存在并代表一项计算资源的物理元素,一般至少拥有一些内存,通常具有处理能力,通常表示一个可以在其上部署构件的处理器或设备。
利用节点可以为系统的拓扑结构建模。
节 点 名 称
113? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心节点中的构件
一个节点上可以有一个或多个构件,一个构件也可以部署在一个或多个节点上。
s a l e s
p o s,e x e
o r d e r,e x e
s a l e s
p o s,e x e
o r d e r,e x e
114? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心节点间的关系
节点之间最常见的关系是关联关系,用来表示节点之间的物理连接。 k i o s k
c o n s o l e
s e v e r
,1 0 - T E t h e r n e t,
,R S - 2 3 2,
节点连接使用了以太网连接协议和串口连接协议。
115? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心部署图实例
116? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心包图
包是对模型元素分组的机制。
使用包的最常见目的是把模型元素组织成为组,作为一个集合进行命名和处理。
包可以拥有类、接口、构件、节点、用例和图,也可以拥有其它包。
拥有是一种组成关系,这意味着被拥有的元素被声明在包中。
如果包被撤消了,元素也要被撤消。一个元素只能被一个包所拥有。
设计良好的包,会把在语义上接近并倾向于一起变化的元素组织在一起,是松耦合、高内聚的,
而且对其内容的访问具有严密的控制。
117? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心包的层次组织
包图示为类似书签卡片的形状,由二个长方形组成,小长方形标签位于大长方形的左上角。
包中还可以有包,这样包之间可以有一个层次,且在组织上是一棵严格的树。
118? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心包中元素的命名
一个包形成了一个命名空间
同一个包中,同一种元素的名字必须是唯一的;
不同包中,元素可以重名;
同一个包中,不同元素可以重名,但最好不要重名;
包中还可以包含其他的包,引用包中类的方法为:
P1包拥有名为 Queue的类,可以用 P1::Queue这种方式引用;
包 Vision中有一个名为 Camera的类,而包 Vision又在包Sensor中。类 Camera的全名为 Sensor::Vision::Camera。
119? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心包之间的关系
包之间不但可以具有拥有关系,也可以具有引入( import)依赖、访问( access)依赖和泛化关系。
引入依赖:是两个包之间的一种许可依赖关系,一个包中的可见性为公有的模型元素,可以在指定的包(包括嵌套在该包中的子包)中被引用,相当于把一个包的内容拷贝到另一个包中,引入的模型元素属于引入到的包,而它的原始版本仍然存在原始的包内。在访问引入的模型元素时不需要在其前面加路径名。
120? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心引入依赖示意图包中元素的可见性以及包之间的引入依赖
121? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心访问依赖
访问依赖是两个包之间的一种许可依赖关系,它允许客户包使用提供者包中的可见性为公有的元素,当客户包引用这些元素时,需要使用元素的全路径名。
把访问依赖绘制成带有箭头的虚线,其上标有,access,。
H u m a n
R e s o u r c e s
,a c c e s s,
P r o d u c t O r d e r s
122? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心包中元素的可见性
利用可见性控制外部包对包中内容的存取方式。
UML 中对包定义了三种可见性:
公共的( +):对引入( import)或访问(
access)它所位于包的包以及这些包的子包中的元素是可见的
私有的( -):只对它所位于的包中的元素是可见的
受保护的( #),只对它所位于的包以及该包的子包中的元素是可见的
123? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心包中元素的可见性
引入和访问依赖不是传递的。
如果一个包 A与和它处在同等嵌套层次上的包 B之间无引入或访问依赖,则包 A中的元素不可以引用或访问包 B中的元素。如图 8- 69中子系统 C和 E之间无引入或访问依赖,因此子系统 C中的元素不能访问子系统 E中的元素,反之亦然。
如果一个包 A与它包含的包 B无引入或者访问依赖,则包 A中的元素不可以引入或访问包 B中的元素
,但包 B可以引入或访问包 A中的可见性为公共的元素。
如果包 A中的元素对包 B是可见的,那么这个元素对嵌套于包 B内的所有包也都是可见的,也就是说
,被包含的里层的包能够看到外层的包所能见到的所有元素。
124? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心如何划分包
划分良好的包具有高内聚、低耦合、访问控制等特点,包划分没有严格的标准,具有一定的随意性。
( 1)识别低层包。把语义上接近并倾向于一起变化的元素组织在一个包中。例如,把具有继承关系的一组类放在一个包中,把关联紧密的一组类放在一个包中,把具有包含、扩展或者继承关系的用例放在一个包中。把独立的模型元素暂时放在一个包中。
( 2)合并包
如果低层包数量过多,则合并为高层包。若低层包之间在概念上接近或具有较强的相关性,从作用上属于某项大的功能,在图中有较强的耦合性,或在分布上处于同一台处理机,则考虑把它们合并。每个包最好有 7± 2个内层成分。
125? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心如何划分包
( 3)组织包的层次。包的层次不宜太多,
否则会影响理解。
( 4)标识包中模型元素的可见性。对每一个包,区别哪些元素可以被包外的其他元素访问,把它们标记为公共的。把所有其它的元素标记为受保护的或私有的。
( 5)建立包间的关系。根据需要,用引入依赖、访问依赖或泛化关系显式地连接包
。
126? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.4.5 基于 UML的面向对象软件开发过程
使用 UP作为指导基于 UML面向对象开发过程,在业务建模、需求、设计、实现和测试这几个流程中使用 UML进行建模的方法如下:
(1)业务建模。采用 UML的对象图和类图表示目标软件系统所基于的应用领域中的概念和概念间的关系。如果领域中含有明显的流程处理部分,可以考虑利用 UML的活动图来刻画领域中的工作流 。
127? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.4.5 基于 UML的面向对象软件开发过程
(2)需求。 UML 的用例视图以用户为中心,对系统的功能性需求进行建模。
用文本形式或 UML活动图描述用例 ;
利用 UML用例图表示参与者与用例之间、用例和用例之间的关系。
采用 UML顺序图图形化描述参与者和系统之间的系统事件。
利用系统操作契约刻画系统事件的发生引起系统内部状态的变化。
如果目标系统比较庞大,用例较多,则可以用包来组织和管理这些用例,将关系密切的用例组织到同一个包里,用 UML包图刻画这些包及其关系。
128? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.4.5 基于 UML的面向对象软件开发过程
(3)设计。包括软件体系结构设计和用例实现的设计。
采用 UML包图设计软件体系结构,刻画系统的分层、分块思路。
采用 UML协作图或顺序图寻找参与用例实现的类及其职责(属性和操作)。
用 UML类图描述这些类及其关系,这些类属于体系结构的不同的包中。
用 UML状态图描述那些具有复杂生命周期行为的类。
用 UML活动图描述复杂的算法过程和有多个对象参与的业务处理过程。
此外,还可以使用 UML构件图描述软件代码的静态组织与管理,UML部署图描述硬件的拓扑结构以及软件和硬件的映射问题。
129? 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
8.4.5 基于 UML的面向对象软件开发过程
( 4)实现。把设计得到的类转换成某种面向对象程序设计语言的代码。
( 5) 测试。对系统的测试通常分为单元测试、集成测试、系统测试和接受测试几个不同级别。