Transcript Document

第6章
面向对象的分析和设计
第6章 面向对象分析与设计
第6章 面向对象的分析和设计
6.1 面向对象的基本概念
6.2 面向对象的分析和设计过程
6.3 UML概述
6.4 用例建模
6.5 静态建模
6.6 动态建模
6.7 物理体系结构建模
目录
首页
上页
下页
末页
2/260
第6章 面向对象分析与设计
教学目的与要求
⒈掌握面向对象的基本概念;
⒉掌握面向对象分析和设计的过程;
⒊掌握UML的基本概念和组成;
⒋会应用UML建立用况模型,并给出用况的描述;
⒌会应用UML建立静态模型和动态模型;
⒍会应用UML建立物理体系结构模型。
目录
首页
上页
下页
末页
3/260
第6章 面向对象分析与设计
教学重点
⒈掌握面向对象的基本概念; ;
⒉面向对象分析和设计的过程;
⒊ UML的基本概念和组成;
⒋应用UML建立系统的用况模型、静态模型、动态
模型和物理体系结构模型。
教学难点
⒈面向对象分析和设计的过程;
⒉应用UML建立系统的用况模型、静态模型、动态
模型和物理体系结构模型。
目录
首页
上页
下页
末页
4/260
第6章 面向对象分析与设计
5/260
教学学时
8学时
教学方法
采用多媒体课件+讲授法+启发式相结合教学
教学参考文献
⒈《软件工程导论(第五版)》,张海藩,清华大学出版社
⒉《软件工程 (第二版)》,齐治昌,高等教育出版社
⒊《UML用户指南(第二版) 》, (美)布奇,(美)兰宝,(美)雅
各布 著,邵维忠,麻志毅 译 ,人民邮电出版社
⒋《UML系统建模与分析设计 》,刁成嘉,机械工业出版社
⒌《面向对象技术UML教程》,王少锋,清华大学出版社
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
6.1
6/260
面向对象的基本概念
面向对象的方法是一种运用对象、类、继承、
封装、聚合、消息传送、多态性等概念来构造系统
的软件开发方法。
面向对象=对象(object)
+类(classification)
+继承(inheritance)
+通信(communication with messages)
可以说,采用这四个概念开发的软件系统是面
向对象的。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
7/260
面向对象方法成为主流开发方法。可以
从下列几个方面来分析其原因:
1.从认知学的角度来看,面向对象方法符合
人们对客观世界的认识规律。
2.面向对象方法开发的软件系统易于维护,
其体系结构易于理解、扩充和修改。
3.面向对象方法中的继承机制有力支持软件
的复用。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
8/260
面向对象的基本概念
1. 对象(object)
对象是指一组属性以及这组属性上的专用操作的封
装体。
属性(attribute)通常是一些数据,有时它也可以
是另一个对象。每个对象都有它自己的属性值,表示
该对象的状态。对象中的属性只能通过该对象所提供
的操作来存取或修改。
操作(operation)(也称方法或服务)规定了对象
的行为,表示对象所能提供的服务。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
9/260
封装(encapsulation)是一种信息隐蔽技术,
用户只能看见对象封装界面上的信息,对象的内
部实现对用户是隐蔽的。
封装的目的是使对象的使用者和生产者分离,
使对象的定义和实现分开。
一个对象通常可由对象名、属性和操作三部
分组成。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
10/260
2. 类(class)
类是一组具有相同属性和相同操作的对象的
集合。一个类中的每个对象都是这个类的一个
实例(instance)。
类是创建对象的模板,从同一个类实例化的
每个对象都具有相同的结构和行为。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
11/260
对象和类的描述
对象和类一般采用“对象图” 和 “类图” 来描述。
几何对象
类图
类名
人
文件
属性
姓 名:字符串
年 龄: 整 型
文件名
文件大小
最近更新日期
运算
改换工作
改换地址
移动(delta:矢量)
选择(P:指针型):布尔型
旋转(角度)
打印
图
对象图
颜色
位置
对象类的描述
李军:人
张红兵
李军
24
张红兵
28
绘图员
人民路8号
程序员
无
图
目录
首页
对象的描述
上页
下页
末页
第6章 面向对象分析与设计
轿
车
张经理的轿车
型号:字符串
颜色:字符串
牌照号:字符串
....
型号=桑塔纳
颜色=红色
牌照号=沪AN2037
....
类
实例对象
目录
首页
上页
下页
末页
12/260
第6章 面向对象分析与设计
13/260
3.继承(inheritance)
继承是类间的基本关系,它是基于层次关系
的不同类共享数据和操作的一种机制。父类中定
义了其所有子类的公共属性和操作,在子类中除
了定义自己特有的属性和操作外,可以继承其父
类(或祖先类)的属性和操作,还可以对父类
(或祖先类)中的操作重新定义其实现方法。
意义:实现代码的重用。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
多边形
顶点数
顶点坐标
计算面积
旋转
矩形
长
宽
对角线
计算面积
计算对角线
目录
首页
上页
下页
末页
14/260
第6章 面向对象分析与设计
15/260
抽象类(abstract class):没有实例的类,它把
一些类组织起来,提供一些公共的行为,但并不
需要使用这个类的实例,而仅使用其子类的实例。
在抽象类中可以定义抽象操作,抽象操作指:
只定义这个类的操作接口,不定义它的实现,其
实现部分由其子类定义。抽象操作操作名用斜体
字表示,也可以在操作特征(signature)后面加
上特征字符串{abstract}。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
抽象类与子类示例
Shape
Abstract class
{ abstract }
Abstract operation
draw ( ) { abstract }
Circle
Rectangle
draw ( )
draw ( )
目录
首页
上页
下页
末页
16/260
第6章 面向对象分析与设计
17/260
交通工具
飞行器
汽车
船
轿车
货车
一般-特殊关系
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
18/260
如果一个子类只有唯一一个父类,这个继承
称为单一继承。如果一个子类有一个以上的父类,
这种继承称为多重继承。
水上交通工具
陆上交通工具
水陆两栖交通工具
多重继承
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
19/260
4.消息(message)
消息传递是对象间通信的手段,一个对象通
过向另一个对象发送消息来请求其服务。一个消
息通常包括接收对象名、调用的操作名和适当的
参数(如果有必要的话)。
消息只告诉接收对象需要完成什么操作,但
并不指示接收者怎样完成操作。消息完全由接收
者解释执行。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
20/260
5. 多态性与动态绑定
多态性(polymorphism)是指同一个操作作
用于不同的对象上可以有不同的解释,并产生不同
的执行结果。
例如“画”操作,作用在“矩形”对象上,则
在屏幕上画一个矩形,作用在“圆”对象上,则在
屏幕上画一个圆。
动态绑定(dynamic binding)是在运行时根据对
象接收的消息动态地确定要连接的服务代码。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
21/260
在一般与特殊关系中,子类是父类的一个
特例,所以父类对象可以出现的地方,也允许
其子类对象出现。因此在运行过程中,当一个
对象发送消息请求服务时,要根据接收对象的
具体情况将请求的操作与实现的方法进行连接,
即动态绑定。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
22/260
polygon
area
getArea {abstract}
triangle
rectangle
length
width
getArea
getArea
Var p : polygon ;
Var t : triangle :=
triangle.new ;
Var r : rectangle :=
rectangle.new ;
目录
首页
上页
hexagon
getArea
if 条件 then p := t ;
else p := r ;
area := p.getarea ;
下页
末页
第6章 面向对象分析与设计
23/260
6、永久对象(Persistent object)
所谓永久对象是指生存期可以超越程序的执行
时间而长期存在的对象。
目前,大多数OOPL不支持永久对象,如果一
个对象要长期保存,必须依靠于文件系统或数据库
管理系统实现,程序员需要作对象与文件系统或数
据库之间数据格式的转换,以及保存和恢复所需的
操作等烦琐的工作。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
6.2 面向对象的分析和设计过程
面向对象分析(Object-Oriented Analysis)
获取用户基本需求
标识类和对象
定义类的结构和层次
表示类(对象)间的关系
为对象行为建模
OOA分析的一般过程
目录
首页
上页
下页
末页
24/260
第6章 面向对象分析与设计
25/260
OOA过程
1. 获取客户对系统的需求
需求获取必须让客户与开发者充分地交流。
采用用例来收集客户需求的技术:
分析员先标识使用该系统的不同的执行者(actor),
代表使用该系统的不同的角色。每个执行者可以叙述
他如何使用系统,或者说他需要系统提供什么功能。
执行者提出的每一个使用场景(或功能)都是系统的
一个用例的实例 ,一个用例描述了系统的一种用法
(或一个功能),所有执行者提出的所有用例构成系
统的完整的需求。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
26/260
注意,执行者与用户是不同的两个概念,一个用
户可以扮演几个角色(执行者),一个执行者可以是
用户,也可以是其他系统(应用程序或设备)。得到
的用例必须进行复审,以使需求完整。
2.标识类和对象
类和对象来自问题领域。
可以先标识候选类,然后进行筛选。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
27/260
3.定义类的结构和层次
类的结构主要有两种:
一般—特殊结构 整体—部分结构
构成类图的元素所表达的模型信息,
对象层
分为三个层次:
对象层—给出系统中所有反映问题域
特征层
和系统责任的对象。
特征层—给出类(对象)的内部特征,
关系层
即类的属性和操作。
关系层—给出各类(对象)之间的关
图 OOA基本模型
系,包括继承、组装、一般—特殊 、整
体—部分、属性的静态依赖关系,操作的
动态依赖关系。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
28/260
有的面向对象方法中,把互相协作以完成一
组紧密结合在一起的责任的类的集合定义为主题
(subject)或子系统(subsystem)。主题和子系统
都是一种抽象,从外界观察系统时,主题或子系
统可看作黑盒,它有自己的一组责任和协作者,
观察者不必关心其细节。观察一个主题或子系统
的内部时,观察者可以把注意力集中在系统的某
一个方面。因此,主题或子系统实际上是系统更
高抽象层次上的一种描述。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
4. 建造对象—关系模型
对象—关系模型描述了系统的静态结构,
它指出了类间的关系。
类之间的关系有关联、依赖、泛化、实现
等。
目录
首页
上页
下页
末页
29/260
第6章 面向对象分析与设计
30/260
5.建立对象—行为模型
对象—行为模型描述了系统的动态行为,它
们指明系统如何响应外部的事件或激励。
建模的步骤如下:
– 评估所有的用例,完全理解系统中交互的序列。
– 标识驱动交互序列的事件,理解这些事件如何
和特定的对象相关联。
– 为每个用例创建事件轨迹(event trace)。
– 为系统建造状态机图。
– 复审对象—行为模型,以验证准确性和一致性。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
31/260
OOA模型及详细说明
完整的OOA模型分为基本模型和补充模型以及详细说明。
一、基本模型
基本模型是一个类图(class diagram),是以直观的方式
表达系统最重要的信息。OOA基本模型的三个层次分别描
述了:系统中应设哪几类对象,每类对象的内部构成,对象
与外部的关系。
二、补充模型
补充模型有主题图和交互图。
1.主题(subject)又称为子系统(subsystem)是将一些联系
密切的类组织在一起的类的集合。按照粒度控制原则,将系
统组成几个主题,便于理解。
主题图画出了系统的主题。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
32/260
2、交互图(interaction diagram) 是Use case与系
统成分之间的对照图。
三、详细说明
按照分析方法所要求的格式,对分析模型进行说明和解
释。主要以文字为主。
基本模型 (类图)
交
对象层
互
题
特征层
图
图
关系层
详
图
目录
细
说
明
OOA模型与详细说明
首页
上页
主
下页
末页
第6章 面向对象分析与设计
33/260
面向对象设计
(Object_Oriented Design)
面向对象设计的一般步骤如下:
1.系统设计
⑴将分析模型划分成子系统
在OO系统设计中,把分析模型中紧密相关的类、
关系等设计元素包装成子系统。
通常,子系统的所有元素共享某些公共的性质,可
能都涉及完成相同的功能;也可能驻留在相同的产品硬
件中;也可能管理相同的类和资源。
子系统可通过它提供的服务来标识。在OOD中,这
种服务是完成特定功能的一组操作。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
34/260
子系统的设计准则是:
①子系统应具有定义良好的接口,通过接口和系
统的其它部分通信;
②除了少数的“通信类” 外,子系统中的类应只
和该子系统中的其它类协作;
③子系统的数量不宜太多;
④可以在子系统内部再次划分,以降低复杂性。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
35/260
⑵标识问题本身的并发性,并为子系统分配处理器
⑶任务管理设计
⑷数据管理设计
数据管理的设计包括设计系统中各种数据对
象的存储方式(如内部数据结构、文件、数据库),
以及设计相应的服务,即为要储存的对象增加所需
的属性和操作。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
36/260
⑸资源管理设计
OO系统可利用一系列不同的资源,很多情况下,
子系统同时竞争这些资源,因此要设计一套控制机制
和安全机制,以控制对资源的访问,避免对资源使用
的冲突。
⑹人机界面设计
⑺子系统间的通信
子系统之间可以通过建立客户/服务器连接进行通信,
也可以通过端对端连接进行通信。必须确定子系统间
通信的合约(contract),合约提供了一个子系统和另
一个子系统交互的方式。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
37/260
2. 对象设计
对象设计是为每个类的属性和操作作出详细的设
计,并设计连接类与它的协作者之间的消息规约。
⑴对象描述的方式
①协议描述:描述对象的接口,即定义对象可以
接收的消息以及接收到消息后完成的相关操作;
②实现描述:描述传送给对象的消息所蕴含的每
个操作的实现细节,实现细节就是关于描述对象属性
的数据结构的内部细节和描述操作的过程细节。
⑵为对象中的属性和操作设计数据结构和算法。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
38/260
⒊消息设计
使用对象间的协作和对象—关系模型,设计消息模
型
4. 复审
复审设计模型并在需要时迭代。
设计模式(design patterns): 在许多面向对象系
统中,存在一些类和通信对象的重复出现的模式。这
些模式求解特定的设计问题,使面向对象设计更灵活,
并最终可复用。这些模式帮助设计者复用以前成功的
设计,设计者可把这些模式应用到新的设计中。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
6.3 UML概述
统一建模语言UML
Unified Modeling Language
UML是一种基于面向对象的可视化的通用
(General)建模语言,该方法结合了Booch, OMT,
和OOSE方法的优点,统一了符号体系,并从其它
的方法和工程实践中吸收了许多经过实际检验的
概念和技术。
目录
首页
上页
下页
末页
39/260
第6章 面向对象分析与设计
40/260
UML概述
• 为何研究UML—结束方法大战
• 发展历史
1994年Booch和Rumbaugh在Rational Software
Corporation开始了UML的工作,其目标是创建一个
“统一的方法”。
1995年OOSE的创始人Jacobson加盟到这项工作中,
工作重点转移到创建一种统一的建模语言UML。
1997年11月,OMG(Object Management Group)批
准把UML1.1作为基于面向对象技术的标准建模语言。
2004年推出了UML2.0。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
41/260
UML概述
UML只是一种建模语言,不是一种建模方法。
建模方法应包括建模语言和建模过程两部分:
①建模语言:提供这种方法用于表示建模结果
的符号。(图形符号:可视化)
②建模过程:描述建模时需要遵循的步骤。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
42/260
为什么称之为UML?
U:对多种经典的OO建模方法进行了统一,形成
了规范。
M:用于建立软件开发过程中的各种工程模型。
L:是一种可视化的(图式)语言。
①具有指定的建模元素(图式符号)
②具有严格的语法(构图规则)
③具有明确的语义(逻辑含义)
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
43/260
6.3.1 UML的主要构成
UML是一种标准化的图形建模语言,它
是面向对象分析与设计的一种标准表示。由
以下几个部分构成:
视图(views)
图(Diagrams)
模型元素(Model elements)
通用机制(general mechanism)
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
44/260
UML视图
一个系统应从不同的角度进行描述,从一个角
度观察到的系统称为一个视图(view)。
视图由多个图(Diagrams)构成,它不是一个
图表,而是在某一个抽象层上,对系统的抽象表示。
如果要为系统建立一个完整的模型图,需定义
一定数量的视图,每个视图表示系统的一个特殊的
方面。另外,视图还把建模语言和系统开发时选择
的方法或过程连接起来。
目录
首页
上页
下页
末页
设计视图描
述系统设计
特征,包括
结构模型视
图和行为模
型视图,前
者描述系统
的静态结构,
后者描述系
统的动态行
为。
第6章 面向对象分析与设计
用例视图描述系统
的外部特性、系统
功能等。
Logical View
Implementation View
Use Case View
Process View
Deployment View
进程视图表示系统内部的控制
机制。常用类图描述过程结构,
用交互图描述过程行为。
目录
45/260
首页
实现视图
表示系统
的实现特
征,常用
构件图表
示。
配置视图描述系统的物理
配置特征。用配置图表示。
上页
下页
末页
第6章 面向对象分析与设计
46/260
说明:对于同一个系统,不同人员所关心的
内容并不一样:
• 分析人员和测试人员关心的是系统的行为,因此会
侧重于用例视图;
• 最终用户关心的是系统的功能,因此会侧重于逻辑
视图;
• 程序员关心的是系统的配置、装配等问题,因此会
侧重于实现视图;
• 系统集成人员关心的是系统的性能、可伸缩性、吞
吐率等问题,因此会侧重于进程视图;
• 系统工程师关心的是系统的发布、安装、拓扑结构
等问题,因此会侧重于部署视图。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
47/260
用例视图
•作用:描述系统的功能需求,找出用例和执行者;
•适用对象:客户、分析者、设计者、开发者和测试
者;
•描述使用的图:用例图和活动图;
•重要性:系统的中心,它决定了其他视图的开发,
用于确认和最终验证系统。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
逻辑视图
•作用:描述如何实现系统内部的功能 ;
•适用对象:分析者、设计者、开发者 ;
•描述使用的图:类图和对象图、状态图、顺
序图、合作图和活动图 ;
•重要性:描述了系统的静态结构和因发送消
息而出现的动态协作关系。
目录
首页
上页
下页
末页
48/260
第6章 面向对象分析与设计
49/260
构件视图
•作用:描述系统代码构件组织和实现模块,
及它们之间的依赖关系;
•适用对象:设计者、开发者和测试者;
•描述使用的图:构件图;
•重要性:描述系统如何划分软件构件,如何
进行编程。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
50/260
进程视图
•作用:描述系统的并发性,并处理这些线程间
的通信和同步;
•适用对象:开发者和系统集成者;
•描述使用的图:状态图、顺序图、合作图、活
动图、构件图和配置图;
•重要性:将系统分割成并发执行的控制线程及
处理这些线程的通信和同步。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
51/260
配置视图
•作用:描述系统的物理设备配置,如计算机、
硬件设备以及它们相互间的连接;
•适用对象:开发者、系统集成者和测试者;
•描述使用的图:配置图;
•重要性:描述硬件设备的连接和哪个程序或
对象驻留在哪台计算机上执行。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
52/260
UML中的图
•类图
类图展示了系统中类的静态结构,即类与类之间的相
互联系。可以把若干个相关的类包装在一起作为一个单元(包),
相当于一个子系统。一个系统可以有多张类图,一个类也可以
出现在几张类图中。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
•对象图
对象图是类图的实例,它展示了系统执行在某
一时间点上的一个可能的快照。对象图使用与类图
相同的符号,只是在对象名下面加上下划线,同时
它还显示了对象间的所有实例链接(link)关系。
目录
首页
上页
下页
末页
53/260
第6章 面向对象分析与设计
54/260
• 用例图 用例图展示各类外部执行者与系统所提供的
用例之间的连接。一个用例是系统所提供的一个功能
的描述,执行者是指使用这些用例的人或外部系统,
执行者与用例的连接表示该执行者使用了此用例。
设置边界
贸易经理
更新帐目
《使用》
风险分析
记帐系统
《使用》
评价
交易估价
进行交易
营销人员
《扩展》
销售人员
超越边界
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
55/260
• 构件图 构件图展示系统中的构件(即来自应用的
软件单元),构件间通过接口的连接,以及构件之
间的依赖关系。
构件是一种结构
化类元,可以用
内部结构图来定
义它的内部结构。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
56/260
• 状态图
状态图通常是对类描述的补充,它说明该类的对象
所有可能的状态以及哪些事件将导致状态的改变。
• 活动图
活动图展示了连续的活动流。活动图通常用来描
述完成一个操作所需要的活动。当然它还能用于描述其
它活动流,如描述用例。活动图由动作状态组成,它包
含完成一个动作的活动的规约(即规格说明)。当一个动
作完成时,将离开该动作状态。活动图中的动作部分还
可包括消息发送和接收的规约。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
57/260
• 顺序图
顺序图展示了几个对象之间的动态交互关系。主
要是用来显示对象之间发送消息的顺序,还显示了对
象之间的交互,即系统执行的某一特定点所发生的事。
• 协作图
协作图用几何排列来表示交互作用中的角色,它
显示了有协作关系的复合结构组成部分或角色范围内
的交互。它明确地显示元素之间的协作关系,而不显
示作为独立维的时间,消息的顺序和并发线程必须由
顺序号确定。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
• 部署图
部署图展示了运行时处理结点和在结点上
生存的制品的配置。结点是运行时的计算资源,制品是
物理实体,如构件、文件。
部署图中显
示部署在结点上
的制品和它们之
间的关系,以及
结点之间的连接
和通信方式。
目录
首页
上页
下页
末页
58/260
第6章 面向对象分析与设计
59/260
•包图
包图是由包和它们间的关系组成的结构图。
模型是在某一视点给定的精度上对系统的完整
描述,一个系统可以从不同的视点(如分析模型、
设计模型)存在多个模型。一个模型可看作一个特
定类型的包,通常仅显示包就足够了(不必显示包
内部的细节)。
下图给出了剧院系统所细分成的包以及它们之
间的依赖关系。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
计划
时间表
广告
售票处
客户记
录
售票
票记录
计算
工资单
运作
购买
包图
目录
首页
上页
下页
末页
60/260
第6章 面向对象分析与设计
61/260
•模型元素
代表面向对象中的类,对象,关系和消息等概念,
是构成图的最基本的常用的元素。一个模型元素可以用
在多个不同的图中,无论怎样使用,它总是具有相同的
含义和相同的符号表示。
模型元素之间的连接关系也是模型元素,常见的
关系有关联(association)、泛化(generalization)、依
赖(dependency)和聚合(aggregation),其中聚合是关联
的一种特殊形式。这些关系的图示符号如图5.3所示。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
62/260
•模型元素
对象:类
类
主动类
属性
属性
属性
操作
操作
操作
用例
结点
状态
包
注解
关联
泛化
依赖
实现
目录
首页
上页
构件
供应接口
请求接口
下页
末页
第6章 面向对象分析与设计
63/260
关联和链
关联(association)是两个或多个类之间的一个关系。链
(link)是关联的具体体现。
关联的表示
如图(a)(b)所示,关联有二元关联(binary)、三元关联
(ternary)、多元关联(higher order)。
雇用
人员
项目
公司
三元关联的例
(语言)
(项目)
◆
C ++
CAD系统
雇用 (公司)
张涛
语言
人
二元关联的例
(人员)
◆
通大
(人)
李波
链的例子
链的例子
(b)三元关联
(a) 二元关联
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
关联的重数
Person
重数表示多少个对象与对方对象
1
相连接,常用的重数符号有:
*
“0..1”
表示零或1
Hobby
“0..*”或“*” 表示零或多个
“1..*”
表示1或多个
图6.5
“1,3,7”
表示1或3或7(枚举型)
重数的默认值为1。
64/260
Committee
0..2
目录
首页
上页
下页
Post
Person
带有多重性关联
Polygon
1
0..*
{ordered}
1..*
个人
(a)指定链接之间
有明确的顺序
4..* {ordered}
Point
(b)单向关联
图6.6
末页
◆
3..5
保险合同
有序关联与导航(导引)
在关联的多端标注{ordered}指明
这些对象是有序的(图6.6 )。
关联可以用箭头,表示该关联使
用的方向(单向或双向),称为导引或
导航(navigation)。
1..4
Year
第6章 面向对象分析与设计
65/260
通用机制(general mechanism)
用于表示其他信息,比如注释,模型元素的语义
等。另外,为了适应用户的需求,通用机制允许在不修
改基础元模型的前提下对UML作有限的变化。如提供了
扩展机制(Extensibility mechanisms) ,包括构造型
(Stereotype) 、 标 记 值 (Tagged value) 和 约 束
(Constraint).使用UML语言能够适应一个特殊的方法
(或过程),或扩充至一个组织或用户。
约束是以自然语言或特定形式语言的正文表示的语
义条件或限制,约束写在花括号中({}),如
{value≥0},{or}。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
66/260
版型是在基于现有各类模型元素的外形中定义模型元
素的新类型,它本质上是一种新元类(metaclass)。版
型可以扩展语义,但不能扩展原元模型类的结构。用《 》
标记版型,如《signal》。
标签值是贴在任何模型元素上的被命名的信息片。下
图给出了版型和标签值的应用实例。
《authorship》
author=“Frank Martin”
due=Dec.31,2009
《authorship》
Scheduling
版型和标签值
目录
首页
上页
下页
末页
tagged values
第6章 面向对象分析与设计
约
67/260
束
UML 中 提 供 了 一 种 简 便 、 统 一 和 一 致 的 约 束
(constraint),是各种模型元素的一种语义条件或限制。
一条约束只能应用于同一类的元素。
约束的表示
如果约束应用于一种具有相应视图元素的模型元素,它
可以出现在它所约束元素视图元素的旁边。
通常一个约束由一对花括号括起来({constraint}),花
括号中为约束内容。
如果一条约束涉及同一种类的多
个元素,则要用虚线把所有受约束的
元素框起来,并把该约束显示在旁边
(如或约束)。
目录
首页
上页
下页
Polygon
1
保险合同
0..*
{ordered}
4..* {ordered} 1..*
个人
Point
末页
约束
第6章 面向对象分析与设计
68/260
约束可分为:对泛化的约束、关联的约束
对泛化的约束
应用于泛化的约束,显示在大括号里,若有多个约束,
用逗号隔开。如果没有共享,则用一条虚线通过所有继承
线,并在虚线的旁边显示约束,如图所示:
Class A
Class A
{constraint 1,constraint 2}
Class B
Class C
Class D
{constraint 1,constraint 2}
Class B
Class C
图 对泛化的约束的两种表示方法
目录
首页
上页
下页
末页
Class D
第6章 面向对象分析与设计
69/260
对泛化有以下常用的约束:
1、complete: 说明泛化中所有子元素都已在模型中
说明,不允许再增加其它子元素。
2、disjoint: 父类对象不能有多于一个型的子对象。
3、incomplete: 说明不是泛化中所有子元素都已说明,
允许再增加其它子元素。
4、overlapping: 给定父类对象可有多于一个型的子
对象,表示重载。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
70/260
关联的约束
对关联有以下常用的约束:
1、implicit:该关联是概念性的,在对模型进行精化时不再用。
2、ordered:具有多重性的关联一端的对象是有序的。
3、changeable:关联对象之间的链(Link)是可变的(添加、
修改、删除)。
4、addonly:可在任意时刻增加新的链接。
5、frozen:冻结已创建的对象,不能再添加、删除和修改它
的链接。
6、xor: “或约束”,某时刻只有一个当前的关联实例。
人
帐号
{xor}
单位
对消息,链接角色和对象的约束
自定义约束
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
71/260
依赖
依赖关系描述的是两个模型元素(类,组合,用例
等)之间的语义上的连接关系,其中一个模型元素是独
立的,另一个模型元素是非独立的(或依赖的)。下图
表示类A依赖于类B的一个友元依赖关系。
类A
《友元》
类B
依赖的形式可能是多样的,针对不同的依赖
的形式,依赖关系有不同的变体(varieties)。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
72/260
⑴抽象(abstraction):从一个对象中提取一些特性,并用
类方法表示。
⑵绑定(binding):为模板参数指定值,以定义一个新的模
板元素。
⑶组合(combination):对不同类或包进行性质相似融合。
⑷许可(permission):允许另一个对象对本对象的访问。
⑸使用(usage):声明使用一个模型元素需要用到已存在的
另一个模型元素,这样才能正确实现使用者的功能(包括调
用、实例化、参数、发送)。
⑹跟踪(trace):声明不同模型中元素间的存在一些连接。
⑺访问或连接(access):允许一个包访问另一个包的内容。
⑻调用(call):声明一个类调用其他类的操作的方法。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
73/260
⑼导出(derive):声明一个实例可从另一个实例导出。
⑽友元(friend):允许一个元素访问另一个元素,不管被
访问的元素是否具有可见性。
⑾引入(import):允许一个包访问另一个包的内容,并为
被访问组成部分增加别名。
⑿实例(instantiation):关于一个类的方法创建了另一个
类的实例声明。
⒀参数(parameter):一个操作和它参数之间的关系。
⒁实现(realize):说明和其实之间的关系。
⒂精化(refine):声明具有两个不同语义层次上的元素之
间的映射。
⒃发送(send):信号发送者和信号接收者之间的关系。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
74/260
细化
有两个元素A和B,若B元素是A元素的详细描述,则称B,A
元素之间的关系为B元素细化A元素。
细化与类的抽象层次有密切的关系,在构造模型时要经
过逐步细化,逐步求精的过程。
如图6.12所示,类B是类A细化的结果。
人员
B
A
这是一个类
图6.12
图6.13
注释
注释用于对UML语言的元素或实体进行说明,解释和
描述。通常用自然语言进行注释。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
75/260
6.4 用例建模
用例建模是用于描述一个系统应该做什么的建模
技术,被广泛应用到了面向对象的系统分析中。用例
模型用用例图来描述。
用例图展示了各类外部执行者与系统所提供的用
例之间的连接。一个用例是系统所提供的一个功能的
描述,执行者是指那些可能使用这些用例的人或外部
系统,执行者与用例的连接表示该执行者使用了那个
用例。用例图给出了用户所感受到的系统行为,但不
描述系统如何实现该功能。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
76/260
用例驱动的系统分析与设计方法已成为面向对象
的系统分析与设计方法的主流。
图书馆业务用例图
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
77/260
任何一个涉及到系统功能活动的人都会用到用例
模型。
客户:用例模型指明了系统的功能,描述了系统能
如何使用。用例建模时客户的积极参与是十分重要的。
开发者:用例模型帮助他们理解系统要做什么,同
时为以后的其它模型建模、结构设计、实现等提供依
据。
集成测试和系统测试人员:根据用例来测试系统,
以验证系统是否完成了用例指定的功能。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
78/260
用例模型描述的是外部执行者(Actor)所理解的
系统功能。它描述了待开发系统的功能需求。
用 例 模型由用 例 图组成,用 例 图展示了执行者、
用例以及它们之间的关系。
用例通常用普通正文描述,也可用活动图来描述。
一个用 例 模型可由若干幅用例图组成。一幅用 例
图包含的模型元素有系统、执行者、用例,以及表示
它们间的不同关系,如关联、扩展、包含、泛化等。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
用例建模步骤
创建用例模型的步骤包括:
1.定义系统
2.确定执行者
3.确定用例
4.描述用例
5.定义用例间的关系
6.确认模型
目录
首页
上页
下页
末页
79/260
第6章 面向对象分析与设计
80/260
用例图
Telephone Catalog
check
status
Salesperson
n
《extend
》
place
order
《include》
《include》
Supply
Customer
Data
Request
Catalog
《include》
order
product
Arrange
Payment
Customer
Pay
cash
Arrange
Credit
Fill
order
Shipping Clerk
establish
credit
supervisor
电话订购系统用例图
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
一.确定执行者(Actor)
• 执行者是指与系统交互的人或其它系统
• 执行者代表一种角色,而不是具体的某个人
• 在图形上,执行者用人形图符表示。
参与者
执行者
目录
首页
上页
下页
末页
81/260
第6章 面向对象分析与设计
82/260
可以通过回答下列问题来确定执行者:
• 谁使用系统的主要功能(主执行者)?
• 谁需要从系统中得到对他们日常工作的支持?
• 谁需要维护、管理和维持系统的日常运行(副
执行者)?
• 系统需要控制哪些硬件设备?
• 系统需要与哪些其它系统交互?
• 哪些人或哪些系统对系统产生的结果(值)感
兴趣?
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
83/260
二、确定用例
1. 用例的特征
•用例捕获某些用户可见的需求,实现一个具体
的用户目标。
•执行者必须直接或间接地指示系统去执行激
活,用例将结果值反馈给执行者。
•用例必须具有功能上的完整的描述。
•用例是一个类,而不是实例,用例的实例称
为场景(scenario)。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
84/260
2.寻找用例
可以通过让每个执行者回答以下问题来寻找用例:
• 执行者需系统提供哪些功能?执行者需要做什么?
• 执行者是否需要读、创建、删除、修改或储存系统
中的某类信息?
• 执行者是否要被系统中的事件提醒,或者执行者是
否要提醒系统中某些事情?从功能观点看,这些事
件表示什么?
• 执行者的日常工作是否因为系统的新功能而被简化
或提高了效率?
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
85/260
另外还有一些不是目前的执行者回答的问题:
•系统需要哪些输入/输出?谁从系统获取信息?
谁为系统提供信息?
•与当前系统(可能是人工系统而不是自动化系
统)的实现有关的主要问题是什么?
对同一个项目,不同的开发者选取的用例数是不一
样的。例如一个10个人年规模的项目,有人选取了20个
用例,而在一类似的项目中,有人选用了100个用例。
似乎20个太少,而100个太多,希望在项目规模和
用例数之间保持均衡。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
86/260
3.用例的描述
用例通常用正文来描述,也可用活动图来描述 。
用例的正文描述应包括以下内容:
• 用例的目的:用例的最终目的是什么?它试图达到
什么?
• 用例是如何启动的:哪个执行者在什么情况下启动
用例的执行?
• 执行者和用例之间的消息流:用例与执行者之间交
换什么消息或事件来通知对方改变或恢复信息?描
述系统与执行者之间的主消息流是什么?以及系统
中哪些实体被使用或修改?
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
• 用例中可供选择的流:用例中的活动可根据条
件或异常(exception)有选择地执行。
• 如何通过给执行者一个值来结束用例:描述何
时可认为用例已结束.
目录
首页
上页
下页
末页
87/260
第6章 面向对象分析与设计
88/260
•执行者的简要描述
客户:向公司订购商品的人
客户代表:公司处理客户请求的雇员
库存系统:记录公司库存的软件
•用例的简要描述
订购货物:客户创建一个新的请求商品的订
单,并为那些商品付费
取消订单:客户取消一个已经存在的订单
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
89/260
• 用例的详细描述
前置条件和后置条件
前置条件和后置条件表示用例开始和结束的条件
事件流(flow of events)
事件流是一系列陈述句,它是从执行者的角度 看,
列出用例的各个步骤
用例描述中可以包含条件、分支和循环。
例如:订购货物用例的描述如下页所示。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
90/260
用例名称:订购货物
参与的执行者:客户、客户代表
前置条件:一个合法的客户已经登录到这个系统
事件流:
1. 当客户选择订购货物时,用例开始
2. 客户输入他的姓名和地址
3. 如果客户只输入邮编,系统将给出州和城市名
4. 当客户输入产品代码
a.系统给出产品描述和价格
b.系统往客户订单中添加该物品的价格
循环结束
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
91/260
5. 客户输入信用卡支付信息
6. 客户选择提交
7. 系统检验输入的信息,把该订单作为未完成的交易保
存,同时向记账系统转发支付信息。如果客户提交的
信息不正确,系统将提示客户修改。
8. 当支付确认后,订单就被标记上已经确认,同时返回
给客户一个订单ID,用例也就结束了。如果支付没有
被确认,系统将提示客户改正支付信息或者取消。如
果客户选择修改信息,就回到第5步;如果选择取消,
用例结束。
后置条件:如果订单没有被取消,它将保存在系统中,
并做上标记
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
92/260
其他需求
在用例中还可描述一些特殊的需求,这些需求常
常是非功能性需求,如可用性、安全性、可维护
性、负载、性能、自动防故障、数据需求等。
如订购货物用例的其他需求:
前置条件:(略)
事件流:(略)
特殊需求:
系统必须在一秒内响应客户的输入
后置条件: (略)
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
93/260
•事件流可分为两部分:
基本路径
基本路径是运转正常时的路径,是一系列没
有分支和选择的简单陈述句
可选路径
可选路径是指不同于基本路径而允许不同的
事件序列的路径。
对于明显有可能随时发生的事情来说,可选
路径非常有效。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
94/260
如订购货物用例的基本路径:
事件流:
基本路径
1. 当客户选择订购货物时,用例开始
2. 客户输入他的姓名和地址
3. 当客户输入产品代码时
a. 系统给出产品描述和价格
b. 系统往客户订单中添加该物品的价格
循环结束
4. 客户输入信用卡支付信息
5. 客户选择提交
6. 系统检验输入的信息,把该订单作为未完成的交易保存,
同时向记账系统转发支付信息
7. 当支付确认后,订单就被标记上已经确认,同时返回给客
户一个订单ID,用例结束
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
95/260
如果在订购货物用例中,客户可以在提交订单前随
时取消订单,其可选路径如下:
可选路径:
•在选择提交前的任何时候,客户都可选择cancel。这
次订购没有被保存,用例结束。
•在基本路径第6步,如果有任何不正确的信息,系统
提示客户去修改这些信息。
•在基本路径第7步,若支付没有被确认,系统将提示
客户改正支付信息或者取消。若客户选择修改信息,
就回到基本路径第4步;若选择取消,用例结束。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
96/260
三. 确定用例之间的关系
关系
说明
关联
执行者与他所参与的一个用例之间
的通信路径
扩展
扩展的用例到基本用例的一种关系,
它指出扩展的用例所定义的行为如何
插入到基本用例所定义的行为中。扩
展的用例通过模块化方式增量地修改
基本用例
目录
首页
上页
记号
下页
末页
《extend》
第6章 面向对象分析与设计
关系
说明
包含
从基本用例到另一个用例(称为包
含用例)的一种关系,它指出包含
用例定义的行为被包含在基本用例
所定义的行为中。基本用例能看到
包含用例,并依赖于执行包含用例
后的结果,但两者相互间不能访问
其它属性
记号
用例泛 一个一般用例与一个更特殊的用例
之间的关系,特殊用例可继承一般
化
用例的特征
目录
首页
上页
97/260
下页
末页
《include》
第6章 面向对象分析与设计
用例之间的关系
泛化:同一业务目的的不同技术实现
包含:提取公共交互,提高复用
扩展:“冻结”基用例以保持稳定
*通过关系提高用例复用
目录
首页
上页
下页
末页
98/260
第6章 面向对象分析与设计
99/260
用例之间的关系
泛化:同一业务目的的不同技术实现。
当多个用例共同拥有一种类似的结构和行为的
时候,可以将它们的共性抽象成为父用例,其他的
用例作为泛化关系中的子用例。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
100/260
包含是指基本用例会用到包含用例(inclusion),
具体地讲,就是将包含用例的事件流插入到基础用
例的事件流中。
包含用例是可重用的用例──多个用例的公共用
例。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
包含举例:
目录
首页
上页
下页
末页
101/260
第6章 面向对象分析与设计
102/260
扩展(extend)
将扩展用例的事件流在一定的条件下按照相应的
扩展点插入到基础用例中。
–基础用例不必知道扩
展用例的任何细节,
它仅为其提供扩展点。
–扩展用例的行为是否
被执行要取决于主事
件流中的判定点。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
扩展举例:
目录
首页
上页
下页
末页
103/260
第6章 面向对象分析与设计
104/260
用例之间的关系
•包含用例与扩展用例的区别
①相对于基础用例,扩展用例是可选的,而包含
用例则不是。
②如果缺少扩展用例,基础用例还是完整的,而
缺少包含用例,则基础用例就不完整了。
③扩展用例的执行需要满足某种条件,而包含用
例不需要。
④扩展用例的执行会改变基础用例的行为,而包
含用例不会。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
105/260
案 例
本案例实现一个简化了的银行储蓄账户管理系
统,该系统是在银行的柜台上对客户办理活期储蓄
业务。系统的需求陈述如下:
一个客户可以在多个银行中开设账户,一个客
户也可在同一银行中开设多个不同的账户。客户可
以通过银行职员进行开户、存款、取款、转账、注
销账户等活动。其中转账指客户将自己的某个账户
上的钱款转入同一银行的不同账户(称为银行内转
账)或转入不同银行的账户(称为银行间转账)。
系统管理员负责系统的账户管理及业务报表的生成。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
106/260
识别执行者
客户:到银行办理储蓄业务的人,负责输入
密码
银行职员(客户代理):银行工作人员,代
表客户进行储蓄业务的操作
银行职员(管理人员):银行工作人员,根
据客户的储蓄业务更新账户
管理员:银行计算机的管理人员,负责账户
的管理和业务报表的生成
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
107/260
识别用例
从系统的需求陈述可知,银行职员(客户代理)
需要系统提供开户、存款、取款、转账、注销账户
等功能,这些功能都包含了校验密码的功能。系统
管理员需要系统提供账户管理和报表生成功能。银
行职员(管理人员)则参与了账户管理中的更新账户
的功能。此外,转账功能可分为银行内转账和银行
间转账,可将它们设计成三个用例,其中银行内转
账用例和银行间转账用例都继承了基本转账用例。
据此分析,得到该系统的用例图如下图所示。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
开户
客户
《包含》
存款
校验密码
《包含》
取款
银行职员
(用户代理)
108/260
《包含》
银行间转账
注销
其它银行
转账
账户管理系统
银行内转账
银行职员
账户管
(管理人员)
理
报表生
成
系统管理员
银行储蓄账户管理系统
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
109/260
开户用例描述
用例名称:开户
参与的执行者:银行职员(客户代理),客户
前置条件:一合法的银行职员(客户代理)已登录到该系统
事件流:
1.当选择开户功能时用例开始
2.输入客户信息(姓名、地址、身份证号等)
3.从账户管理系统获取新的账号
4.请客户输入密码
5.请客户再次输入密码
6.如果两次密码不一致则回到第4步,否则继续
7.在账户库中添加新账户
8.打印存折,用例结束
后置条件:在账户库中增加了一个新账户,得到一张新存折
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
110/260
取款用例描述
用例名称:取款
参与的执行者:银行职员(客户代理)
前置条件:一合法的银行职员(客户代理)已登录到该系统
事件流:
基本路径:
1.当选择取款功能时用例开始
2.当输入客户信息(姓名、账号等)后
a)如果客户信息与账户不一致,显示错误信息,可以
重新输入或结束用例
b)如果该账户被冻结(如因挂失而冻结),显示冻结
信息并结束用例
3.输入并校验密码
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
111/260
4.输入取款金额,若该账户的余款小于取款金额,
显示错误信息,要求重新输入
5.打印取款单,交客户签字
6.建立取款事件记录,更新账户信息
7. 打印存折,用例结束
可选路径:
1.在第5步客户签字之前的任何时刻,客户可以取
消本次取款,用例结束
2.第3步校验密码时,如发现密码不一致,则重新
输入密码,或用例结束
后置条件:如果取款成功,客户账户中的余额被更
新(减少),否则余额不变。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
112/260
输入客户信息
[选择重新输入]
[不一致]
描
述
取
款
用
例
的
活
动
图
显示
错误信息
[一致]
[冻结]
[选择结束]
显示
冻结信息
[未冻结]
输入并校验密码
输入取款金额
[余额<取款额]
[余额≥取款额]
显示
错误信息
打印取款单
[客户不确认]
●
·
·
[客户确认]
建立取款记录
更新账户信息
打印存折
●
·
·
目录
首页
上页
下页
末页
●
·
·
第6章 面向对象分析与设计
113/260
6.5 静态建模
所谓静态建模是指对象之间通过属性互相联系,
而这些关系不随时间而转移。
类和对象的建模,是UML建模的基础。系统中的类
和对象模型描述了系统的静态结构,在UML中用类图和
对象图来表示。
UML的静态建模机制包括:用例图(Use case
diagram)、类图(Class diagram)、对象图(Object
diagram)、包图(Package diagram)、构件图
(Component diagram)、配置图(Deployment diagram)。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
114/260
类图由系统中使用的类以及它们之间的关系组成。
类之间的关系有关联、依赖、泛化、实现等。类图是
一种静态模型,它是其它图的基础。一个系统可以有
多张类图,一个类也可出现在几张类图中。
对象图是类图的一个实例,它描述某一时刻类图
中类的特定实例以及这些实例之间的特定链接。对象
图使用了与类图相同的符号,只是在对象名下附加下
划线,对象名后可接以冒号和类名,即
object-name:class-name
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
关联
类名
属性名 :类型
聚集
操作
组合
对象名 :类名
泛化
属性名 = 值
依赖
操作
实现
目录
首页
上页
下页
末页
115/260
第6章 面向对象分析与设计
116/260
类图和对象图
line
X1:real
Y1:real
X2:real
Y2:real
point
2..*
相交
0..*
L1: line
X: real
Y: real
X1=10
Y1=10
X2= -10
Y2= -10
类图
P1:point
X=0
Y=0
L2: line
X1= -10
Y1=10
X2=10
Y2= -10
y
L1
L2
L4
L3
P2
x
P1
L3: line
X1=10
Y1= 5
X2= -10
Y2= -5
P2:point
X=9
Y=4。5
L4: line
X1=9
Y1=5
X2=9
Y2=3
实例
对象图
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
117/260
确定类
1. 标识类
类 — 责 任 — 协 作 者 ( class—responsibility —
collaborator,简称CRC)技术来完成类的定义。
CRC是一组表示类的索引卡片,每张卡片分成三
部分,它们分别描述类名、类的责任和类的协作者。
责任是用来描述类的属性和操作,协作者描述为完成
该责任而提供信息的其他相关的类。
类名:
责任:
协作者:
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
118/260
确定和标识类包括发现潜在对象、筛选对象、为
对象分类,最后将同类型的对象抽象为类。
(1) 标识潜在的对象类
通常陈述中的名词或名词短语是可能的潜在对象,它
们以不同的形式展示出来,如:
与系统交互的角色:与管理者、工程师、销售;
系统的工作环境场所:车间、办公室;
概念实体、发生的事情或事件:报告、信息显示、信
函、信号;
部门、设备:班组、学校、汽车、计算机。
与系统有关的外部实体:其他系统、设备、人员等生
产或消费计算机系统所使用的信息。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
119/260
(2)筛选对象类,确定最终对象类
可以用以下选择特征来确定最终的对象:
⑴关键性:缺少这个对象信息,系统就不能;
⑵可操作性:潜在对象必须拥有一组可标识的操作,
它们可以按某种方式修改对象属性的值;
⑶信息含量:选择信息量较大的对象确定为最终对象,
只有一个属性的对象可以与其他同类对象合并为一个
对象;
⑷公共属性:可以为潜在的对象定义一组属性,这些
属性适用于该类的所有实例;
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
120/260
⑸公共操作:可以为潜在的对象定义一组操作,
这些操作适用于该类的所有实例;
⑹关键外部信息:问题空间中的外部实体和系统
必需生产或消费信息。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
121/260
对象和类还可以按以下特征进行分类:
⑴确切性:类表示了确切的事物(如键盘或传感器),还
是表示了抽象的信息(如,预期的输出);
⑵包含性:类是原子的(即不包含任何其它类),还是聚
合的(至少包含一个嵌套对象);
⑶顺序性:类是并发的(即拥有自己的控制线程),还是
顺序的(被外部的资源控制);
⑷完整性:类是易被侵害的(即,它不防卫其资源受外界
的影响),还是受保护的(该类强制控制对其资源的访问)。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
122/260
⑸持久性:类是短暂的(即它在程序运行期间被创建和
删除)、临时的(它在程序运行期间被创建,程序终止时
被删除)、还是永久的(它存放在数据库中)。
基于上述分类,CRC卡的内容可以扩充,以包含
类的类型和特征。
类名:
类的类型:(如:设备,角色,场所,……)
类的特征:(如:确切的,原子的,并发的,……)
责任:
协作者:
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
123/260
2. 标识责任
责任是与类相关的属性和操作。
⑴ 标识属性
属性表示类的稳定特征,即为了完成客户规定的目
标所必须保存的类的信息,一般可以从问题陈述中提取
出或通过对类的理解而辨识出属性。
⑵ 定义操作
操作定义了对象的行为并以某种方式修改对象的属
性值。操作可以通过对系统的过程叙述的分析提取出来,
通常叙述中的动词可作为候选的操作。类所选择的每个
操作展示了类的某种行为。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
124/260
3.标识协作者
一个类可以用它自己的操作去操纵它自己的属性,
从而完成某一特定的责任,一个类也可和其它类协作来
完成某个责任。如果一个对象为了完成某个责任需要向
其它对象发送消息,则我们说该对象和另一对象协作。
协作实际上标识了类间的关系。
为帮助标识协作者,可以检索类间的类属关系。如
果两个类具有整体与部分关系(一个对象是另一个对象
的一部分),或者一个类必须从另一个类获取信息,或
者一个类依赖于(depends-upon)另一个类,则它们间
往往有协作关系。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
125/260
4. 复审CRC卡
在填好所有CRC卡后,应对它进行复审。复审应
由客户和软件分析员参加,复审方法如下:
⑴参加复审的人,每人拿CRC卡片的一个子集。
注意,有协作关系的卡片要分开,即,没有一个人持
有两张有协作关系的卡片。
⑵ 将所有用例/场景分类。
⑶ 复审负责人仔细阅读用例,当读到一个命名的
对象时,将令牌(token)传送给持有对应类的卡片的
人员。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
126/260
⑷ 收到令牌的类卡片持有者要描述卡片上记录的
责任,复审小组将确定该类的一个或多个责任是否满
足用例的需求。当某个责任需要协作时,将令牌传给
协作者,并重复⑷。
⑸如果卡片上的责任和协作不能适应用例,则需
对卡片进行修改,这可能导致定义新的类,或在现有
的卡片上刻画新的或修正的责任及协作者。
这种做法持续至所有的用例都完成为止。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
127/260
属性的描述
UML中,描述一个属性的语法如下:
visibility attribute-name : type [multiplicity]
= initial-value{property-string}
attribute-name:表示属性名。
type(类型):用来指明属性名的类型。
initial-value(初值):在创建一个类的实例对象时,应
对其属性赋值,如果类中对某属性定义了初值,则该
初值可作为创建对象时该属性的默认值。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
128/260
visibility(可见性):表示该属性在哪个范围
内可见(即可使用),见下表:
符号
种类
语义
+
Public
(公共的)
任何能看到这个类的类都能看到
该属性
#
Protected
这个类或者它的任何子孙类都能
(受保护的) 看到该属性

Private
(私有的)

Package
(包的)
目录
只有这个类自身能看到该属性
在同一个包中的任何类能看到该
属性
首页
上页
下页
末页
第6章 面向对象分析与设计
129/260
multiplicity(重数):用来指出该属性可能的值的个数
以及它们的排列次序和唯一性。
值 的 个 数 写 在 方 括 号 ([ ]) 中 , 其 形 式 是 :
[minimum..maximum]。
maximum可以是“*”,表示“无限”。
当值的个数是单一值(如值的个数是3)时,可写成
[3..3]或简写成[3]。
典 型 的 写 法 有 : [0..1], [1](表 示 [1..1]), [*]( 表 示
[0..*]),[1..*],[1..3]。
当重数缺省时,隐含表示重数为1。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
130/260
当一个属性有多个值时,可在值的个数后面指明
值元素的排列次序和唯一性,排列次序和唯一性写在
花括号({ })中,可使用的关键字如下表所示,其默认
值是set,即无序且值元素唯一。
关键字
排列次序和唯一性
set
无序,值元素唯一
bag
无序,值元素不唯一
ordered set
有序,值元素唯一
list(or sequence)
有序,值元素不唯一
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
131/260
property-string(特征字符串):用来明确地指明该
属性可能的候选值,如{红,黄,绿}指出该属性可
枚举的值只能是红、黄、绿。
属性还可以定义为类属性(class attribute,C++
或Java中称为静态属性—static attibute) ,表示被这
个类的所有实例对象共享该属性的值。类属性是这个
类的名字空间中的全局变量。类属性用下划线来指明。
Job
类属性
实例属性
类操作
实例操作
maxCount:Integer=0
jobID:Integer
create(){jobID=maxCount++}
schedule()
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
Invoice
+ amount : Real
+ date : Date = Current date
+ customer : String
+ line: record[1..5]{set}
- administrator : String=“unspecified”
- maxCount : Integer = 0
- number of invoices : Integer
+ status : Status = unpaid {unpaid, paid}
“发票”类的属性
目录
首页
上页
下页
末页
132/260
第6章 面向对象分析与设计
133/260
操作的描述
UML中描述一个操作的语法如下:
Visibility operating-name(parameter-list):
return-type { property-string }
参数表是用逗号分隔的形式参数序列,描述一
个参数的语法如下:
Direction parameter-name :type
multiplicity= default -value
direction:用来指明参数信息流的方向,其参数
含义见下页表所示。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
134/260
方向的取值
关键字
语义
in
传递值的输入参数,该参数的改变对调用者
是无效的
out
输出参数,没有输入值,其最终值对调用者
是有效的
inout
一个可以修改的输入参数,其最终值对调用
者是有效的
return
调用的返回值,该值对调用者是有效的,语
义上与out参数没有不同,但在一串表达式中
使用时return是有效的
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
Figure
Size : Size
Pos : Position
+ draw()
+ resize( percentX : Integer=25 , percentY : Integer = 25 )
+ returnPos() : Position
目录
首页
上页
下页
末页
135/260
第6章 面向对象分析与设计
Rational Rose中的表示:
私
公
目录
首页
上页
下页
末页
136/260
第6章 面向对象分析与设计
137/260
类之间的关系
UML中类的关系有关联(association) 、聚集
(aggregation) 、泛化(generalization) 、 依赖(depending)
和实现 (realixation)。
关系
功能
关联
类实例间连接的描述
依赖
二个模型元素之间的一种关系
泛化
更特殊描述与更一般描述之间的一种
关系,用于继承和多态性类型声明
实现
规约(specification)与它的实现之
间的关系
目录
首页
符号
上页
下页
末页
第6章 面向对象分析与设计
138/260
1. 关联
描述了系统中对象之间或其它实例之间的连接。
关联的种类主要有二元关联,多元关联,受限关联,
聚集(aggregation)和组合(composition)。
(1)二元关联
二元关联表示为在两个类之间用一条直线连接,直
线上可写上关联名。
国家
有首都
城市
关联通常是双向的
雇佣
工作于
公司
目录
首页
上页
下页
末页
员工
第6章 面向对象分析与设计
139/260
关联的两端可加上重数(multiplicity),表示
该类有多少个对象可与对方的一个对象关联
公司
雇佣
*
*
员工
工作于
公司
雇佣
1
*
员工
工作于
关联的两端还可加上角色名(role)
人
驾驶
驾驶员
目录
首页
公车
上页
下页
末页
轿车
第6章 面向对象分析与设计
140/260
允许一个类与自身关联
公司
*
雇佣
*
工作于
员工
管理
1..*
工人
链是关联的实例
雇佣关联的链
公司A
公司B
公司A
公司C
目录
张三
李四
王五
张三
首页
上页
下页
老板
0..1
末页
第6章 面向对象分析与设计
141/260
保险单
0..1
表示为
表达
保险公司
1
有
1
0..*
涉及
保险合同
0..*
有
涉及
1..* 保险客户
妻子
人
丈夫
婚姻
一个类的对象在不同的关联中扮演不同的角色
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
142/260
(2)多元关联
三个或三个以上的类之间可以互相关联
程序语言
项目
程序员
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
CAD程序 :
项目
143/260
C : 语言
张三 :
开发人员
记账系统 :
项目
COBOL :
语言
三重关联对象图
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
144/260
⑶受限关联(qualified association):受限关联用
于一对多或多对多的关联。限定符(qualifier)用
来区分关联“多”端的对象集合,它指明了在
关联“多”端的某个特殊对象
目录
0..*
{ordered}
目录
文件
文件名
受限关联
有序关联
目录
首页
上页
下页
末页
文件
第6章 面向对象分析与设计
145/260
⑷ 聚集和组合
聚集(aggregation)是表示整体一部分关系的
一种关联,它的“部分”对象可以是任意“整体”
对象的一部分。
组
*
*
个人
成员
聚集
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
146/260
组合(composition):组合是一种更强形式的关
联,代表整体的组合对象有管理它的部分对象的特有责
任,如部分对象的分配和解除分配。组合关联具有强的
物主身份,即“整体”对象拥有“部分”对象,“部分”
对象生存在“整体”对象中。
窗口
*
正文
*
*
按钮
对话框
目录
首页
上页
下页
*
菜单
末页
第6章 面向对象分析与设计
147/260
⑸关联类 :UML中可以把关联定义成类,该
关联的每个链都是这个类的实例
用户
授权
*
*
授权
优先级
特权
开始一个时间片
关联类
目录
首页
上页
下页
末页
工作站
第6章 面向对象分析与设计
148/260
⑹导航性(navigability)
UML通过在关联端点加一个箭头来表示导航性,
导航能从该链的所有元组中得到给定的元组。
课程
*
选课
*
学生
(a)
课程
*
选课
*
学生
(b)
课程
*
选课
*
(c)
导航
目录
首页
上页
下页
末页
学生
第6章 面向对象分析与设计
149/260
导航性
符号
明确的含义




隐含的含义
未指明
双向可导航
右边可导航
左边未指明
只有右边可导航
只有右边可导航
右边未指明
左边不可导航
只有右边可导航
双向可导航
双向可导航
双向不可导航
双向不可导航
目录
首页
上页
下页
只有右边可导航
末页
第6章 面向对象分析与设计
150/260
2.泛化
• 泛化指出类间的“一般—特殊关系”
• 一般类定义了它的特殊类的公共属性和操作
• 对一般类扩展一些属性和/或操作后,可以特化
(specialize)成特殊类
• 一般类是特殊类的父类,特殊类是一般类的子类
• 特殊类可以继承一般类的属性和操作
• 子类可以定义自己的属性和操作,也可重新定义
父类中的操作,但重新定义的操作必须与父类具
有相同的操作特征(signature)
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
151/260
多边形
边数
顶角座标
显示
六边形
四边形
三角形
显示
计算面积
显示
显示
矩形
长
宽
泛化和继承
计算面积
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
152/260
3.实现:实现关系将一个模型元素(如类)连接到另一个
模型元素(如接口),后者(如接口)是行为的规约,而不
是结构,前者(如类)必须至少支持(通过继承或直接声明)
后者的所有操作。可以认为前者是后者的实现。
《interface》
choiceBlock
setDefault(choice:Choice)
getChoice():Choice
PopUpMenu
setDefault(choice:String )
getChoice(): String
RadioButtonArray
choice
1..*
Choice
setDefault(choice:Button)
getChoice():Button
choice
choice
1..*
Button
目录
首页
上页
下页
末页
1..*
String
第6章 面向对象分析与设计
153/260
4.依赖:依赖指出两个或多个模型元素之间语义
上的关系。它表示被依赖元素的变化会要求或指示依
赖元素的改变。
依赖关系用一个虚线箭头表示,箭头上可附加含关键
字的版型,关键字用来指明依赖的种类。
在 UML2 . 0 中 的 依 赖 种 类 如 下 : Access( 访 问 ) ,
bind(绑定),call(调用),create(创建),derive(派生),
instantiate( 实 例 化 ) , permit( 允 许 ) , realize( 实 现 ) ,
refine(精化),send(发送),substitute(替换),trace(追踪
依赖),use(使用)。
《use》
Box Office
Scheduling Engine
依赖关系
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
154/260
5.约束(constraint & derivation)
约束是用自然语言或特定的形式语言正文表示的
语义条件或限制,它用“{正文字符串}”形式表
示。约束可以附加到任何模型元素上。
成员
1..*
政治家
1
党派
{subset}
党派领袖
1
1
关联的约束关系
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
0..*
{ordered}
目录
保险
公司
*
保险
合同
保险
公司
*
155/260
文件
*
*
保险
合同
*
人
目录
首页
{xor}
人
公司
上页
下页
末页
*
公司
第6章 面向对象分析与设计
Article
Cost-price
Sales-price
/profit
{profit = Sales-price - Cost-price }
Invoice
+ amount : Real
+ date : Date = Current date
+ customer : String
+ specification : String
- administrator : String=“unspecified”
- number of invoices : Integer
+ status : Status = unpaid {unpaid, paid}
目录
首页
上页
下页
末页
156/260
第6章 面向对象分析与设计
157/260
案 例
• 图书馆业务功能主要由借书、还书、预约和取消
预约四个主要功能,这四种功能是由三层组成,
即:界面、控制和相应的书籍信息表。因此,本
功能模块可以抽象出如下类:
– 书实体类
– 读者实体类
– 借书操作界面类
– 还书操作界面类
– 预约图书操作界面类
– 书籍管理类 。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
158/260
绘制类图
• 步骤1.打开前面初步构建的UML模型文件;
• 步骤2.打开Rose中的逻辑视图(Logical View),选择
分析模型(analysis model)目录。并在其下创建一个子
目录并命名为:“图书馆业务功能” ,如图所示。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
159/260
• 步骤3.用鼠标右击“图书馆业务功能”在弹出来
的菜单中选择“New→Class diagram”项,创建类图。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
160/260
•步骤4.双击新建的类图,并点右边控件集中选
中的类并用鼠标在图中分别拖出上述类图。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
161/260
• 步骤5.设定上述各类的属性和操作(以读者信息类
为例)。
– 5.1 先用鼠标右击Reader类在弹出的下拉菜单中选择
“Open Specification”项弹出类属性窗体如图所示。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
162/260
–5.2 再点击“Attributes”选项,在弹出的窗体
中分别插入属性。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
163/260
–5.3 同理在打开的类属性窗口中选择“Operations”
项,并按上面步骤插入类的操作。
•步骤6.设各类的构造类型(以读者信息类为例)。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
包
164/260
图
包图由包和包之间的联系构成,它是维护和控制
系统总体结构的重要建模工具。
当对大型系统进行建模时,把那些语义相近并倾向
于一起变化的元素组织起来加入同一包,这样方便理
解和处理整个模型。同时也便于轻松地控制这些元素
的可见性,使一些元素在包外可见,一些元素是隐藏
在包内的。
设计良好的包是高内聚、低耦合的,并且对其内容
的访问具有严密的控制。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
165/260
包的名字
和其他建模的元素一样,每个包都必须有一
个区别于其他与其他包的名字。模型包是名字是
一个字符串,它可分为简单名(simple name)和
路径名(path name)。简单名是指包仅含一个简
单的名称,路径名是指以包所位于的外围包的名
字作为前缀的包名。
图形上,包是带有标签的文件夹。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
166/260
包拥有的元素
包是对模型元素进行分组的机制,它把模型元素
划分成若干个子集。包可以拥有UML中的其他元素,
包括类、接口、构件、节点、协作、用例和图,包甚
至还可以包含其他包。
包的作用不仅仅是为模型元素分组。它还为所拥
有的模型元素构成一个命名空间,这就意味着一个模
型包的各个同类建模元素不能具有相同的名字,不同
模型包的各个建模元素能具有相同的名字,因为它们
代表不用的建模元素。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
167/260
包的可见性
包的可见性用来控制包外界的元素对包内元素的
可访问权限。可见性可以分成3种。
公有访问(public):包内的模型元素可以被任何
引入了此包的其他包的内含元素访问。公有访问用前
缀于内含元素名字的加号(+)表示。缺省值为公有。
保护访问(protected):表示此元素能被该模型
包在继承关系上后继模式包的内含元素访问。保护访
问用前缀于内含元素名字的#号(#)表示。
私有访问(private):表示此元素可以被属于用一
包的内含元素访问。私有访问用前缀于内含元素名字
的减号(-)表示。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
168/260
引入与输出
在UML里,引入一个包中的元素可以单向的访
问另一个包中的元素。引入(import)关系用构造型
的import来修饰。包中具有公有访问权限的内含元素
称为输出(export)。
包间的泛化关系也像类那样遵循替代原则,特殊
包可以应用到一般包被使用的任何地方。包间还存在
另一种关系:引入和访问依赖,用于在一个包引入另
一个包输出的元素。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
建立包图的具体的做法如下:
⑴分析系统模型元素(通常是对象类),把概念
上或语义上相近的模型元素纳入一个包。
⑵对于每一个包,标出其模型元素的可视性(公
共、保护或私用)。
⑶确定包之间的依赖联系,特别是输入依赖。
⑷确定包之间的泛化联系,确定包元素的多态性
与重载。
⑸绘制包图。
⑹包图精化。
目录
首页
上页
下页
末页
169/260
第6章 面向对象分析与设计
保险单
填写界面
包
系统内部
保险单
客户
包的依赖
Oracle 界面
数据库界面
(abstract)
Sybasec界面
包的继承
图
目录
首页
包图
上页
下页
末页
170/260
5.4.3 包图
第6章 面向对象分析与设计
包图举例
财务子系统
数据库子系统
数据库操作
数据库接口
Oracle 接口
图
目录
首页
Sybasec接口
包图举例
上页
下页
末页
171/260
第6章 面向对象分析与设计
172/260
包图举例
订单获
取界面
AWT
订单获
取应用
订单
邮件发
送界面
用户接口包
邮件发
送应用
应用层包
顾客
目录
首页
上页
下页
问题域包
末页
第6章 面向对象分析与设计
用户接口
包图另一种划分方式
订单获
取界面
邮件发
送界面
AWT
用户
订单获
取应用
邮件发
送应用
问题域
订单
顾客
目录
首页
上页
下页
末页
173/260
第6章 面向对象分析与设计
6.6
174/260
动态建模
动态建模用来描述系统的动态行为,显示对象在系统运
行期间不同时刻的动态交互。UML中用状态机图、活动图、
顺序图和协作图来建立动态模型。
状态图:用来描述对象,子系统,系统的生命周期。
活动图:着重描述操作实现中完成的工作以及用例实例
或对象中的活动,活动图是状态图的一个变种。
顺序图:交互图,主要描述对象之间的动态合作关系以
及合作过程中的行为次序,常用来描述一个用例的行为。
协作图:用于描述相互合作的对象间的交互关系,它描
述的交互关系是对象间的消息连接关系。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
175/260
6.6.1 状态机图
状态机图通常是对类描述的补充,它说明该
类的对象所有可能的状态,以及哪些事件将导致
状态的改变。
状态机图描述了对象的动态行为,是一种对
象生存周期的模型。
一个状态图包括一系列的状态以及状态之间
的转移。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
176/260
状态名
状态变量
起始状态
迁移
活动
状态
状态机图的基本符号
目录
首页
上页
下页
末页
结束状态
第6章 面向对象分析与设计
177/260
状 态
状态由状态名、状态变量和活动三部分组成。
状态变量是状态机图所显示的类的属性,也可
以是临时变量。
活动部分列出了处于该状态时要执行的事件和
动作。有3个标准事件:
entry事件用于指明进入该状态时的特定动作。
exit事件用于指明退出该状态时的特定动作。
do事件用于指明在该状态中时执行的动作。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
178/260
说明:
所有对象都具有状态,状态是对象执行了一系
列活动的结果。当某个事件发生后,对象的状态将
发生变化。
状态图中定义的状态有:初态、终态、中间状
态、组合状态、历史状态等。
一个状态图只能有一个初态,而终态可以有多
个,也可以没有终态。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
179/260
• 活动区中事件的语法如下:
event-nameopt  (argument list ) opt
[guard-condition] opt /activity-expressionopt
其中,事件名可以是包括三个标准事件
(entry,exit,do)在内的任何事件,参数表表示该
事件所需的参数,警戒条件是一布尔表达式,动
作表达式是该事件将被执行的动作。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
login
login time=current time
entry/type “login”
do/get use_name
do/get password
help/display help
exit/login(use_name,password)
login状态
目录
首页
上页
下页
末页
180/260
第6章 面向对象分析与设计
181/260
画状态机图的步骤
⑴列出对象具有的所有状态
状态分为起始状态、结束状态和中间状态。一张状态机
图可以有一个起始状态和若干个(可以为0)结束状态。
⑵标识导致状态转换的事件
当一个对象接收到某个事件时,会导致从一个状态转换
到另一个状态,称为状态迁移(transition)。
⑶为状态和迁移定义状态变量和动作
在状态迁移和/或处于某个状态中时都可能需要执行一些
相应的动作,综合这些动作,使得对象完成相应的功能。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
182/260
Moving up
go up(floor)
On
first floor
do/moving to floor
arrived
Moving to
First floor
Moving down
do/moving to floor
arrived
arrived
Idle
timer=0
do/increase timer
go down (floor)
[timer=time-out]
电梯升降的状态机图
目录
首页
上页
下页
末页
go up(floor)
第6章 面向对象分析与设计
idle
Coins in(amount)/
Set balance
183/260
Collecting money
Coins in(amount)/
add to balance
Cancel/
refund Coins
[item empty]
Select(item)
[change < 0]
test and compute
Do:test item and
compute change
[change = 0]
[change > 0]
Do:dispense item
Do:make change
自动售货机状态
机图
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
184/260
状态迁移
1. 状态迁移
引起状态迁移的原因通常有两种:
当标在迁移箭头上的事件出现时会引起状态的
迁移。此时,首先执行引起迁移的事件中的动作,
然后迁移到新的状态,执行新状态中的内部动作
(包括entry、exit、do以及用户定义的动作)。在
执行do或用户定义的动作时,可以被外部的事件
(将导致该状态的迁移)中断,但entry动作和exit
动作是不能被中断的,并且它们总是要执行完的。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
• 当状态机图中相应的迁移上未指明事件时,
表示当位于迁移箭头源头的状态中的内部动
作(包括entry、exit、do以及用户定义的动
作)全部执行完后,该状态迁移被自动触发。
目录
首页
上页
下页
末页
185/260
第6章 面向对象分析与设计
idle
Coins in(amount)/
Set balance
186/260
Collecting money
Coins in(amount)/
add to balance
Cancel/
refund Coins
[item empty]
Select(item)
[change < 0]
test and compute
Do:test item and
compute change
[change = 0]
[change > 0]
Do:dispense item
Do:make change
自动售货机状态
机图
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
187/260
状态迁移的语法如下:
事件 [条件] / 动作表达式 发送子句
说明:
●事件:指已发生并可能引发某种活动的一件事;
●[条件]:由方括号围起的关系或逻辑表达式;
●动作表达式:一个触发状态迁移时可执行的过程
表达式;
●发送子句:动作的一个特例,说明调用的事件名
(操作)是哪个对象的。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
188/260
Moving up
go up(floor)
On
first floor
do/moving to floor
Moving down
do/moving to floor
arrived
arrived
Idle
timer=0
do/increase timer
go down (floor)
[timer=time-out]/go down (first floor)
电梯升降的状态机图
目录
首页
上页
下页
末页
go up(floor)
第6章 面向对象分析与设计
189/260
事 件
事件是指已发生并可能引发某种活动的一件事
类
Digital_Watch
mode_button()
inc()
inc/hours := hours + 1
状态机图
Display
Set hours
mode_button
do/display
current time
inc/minutes := minutes + 1
mode_button
do/display
minutes
do/display hours
mode_button
数字手表类及其状态机图
目录
首页
上页
Set minutes
下页
末页
第6章 面向对象分析与设计
190/260
事件的种类
事件类型
描述
调用事件
call event
改变事件
change event
信号事件
signal event
时间事件
time event
收到一条被一个对象外部同步调用的
请求
布尔表达式值的改变
收到供对象间异步通信用的一个外部
的、被命名的信号(实体)
到达一个绝对时间或经过一段相对的
时间量
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
191/260
Call event的语法格式如下:
事件名 ( [逗号分隔的参数列表] )
例:
Change event用关键字when表示。例
Change event和警戒条件(guard condition)的区别:警
戒条件只在所相关的事件出现后计算一次,如果值为
false,则不进行状态转移。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
Time event用关键字after或when表示。
例:
Signal event的语法格式和Call event一样。
信号事件是一个异步事件,调用事件一般是一个
同步事件。
目录
首页
上页
下页
末页
192/260
第6章 面向对象分析与设计
193/260
状态机图之间发送的消息
状态机图之间可通过动作(如在发送子句中指明接收
者)或图间的虚线箭头向其他状态机图发送消息。
当采用虚线箭头时,状态机图必须画在矩形框中。
在图间的消息箭头有两种画法:
– 从表示源对象的状态机图中的状态迁移上画虚线箭头到
表示目标对象的状态机图的边框上;
– 在两个状态机图的边框间画虚线箭头,表示源对象在其
执行期间的某时刻发送该消息。
在状态机图之间发送消息时,在目标对象的状态机图
中应画有一个捕获这个消息的相应的迁移。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
194/260
Remote Control
On()
Off
On
Off()
Play()
On()
Stop()
Off ()
Play()
Stop()
CD Player
On()
Off
Play()
On/Stop
On/Play
Off()
Stop()
Off()/Stop()
状态机图之间的消息发送
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
195/260
组合状态和子状态
• 子状态(substate)是嵌套在另一状态中的状态。
• 一个含有子状态的状态被称作组合状态(composite
state) 。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
196/260
说明:
• 组合状态中也有初始状态和终结状态。
• 从源状态可以转移到组合状态本身,也可以
直接转移到组合状态中的子状态。
• 子状态之间可分为“or”关系和“and”关系两
种。“or”关系说明在某一时刻仅可到达一个
子状态,“and”关系说明组合状态中在某一
时刻可同时到达多个子状态。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
例1:子状态之间“or”关系的例子。
例2:子状态之间“and”关系的例子。
目录
首页
上页
下页
末页
197/260
第6章 面向对象分析与设计
198/260
历史指示器
历史指示器用来记忆内部的状态,用里面
标有H字母的圆圈表示。
使用历史状态,可以记住从组合状态中退出
时所处的子状态,当再次进入组合状态时,可
直接进入到这个子状态,而不是再次从组合状
态的初态开始。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
•H和H*的区别:
–H只记住最外层的组合状态的历史。
–H*可记住任何深度的组合状态的历史。
•例:历史状态的例子。
目录
首页
上页
下页
末页
199/260
第6章 面向对象分析与设计
状态图的工具支持
• 正向工程:根据状态图生成代码。例:
• 所生成的代码示例:
目录
首页
上页
下页
末页
200/260
class MessageParser {
else
第6章 面向对象分析与设计
201/260
public boolean put(char c) {
body.append(c);
switch (state) {
}
case Waiting:
return false;
if (c == '<') {
}
state = GettingToken;
public StringBuffer getToken() {
token = new StringBuffer();
return token;
body = new StringBuffer(); }
}
public StringBuffer getBody() {
break;
return body;
case GettingToken :
}
if (c == '>')
private final static int Waiting = 0;
state = GettingBody;
private final static int GettingToken = 1;
else
private final static int GettingBody = 2;
token.append(c);
private int state = Waiting;
break;
private StringBuffer token, body;
case GettingBody :
}
if (c == ';') {
state = Waiting;
return true; }
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
202/260
6.6.2 活动图
•活动图是是状态图的特例,由状态图变化而来的,活
动图中一个活动结束后将立即进入下一个活动(在状态
图中状态的转移可能需要事件的触发)。
•活动图用来描述完成一个操作所需要的活动,或者是
一个用例实例(场景)的活动。
•活动图中的状态称为动作状态,用圆角矩形表示,动
作状态之间的迁移用箭头表示,迁移上可以附加警戒
条件、发送子句和动作表达式。
•与状态机图不同的是,活动图中动作状态之间的迁移
不是靠事件触发的,当动作状态中的活动完成时迁移
就被触发。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
目录
首页
上页
下页
末页
203/260
第6章 面向对象分析与设计
204/260
•每个泳道代表一个责任区,泳道名放在矩形区的顶端。
通常根据责任把活动组织到不同的泳道中,它能清楚
地表明动作在哪里执行(在哪个对象中。
•一个动作迁移可以分解成二个或多个导致并行动作的
迁移,若干个来自并行活动的迁移也可以合并成一个
迁移。在活动图中用黑体线来表示迁移的分解和合并。
•活动图中可以表示对象,对象用对象符号(矩形)表
示,它可作为活动的输入或输出(用虚线箭头连接),
也可展示一个对象受一特定动作的影响(用动作和对
象之间的虚线表示)。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
Displayer
205/260
Sampler
Sampler.Run(channel,frequency)
Initiate
Updating
displayer
Measured
value
Measuring
泳道
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
• 活动图中可以描述信号的发送和接收
CustomerWindow.PrintAllCustomers( )
Show
MessageBox
“Printing” on
screen
aPrinter:Printer
Print
Create postscript
file
Print( file )
Print( file )
Remove
MessageBox
活动图中的信号发送和接收
目录
首页
上页
下页
末页
206/260
第6章 面向对象分析与设计
207/260
• 活动图还可以用来描述用例
收到订单
取消并
退回订单
付款认可
[未付款]
[已付款]
*[对每一订单项]
检查
订单项
[有货]
制作并发放
提货单
[缺货]
制作并发放
缺货单
更新库存
描述用例的活动图
目录
首页
上页
下页
末页
制作并发放
采购单
第6章 面向对象分析与设计
208/260
活动图与状态图比较
•1.活动图和状态图描述的重点不同:
–活动图描述的是从activity到activity的控制流,而
状态图描述的是对象的状态及状态之间的转移。
•2.活动图和状态图使用的场合不同:
–对于以下几种情况可以使用活动图:
•分析用例
•理解涉及多个用例的工作流
•处理多线程应用
–对于下面的情况要使用状态图:
•显示一个对象在其生命周期内的行为。
说明:若要显示多个对象之间的交互情况,可用交互图。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
209/260
6.6.3 顺序图(sequence diagram)
交互图(interaction diagram)是一种详细表示对
象之间以及对象与系统外部的参与者(actor)之间动态
联系的图形文档,有顺序图和协作图两种形式。
交互图常常用来描述一个用例的行为,显示该用例
中所涉及的对象和这些对象之间的消息传递情况。
顺序图和协作图从不同的角度表达了系统中的交互
和系统的行为,它们之间可以相互转化。
顺序图着重描述对象按照时间顺序的消息交换,协
作图着重描述系统成分如何协同工作。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
210/260
顺序图用来描述对象间的交互行为,它关注于消息的
顺序,即对象间消息的发送和接收的顺序。顺序图还揭示
了一个特定场景的交互,即系统执行期间发生在某时间点
的对象之间的特定交互。
适合于描述实时系统中的时间特性和时间约束。
顺序图有两个坐标,垂直坐标表示时间(从上到下),
水平坐标表示一组对象(用对象框表示)。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
Sequence图中的组成元素
• 顺序图中的一些主要元素:
––
––
––
––
Object (包括actor实例)
Lifeline (生命线)
activation(激活期)
Message
目录
首页
上页
下页
末页
211/260
第6章 面向对象分析与设计
• sequence图和collaboration图描述的是
对象之间的消息发送关系,而不是类之间
的关系。
• 在顺序图中并不包括系统中的所有类的对
象。也有可能某些对象属于同一个类。
• 交互图中的对象的常见命名方式:
显示对象名和类名 只显示类名
目录
首页
上页
只显示对象名
下页
末页
212/260
第6章 面向对象分析与设计
213/260
生命线表示对象存在的时间,在顺序图中生命线表
示为从对象图标向下延伸的一条虚线。
activation(激活期)表示对象执行一个动作的期间,
也即对象激活的时间段。激活画成对象生存线上的一个
长方形框,表示该对象可能在执行自己的代码,可能在
等待另一对象的返回。
对象之间的消息发送用生命线之间的消息箭头表示。
按垂直坐标从上到下的次序读顺序图,可以观察到
随时间的前进消息通信的顺序。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
电话线
呼叫方
呼叫方拿起受话器
拨号音开始
拨数字(2)
拨号音结束
拨数字(2)
拨数字(8)
拨数字(2)
拨数字(1)
铃声
电话振铃
应叫方摘机
停止振铃
电话接通
铃声消失
电话接通
呼叫方挂机
电话被切断
目录
电话被切断
应叫方挂机
首页
上页
下页
末页
214/260
应叫方
第6章 面向对象分析与设计
215/260
消息(message)
顺序图中描述消息的语法如下:
attribute = name (argument-list):return-value
其中:attribute是生命线的属性(对象名),用以存储
返回值。name是消息名(信号或操作名)。argument-list
是一个参数值的表,每个参数值可有下列形式之一:
argument-value
parameter-name=argument-value
–
当参数值是“–”时,表示任何参数值都与模型一致。
name (argument-list) 可以用“*”替代,此时,它
表示任何消息都是与模型一致的。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
216/260
•消息的类型:在UML 1.4以上版本的规范说明中
消息分调用消息,异步消息,返回消息三种。
–其它消息类型:如阻止(balking)消息,超时
(time-out)消息等为UML核心的扩充。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
217/260
• 调用消息(Procedure call)。调用消息的发送
者把控制传递给消息的接收者,然后停止活动,
等待消息接收者放弃或返回控制。
• 调用消息也可以用来表示同步的意义。
例:调用消息的表示符号。
说明:
1. 调用消息的接收者必须是一个被动对象(passive object),
即它是需要通过消息驱动才能执行动作的对象。
2. 一般调用消息必有一个配对的返回消息。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
218/260
•异步消息(asynchronous):异步消息的发送者通
过消息把信号传递给消息的接收者,然后继续
自己的活动,不等待接收者返回消息或控制。
例:异步消息的表示符号。
UML 1.3中的异步消息
UML 1.4/1.5中的异步消息
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
219/260
• 返回消息(return):从过程调用返回。
例:返回消息的表示符号。
• 如果是从过程调用返回,则返回消息是隐含包括的,
所以返回消息可省略。
• 对于非过程调用,如果有返回消息,必须明确表示
出来。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
220/260
•Rose中的消息类型:分简单消息,同步消息,阻止消息,
超时消息,调用消息,异步消息和返回消息。
•可在消息的specification窗口中指定消息的类型。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
221/260
• 阻止(balking)消息。消息发送者发出消息给
接收者,如果接收者无法立即接收消息,则发
送者放弃这个消息。
例:阻止消息的表示符号。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
222/260
• 超时(time-out)消息。消息发送者发出消息给
接收者并等待指定时间,如果接收者无法在指
定时间内接收消息,则发送者放弃这个消息。
例:超时消息的表示符号。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
Some concepts used in a sequence diagram
循环
条件
返回消息
创建对象
目录
首页
上页
下页
末页
223/260
第6章 面向对象分析与设计
224/260
建立sequence图的步骤
1.确定交互过程的上下文(context);
2.识别参与交互过程的对象;
3.为每个对象设置生命线,即确定哪些对象存在于整个交
互过程中,哪些对象在交互过程中被创建和撤销;
4.从引发这个交互过程的初始消息开始,在生命线之间从
顶到下依次画出随后的各个消息;
5.如果需要表示消息的嵌套,或/和表示消息发生时的时间
点,则采用FOC;
6.如果需要说明时间约束,则在消息旁边加上约束说明;
7.如果需要,可以为每个消息附上前置条件和后置条件。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
顺序图常见问题分析
• 顺序图中消息的循环发送
– 在消息名字前加循环条件
例:
1.1 *[ for all order lines]: message1()
2.1 *[i:=1..n]: message2()
目录
首页
上页
下页
末页
225/260
第6章 面向对象分析与设计
• 顺序图中消息的条件发送
1. 在消息名字前加条件子句;
2. 使用文字说明;
3. 分成多个Sequence Diagram。
例:
目录
首页
上页
下页
末页
226/260
第6章 面向对象分析与设计
• 顺序图中时间约束的表示
– 用constraint(约束)来表示。
例:
目录
首页
上页
下页
末页
227/260
第6章 面向对象分析与设计
• 顺序图中递归的表示
– 利用嵌套的FOC表示
例1. 单个对象自身的递归。
目录
首页
上页
下页
末页
228/260
第6章 面向对象分析与设计
例2. 多个对象间相互递归调用的表示。
目录
首页
上页
下页
末页
229/260
第6章 面向对象分析与设计
230/260
带条件和分支的顺序图
消息上可附加条件,当条件为真时消息才被发送或接
收。条件可用于描述分支,当几个消息箭头上的条件互斥
时,表示某一时刻只有一个消息被发送。如果条件不是互
斥的,则消息会并行地发出。
Print (file)
:Computer
:Printer Server
print (file)
:Printer
[ printer free]
print(file)
[printer busy]
Store ( file )
带分支的
顺序图
目录
首页
上页
下页
末页
:Queue
第6章 面向对象分析与设计
231/260
顺序图中可以用标记来定义循环和约束。
Print (ps-file)
:Computer
:Printer Server
Print(ps-file)
a
{b-a<5 sec}
b
{b'-b<1 sec}
b'
Print (ps-file)
顺序图中的标记
目录
首页
上页
下页
末页
:Printer
第6章 面向对象分析与设计
232/260
顺序图中还可出现递归,即一个对象发消息给自
身,这种消息通常是同步的。
op1 ( )
C1 : C
D1 : D
D2 : D
op2 ( )
send message op2
until…
op3 ( )
op4 ( )
顺序图中的循环标记
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
233/260
创建对象和对象的消亡
一个对象可以通过一条消息创建另一个对象,
被创建的对象可在创建它的地方(垂直时间轴上)
画一个对象符号。当对象消亡时,在图中用一个
×符号表示。此时对象的生命线仅画到消亡的点
上。创建或消亡一个对象的消息通常是同步消息。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
NewCustomer(Data)
234/260
:CustomerWindow
Customer(Data)
:Customer
DeleteCustomer()
创建对象和删除对象
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
235/260
6.6.4 协作图
顺序图清晰地展示了时间顺序,但不明确
显示对象之间的关系;协作图清晰地展示了对
象间的关系,但消息顺序和并发线程必须通过
顺序号来指明。
协作图包含一组对象和链(link),用于描述
系统的行为是如何由系统的成分协作实现的。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
236/260
消息流
协作图中描述消息的语法如下:
seguence-expressionopt message
其中:message与顺序图中消息的语法相同,
Sequence-expression的语法如下:
integer iteration-expressionopt
或
name iteration-expressionopt
其中integer是指定消息顺序的顺序号,如:1、1.1、
1.2、2、2.1等。这种顺序号描绘了消息的顺序和嵌
套关系。如果是同步消息,则嵌套地调用操作并返回。
name表示并行的控制线程,如1.2a和1.2b是并行发送
的并发消息。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
237/260
iteration-expression表示有条件地或重复地执行,
它有如下两种形式:
*[iteration-clause] (表示重复)
[condrtion-clause]
(表示分支)
这里iteration-clause是重复条件(循环执行的条件),
即循环执行,如1.1*[x=1..10]:dosomething( )。
第二种形式中的condition-clause用于指定分支,如
[x < 0],[x >= 0],表示仅执行条件为真的分支(发
送的消息连接到那个分支)。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
控制电梯运行的通信图
目录
首页
上页
下页
末页
238/260
第6章 面向对象分析与设计
239/260
print(ps-file)
: computer
1:print(ps-file)
[printer free]
1.1: print(ps-file)
: printerserver
: printer
带警戒条件的通信图
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
240/260
协作图中对象的生存期
在通信图的对象框中,可用{new}或{destroyed}
表示该对象在协作期间被创建或消亡。{transient}
则表示对象在同一个协作期间被创建并消亡。
[free memory]1:Create()
NewCustomer()
:Customer{new}
:MainWindow
{parameter}
2:Create()
3: Show(Customer)
:CustomerWindow
{transient}
3.1:Update(data)
协作期间对象的创建或消亡
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
241/260
6.7 物理体系结构建模
系统的体系结构用来描述系统各部分的结
构、接口以及它们用于通信的机制。
物理体系结构涉及系统的详细描述,它显
示了硬件的结构,包括不同的结点和这些结点
之间如何连接,它还图示了代码模块的物理结
构和依赖关系,并展示了对进程、程序、构件
等软件在运行时的物理分配。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
242/260
物理体系结构应回答以下问题:
⑴类和对象物理上位于哪个程序或进程?
⑵程序和进程在哪台计算机上执行?
⑶系统中有哪些计算机和其它硬件设备?它们
如何相互连接?
⑷不同的代码文件之间有什么依赖关系?如果
一个指定的文件被改变,那么哪些其它文件要重新
编译?
UML中物理体系结构用构件图、内部结构图
和部署图来描述。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
243/260
6.7.1 构件图
构件图显示构件类型的定义、内部结构和依赖。
构件是系统设计的模块化部分,它给出一组外部的接
口,而隐藏了它的实现。在系统中满足相同接口的构
件可以自由地替换。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
244/260
说明:
• 构件图是对OO系统的物理方面建模的两个
图之一。
• 构件图显示一组构件以及它们之间的相互
关系。
• 构件图可以显示软构件之间的依赖关系,
可以用来显示编译、链接或执行时构件之
间的依赖关系。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
245/260
构件的分类
•一般说来,构件就是一个实际文件,可以有以
下几种类型:
(1) deployment component, 如dll文件, exe文件,
COM+对象, CORBA对象, EJB, 动态Web页, 数据库
表等。
(2) work product component,如源代码文件,数
据文件等,这些构件可以用来产生deployment
component。
(3) execution component,系统执行后得到的构件。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
246/260
• 构件和类之间的不同点:
(1) 类是逻辑抽象,构件是物理抽象,即构件可
以位于节点(node)上。
(2) 构件是对其它逻辑元素,如类,协作
(collaboration)的物理实现。
(3) 类可以有属性和操作;构件通常只有操作,
而且这些操作只能通过构件的接口才能使用。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
• 构件和接口之间的两种关系:dependency和
realization。
例:
dependency
realization
说明:使用接口的是依赖关系
实现接口的是实现关系。
目录
首页
上页
下页
末页
247/260
第6章 面向对象分析与设计
构件图的一些例子
例1:对Source Code建模的例子。
目录
首页
上页
下页
末页
248/260
第6章 面向对象分析与设计
例2:对executable release建模的例子
(系统的一部分)。
目录
首页
上页
下页
末页
249/260
第6章 面向对象分析与设计
例3. 对physical database建模的例子。
目录
首页
上页
下页
末页
250/260
第6章 面向对象分析与设计
例4. 对adaptable system建模的例子。
目录
首页
上页
下页
末页
251/260
第6章 面向对象分析与设计
252/260
6.7.2 部署图
部署图也称配置图,用来描述系统硬件的物理
拓扑结构以及在此结构上执行的软构件。
部署图描述了处理器、设备和软件构件运行
时的体系结构。在这个体系结构上可以看到某个
结点上在执行哪个构件,在构件中实现了哪些逻
辑元素(类、对象、协作等),最终可以从这些
元素追踪到系统的需求分析(用例图)。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
253/260
部署图的基本元素有结点、连接、构件、对象、
依赖等。
结点是运行时的计算资源,通常计算资源至少有
一个存储器和良好的处理能力,如计算机、设备等。
结点既可看作类型,也可看作实例。结点用三维立方
体表示,中间写上结点名,当结点表示实例时,名字
应加下划线。结点通过版型来区分不同种类的资源,
如《computer》。
结点之间的关联表示通信路径,在UML中称为连接
(Connection)。可用版型来区分不同种类的通信路径,
如《TCP/IP》。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
ClientA:
Compaq Pro PC
254/260
《TCP/IP》
Application
Server;
Silicon Graphics
O2
《DecNet》
《TCP/IP》
ClientB:
Compaq Pro PC
结点之间的通信连接
目录
首页
上页
下页
末页
Database
Server:
VAX
第6章 面向对象分析与设计
255/260
在结点中可以包含制品(artifact),制品是一个
物理实现单元,如文件。可以用版型来区分不同种
类的制品。如果一个制品实现了一个构件或其它类,
可以从制品到实现它的构件之间画一虚线箭头,并
在箭头上附加关键词《manifest》,这种关系称为
“体现” 。
目录
首页
上页
下页
末页
第6章 面向对象分析与设计
Server:Bank server
《database》
account DB
《artifact》
update
Transaction.jar
《manifest》
Transaction
Client:ATM Kiosk
《artifact》
ATM-GUI.jar
部署图
目录
首页
上页
下页
末页
256/260
第6章 面向对象分析与设计
部署图的一些例子
例1:PC和外设及ISP的连接的部署图的例子。
目录
首页
上页
下页
末页
257/260
第6章 面向对象分析与设计
例2:对fully分布式系统建模的例子。
目录
首页
上页
下页
末页
258/260
第6章 面向对象分析与设计
例3:课程注册系统中的部署图。
目录
首页
上页
下页
末页
259/260
第6章 面向对象分析与设计
260/260
教学小结
• 面向对象方法已成为主流的软件开发方法,受到软件人
员的广泛重视。从20世纪80年代到20世纪90年代期间出
现了许多面向对象方法,这些方法使用不同的术语和图
形符号,给面向对象的方法的应用造成了混乱。UML
的诞生统一了面向对象的术语和图形符号,促进了面向
对象方法的应用。
• 本章在介绍了面向对象的基本概念之后,先介绍面向对
象分析和设计的一般过程,然后以最新的UML2.0为标
准详细介绍面向对象分析和设计的建模,主要包括用况
建模、静态建模、动态建模和物理体系结构建模。
目录
首页
上页
下页
末页