文档库 最新最全的文档下载
当前位置:文档库 › 完整word版,UML各种图画法总结,推荐文档

完整word版,UML各种图画法总结,推荐文档

完整word版,UML各种图画法总结,推荐文档
完整word版,UML各种图画法总结,推荐文档

一.用例图

用例模型是把应满足用户需求的基本功能(集) 聚合起来表示的强大工具。

用例模型的基本组成部件是用例角色和系统。

引入用例的主要目的是:

确定系统应具备哪些功能这些功能是否满足系统的需求开发者与用户协商达成共识的东西

为系统的功能提供清晰一致的描述,以便为后续的开发工作打下良好的交流基础,方便开发人员传递需求的功能

为系统验证工作打下基础通过验证最终实现的系统能够执行的功能是否与最初需求的功能相一致保证系统的实用性

从需求的功能用例出发提供跟踪进入系统中具体实现的类和方法检查其是否正确的能力特别是为复杂系统建模时常用用例模型构造系统的简化版本(也就是精化系统的变化和扩展能力使系统不要过于复杂)然后利用该用例模型跟踪对系统的设计和实现有影响的用例简化版本构造正确之后通过扩展完成复杂系统的建模

图示用例图时既要画出三种模型元素,同时还要画出元素之间的各种关系(通用化关联依赖)

用例代表的是一个完整的功能。

如何发现用例

实际上从识别角色起发现用例的过程就已经已开始了对于已识别的角色通过询问下列问题就可发现用例

●角色需要从系统中获得哪种功能角色需要做什么

●角色需要读取产生删除修改或存储系统中的某种信息吗

●系统中发生的事件需要通知角色吗或者角色需要通知系统某件事吗这

些事件功能能干些什么

●如果用系统的新功能处理角色的日常工作是简单化了还是提高了工作效

●还有一些与当前角色可能无关的问题也能帮助建模者发现用例例如

●系统需要的输入/输出是什么信息这些输入/输出信息从哪儿来到哪儿去

●系统当前的这种实现方法要解决的问题是什么也许是用自动系统代替手

工操作

UML 中的用例

UML 中的用例用椭圆形表示用例的名字写在椭圆的内部或下方用例位于系统边界的内部

角色与用例之间的关联关系或通信关联关系用一条直线表示

用例和角色之间有连接关系用例和角色之间的关系属于关联association 又称作通信关联communication association,这种关联表明哪种角色能与该用例通信,关联关系是双向的一对一关系,即角色可以与用例通信,用例也可以与角色通信。

用例关系

用例之间有扩展使用组合三种关系扩展和使用是继承关系即通用化关系的

另一种体现形式组合则是把相关的用例打成包package 当作一个整体看待

1 扩展关系

一个用例中加入一些新的动作后则构成了另一个用例这两个用例之间的关系就是通

用化关系又称扩展关系后者通过继承前者的一些行为得来前者通常称为通用化用例

后者常称为扩展用例扩展用例可以根据需要有选择地继承通用化用例的部分行为扩展

用例也一定具有完全性

2 使用关系

一个用例使用另一个用例时这两个用例之间就构成了使用关系一般情况下如果若干个用例的某些行为都是相同的则可以把这些相同的行为提取出来单独作成一个用例这个用例称为抽象用例这样当某个用例使用该抽象用例时就好象这个用例包含了抽象用例的所有行为

二类图

所谓对象就是可以控制和操作的实体,类是对象的抽象描述,它包括属性的描述和行为的描述二方面,构建面向对象模型的基础是类对象和它们之间的关系

类图是用类和它们之间的关系描述系统的一种图示是从静态角度表示系统的因此类图属于一种静态模型类图是构建其它图的基础没有类图就没有状态图协作图等其它图也就无法表示系统的其它各个方面

类图中允许出现的模型元素只有类和它之间的关系类用长方形表示长方形分成上中下三个区域每个区域用不同的名字标识用以代表类的各个特征上面的区域内用黑体字标识类的名字中间的区域内标类的名字识类的属性下面的区域内标识类的操作方法即行为这三部分作为一个整体描述某个类

属性的可见性可以不限于上述的三种某些具体的程序设计语言还可以定义其它的可见性类型但是在表示类图时必须含有公有类型和私有类型在类图中公有类型表示为加号+ 私有类型表示为减号-它们标识在属性名称的左侧如图4-4 所示如果属性名称旁没有标识任何符号表示该属性的可见性尚未定义

描述属性的语法格式为

可见性属性名类型名= 初值{性质串}

枚举类型的属性经常使用性质串

操作

在类图中操作部分位于长方形的最底部一个类可以有多种操作每种操作由操作名参数表返回值类型等几部分构成标准语法格式为

可见性操作名参数表返回值类型{性质串}

参数表由多个参数用逗号分开构成参数的语法格式为

参数名参数类型名= 缺省值

有一种特别的类叫做持久类persistent class 如图4-11 所示的类就是一个持久类当产生对象的程序draw 运行结束时所需的对象便生成了同时生成的对象将自身存入数据库文件或其它永久性的存储器中

类之间的关系

类图由类和它们之间的关系组成类与类之间通常有关联通用化(继承) 依赖和精化等四种关系

关联可分为普通关联递归关联限定关联或关联有序关联三元关联和聚合等七种

普通关联:

由于关联是双向的可以在关联的一个方向上为关联起一个名字而在另一个方向上起另一个名字也可不起名字名字通常紧挨着直线书写

导航关联:类与类之间的关联是单向的

类图中图示关联中的数量关系--------重数

0..1 表示零到1 个对象

0..*或* 表示零到多个对象

5..17 表示5 到17 个对象

2表示2 个对象

对于多对多的双向关联可以转化为两个一对多的关联来实现

对象图

对象的图示方式与类的图示方式几乎是一样的主要差别在于对象的名字下面要加下

划线

对象名有下列三种表示格式

第一种格式形如

对象名类名

即对象名在前类名在后中间用冒号连接

第二种格式形如

类名

这种格式用于尚未给对象命名的情况注意类名前的冒号不能省略

第三种格式形如

对象名

这种格式不带类名即省略类名

递归关联

如果一个类与它本身有关联关系那么这种关联称为递归关联recursive association

角色

任何关联关系中都涉及到与此关联有关的角色也就是与此关联相连的类中的对象所扮演的角色

引入角色的好处是指明了类和类的对象之间的联系(CONTEXT)

限定关联

限定关联用于一对多或多对多的关联关系中在限定关联中使用限定词将关联中多的那一端的具体对象分成对象集限定词可以理解为一种关键词用关键词把所有的对象分开利用限定关联可以把模型中的重数从一对多变成一对一类图中限定词放置在关联关系末端的一个小方框内紧挨着开始导航的类

有序关联

对象与对象之间的连接可以具有一定的次序就像应把窗口安排在屏幕之上一样一般情况下对象之间的关联都是无序的如果要明确表示关联中的次序关系一定要将规格说明{排序}放在表示关联的直线旁且紧挨着对象被排序的类

三元关联

类与类之间的关联关系不仅限于两个类之间多个类之间也可以有关联关系如果三个类之间有关联关系则称之为三元关联三元关联图示为一个大的菱形菱形的角与关联的类之间用直线相连也可以用虚线连接

聚合

聚合是关联的特例如果类与类之间的关系具有整体与部分的特点则把这样的

关联称为聚合

如图4-35 是一个带角色的复合聚合的示例图中给出了三种图示方法角色名位于部分类一方按钮和图标4.35 a 是带角色名的复合聚合图示4.35 b 是带角色的复合聚合的标准语法形式 4.35 c 采用将属性名变成角色名将属性的类型变成类的方法的形式图示复合聚合

通用化

一个类通用元素的所有信息属性或操作能被另一个类具体元素继承继

承某个类的类中不仅可以有属于自己的信息而且还拥有了被继承类中的信息这种机制就是通用化

受限通用化

给通用化关系附加一个约束条件进一步说明该通用化关系的使用方法或扩充方法

这样的通用化关系称为受限通用化预定义的约束有四种多重不相交完全和不完全

图4-44 图示了二种约束通用化的表示方法图4-44 a 是多个子类共用一个箭头指

向父类约束用花括号括起来放在直线旁边多个约束之间用逗号分隔图4-44 b 中

的继承关系是单独图示的这种情况下要另外附加一条虚线穿越所有的继承关系

多重继承

多重继承指的是子类的子类可以同时继承多个上一级子类图4-45 所示的水陆两用类就是通过多重继承得到的

依赖和精化关系

依赖关系描述的是两个模型元素类组合用例等之间的语义上的连接关系

UML 中的规则称为约束和派生约束用于限制一个模型我们已经讨论过的约束有或关联有序关联和四种继承约束多重不相交完全和不完全派生用于描述某种

事物的产生规则

约束关联

派生关联

派生属性由其它属性通过某种方式计算得来派生属性前面加一个斜线表示它并不真正出现在类的对象中派生属性的计算公式用括号括起来放在类的下方

对UML 模型元素应用的约束和派生规则也可以用UML 语言语法机制表示表示规则的语法称为导航表达式它构成说明一个具体规则的基本语句根据需要有时可以扩展导航表达式

下面介绍五种常见语法的书写形式

形式一set.attribute

set 是一个表达式代表一个对象或对象集attribute 是set 所代表对象的一个属性名它们之间用. 号相连接形式一的结果是属性的值结果值可能是单值也可能是多值具体结果依赖于关联的重数

形式二set.role

其中set 的含义同形式一role 代表关联关系中目的方角色名它们之间用. 相连形式二的结果为一个或多个对象对象的多少依赖于关联的重数

形式三set.~role

形式三与形式二的含义差不多不同之处在于role 代表关联关系中的起始方角色名role 前面多加一个~ 符号表示对关联关系的逆转具体结果仍然是与关联的重数有关的对象或对象集

形式四set [布尔表达式]

set 是代表一个对象或多个对象的表达式布尔表达式用set 中的对象书写并用方括号括起来形式四的结果值是使布尔表达式为真的对象是set 的一个子集形式五set.[限定词的值]

set 是代表一个对象或多个对象的表达式限定词指明一个限定set 的限定关联限定词代表限定关联中的限定属性值

动态建模

所有系统均可表示为两个方面静态结构和动态行为UML 提供图来描述系统的结构和行为类图(class diagram)最适合于描述系统的静态结构类对象以及它们之间的关系而状态序列协作和活动图则适合于描述系统的动态行为即描述系统中的对象在执行期间不同的时间点是如何动态交互的

系统中的对象需要相互通信它们相互发送消息

本章中描述的动态图有

状态图状态图描述对象在生命周期内处于哪些状态每一种状态的行为以及什么样的事件引起对象状态发生改变例如一张发票可以是已付(状态paid)和未

付(状态unpaid)

序列图描述对象如何相互交互和通信序列图中的最要的是时间通过序列图可以看出为了完成某种功能一组对象如何发送和接收一序列消息

协作图协作图也是描述对象交互的但侧重于空间的协作意即明确地给出对象间的关系(链接) 活动图也是描述对象交互的但侧重于工作的描述当对象

相互交互时需要执行一些工作或活动这些活动以及它们的出现顺序就是活动图

所要描述的

简单消息表示普通的控制流它只是表示控制是如何从一个对象传给另一个对象而没有描述通信的任何细节这种消息类型主要用于通信细节未知或不需要

考虑通信细节的场合它也可以用于表示一个同步消息的返回也就是说箭头处

理消息的对象指向调用者表示控制返回给调用者

同步消息一个嵌套控制流典型情况下表示一个操作调用处理消息的操作在调用者恢复执行之前完成(包括任何在本次处理中发送的其它消息) 返回可以用一

个简单消息来表示或当消息被处理完毕隐含地表示

异步消息异步控制流中没有直接的返回给调用者发送者发送完消息后不需要等待消息处理完成而是继续执行在实时系统中当对象并行执行时常采用这类消息

状态图:

状态图主要用来描述对象子系统系统的生命周期通过状态图可以了解到一个对象所能到达的所有状态以及对象收到的事件(收到消息超时错误条件满足)对对象状态的影响等所有的类只要它有可标记的状态和复杂的行为都应该有一个状态图

一个状态一般包含三个部分第一部分为状态的名称如空闲已付移动第二部分为可选的状态变量的变量名和变量值属性(变量)指的是状态图中类的属性在某些情况下临时变量也是很有用的如计数器第三部分为可选的活动表列出有关的事件和活动

活动部分的语法如下:事件名参数表'/' 动作表达式

状态转移的语法表示如下

event-signature '{' guard-condition '}' '/' action-expression

'^' send-clause

其中"event-signature"的语法表示如下

事件名'{' 参数',' , …'}'

"send-clause"的语法表示如下

destination-expression '.' destination-event-name '{' argument ',' …'}'

从图5-7 中可以看出"event-signature"由事件名参数触发状态转移的事件与事件有关的附加数据组成参数由逗号隔开的参数表来表示其语法表示如下

参数名':' 类型表达式参数名':' 类型表达式, …

守卫条件是状态转移中的一个布尔表达式如果将守卫条件和事件说明放在一起使用的话则当且仅当事件发生且布尔表达式成立时状态转移才发生如果状态转移只有守卫条件这一个条件则只要守卫条件为真状态转移就发生带守卫条件

动作表达式(Action-Expression)

动作表达式是一个过程表达式当状态转移开始时执行如图 5.9 所示它可以由对象(拥有所有状态的对象)的操作和属性组成也可以由事件说明中的参数组成在一个状态转移中允许有多个动作表达式但是多个动作表达式之间必须用斜杠(/)分隔开动作表达式按指定顺序(从左至右)一个一个地执行不允许有嵌套的动作表达式或递归的动作表达式但是只带一个动作表达式的状态转移是可能的下面就是只有一个动作表达式的状态转移的例子( ':= '

表示赋值)

increase () / n := n + 1 / m := m + 1

add (n) / sum := sum + n

/ flash

发送子句是动作的特例它被用来在两个状态转移之间发送消息发送子句由目的表达式和事件名组成目的表达式由一个或多个对象组成事件名是对目的对象(一组对象)有意义的事件的名称目的对象可以是对象本身可以将:

[ timer = Time-out ] / go down (first floor)

转换成一个发送子句

[ timer = Time-out] ^ self.go down (first floor)

再举几个带发送子句的状态转移的例子

out_of_paper () ^ indicator.light()

left_mouse_btn_down(location) / color := pick_color(location) ^pen.set(color)

UML 中有四类事件

条件成真即状态转移上的守卫条件

收到另一个对象中的信号信号本身也是一个对象在状态转移中表示为事件说明这类事件也称作消息

收到另一个对象(或对象本身)的操作调用在状态转移中表示为事件说明这类事件也称为消息

经过指定时间间隔通常情况下时间是从另一个指定事件(通常是当前状态的入口)或一给定时间段之后开始计算的在状态转移中表示为时间表达式需要注意的是错误也可以是事件对建模也许有用UML 并不对错误事件提供直接的支持但是可以将错误事件定义成版类(stereotype) 例如

<> out_of_memory

相关文档