热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

UML建模---活动图

活动图是UML用于对系统的动态行为建模的另一种常用工具,描述活动的顺序,展现从一个活动到另一个活动的控制流。活动图在本质上是一种流程图。活动图着重表现从一个活动到另一个活动的控制流,是
       活动图是UML用于对系统的动态行为建模的另一种常用工具, 描述活动的顺序,展现从一个活动到另一个活动的控制流。活动图在本质上是一种流程图。活动图着重表现从一个活动到另一个活动的控制流,是内部处理驱动的流程。 下面详细一下介绍活动图:
一、基本元素:
1、动作状态(Action State)

• 动作状态是指执行原子的、不可中断的动作,并在此动作完成后通过完成转换转向另一个状态的状态。

动作状态使用平滑的圆角矩形表示,动作状态所表示的动作写在圆角矩形内部。如图:


2、活动状态(Activity State)

• 活动状态用于表达状态机中的一个非原子的运行。
• 活动状态的表示图标也是平滑的圆角矩形,并可以在图标中给出入口动作和出口动作等信息。
如图:
• 活动状态的特点:
活动状态可以分解成其他子活动或动作状态,由于它是一组不可中断的动作或操作的组合,所以可以被中断。
活动状态的内部活动可以用另一个活动图来表示。
和动作状态不同,活动状态可以有入口动作和出口动作,也可以有内部转换。

动作状态是活动状态的一个特例,如果某个活动状态只包括一个动作,那么它就是一个动作状态。


3、动作流(Action Flow)
所有动作状态之间的转换流称之为动作流。
• 活动图的转换用带箭头的直线表示,箭头的方向指向转入的方向。


4、分支(Branch)与合并(Merge)

• 分支一般用于表示对象类所具有的条件行为。
• 条件行为用分支和合并表达。
• 在活动图中分支与合并用空心小菱形表示。
• 一个分支有一个入转换和两个带条件的出转换,出转换的条件应当是互斥的,这样可以保证只有一条出转换能够被触发。

• 一个合并有两个带条件的入转换和一个出转换,合并表示从对应的分支开始的条件行为的结束。如图:

5、分叉(Fork)与汇合(Join)
• 分叉用于将动作流分为两个或者多个并发运行的分支,而汇合则用于同步这些并发分支,以达到共同完成一项事务的目的。
• 分叉可以用来描述并发线程,每个分叉可以有一个输入转换和两个或多个输出转换,每个转换都可以是独立的控制流。
• 汇合代表两个或多个并发控制流同步发生,当所有的控制流都达到汇合点后,控制才能继续往下进行。每个汇合可以有两个或多个输入转换和一个输出转换。

分叉和汇合都使用加粗的水平线段表示。如图:


6、泳道(Swimlane)
• 泳道将活动图中的活动化分为若干组,并把每一组指定给负责这组活动的业务组织即对象。
• 泳道区分了负责活动的对象,明确地表示了哪些活动是由哪些对象进行的。
• 每个活动只能明确地属于一个泳道。
• 泳道用垂直实线绘出,垂直线分隔的区域就是泳道。在泳道上方可以给出泳道的名字或对象(对象类)的名字,该对象(对象类)负责泳道内的全部活动。
泳道没有顺序,不同泳道中的活动既可以顺序进行也可以并发进行,动作流和对象流允许穿越分隔线

7、对象流(Object Flow)
• 对象流是动作状态或者活动状态与对象之间的依赖关系,表示动作使用对象或者动作对对象的影响。
• 对象流中的对象特点:一个对象可以由多个动作操纵;一个动作输出的对象可以作为另一个动作输入的对象。

     对象流用带有箭头的虚线表示。如果箭头从动作状态出发指向对象,则表示动作对对象施加了一定的影响。如果箭头从对象指向动作状态,则表示该动作使用对象流所指向的对象。
    在活动图中,同一个对象可以多次出现,它的每一次出现表明该对象正处于对象生存期的不同时间点。

泳道和对象流可在下图中观察:


竖线就是泳道,四方块是表示的对象。


二、活动图建模技术:

①识别要对其工作流描述的类或对象。 ②确定工作流的初始状态和终止状态,明确工作流的边界。 ③对动作状态或活动状态建模。 ④对动作流建模。 ⑤对对象流建模。 ⑥对建立的模型进行精化和细化。
三、实例解析:

这是一个图书馆管理员的活动图:


解释:先进入图书管理系统,有两个活动分支:一、get book。也就是学生还书,判断是否过期,如果过期就收费,之后再更新借书者的信息;不过期,直接更新借书者的信息,活动结束。二、Lend book。也就是借给学生书,判断是有限制,没有限制的话就借出书更新信息;有限制就不借出。活动结束。

 



推荐阅读
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • NotSupportedException无法将类型“System.DateTime”强制转换为类型“System.Object”
    本文介绍了在使用LINQ to Entities时出现的NotSupportedException异常,该异常是由于无法将类型“System.DateTime”强制转换为类型“System.Object”所导致的。同时还介绍了相关的错误信息和解决方法。 ... [详细]
  • 本文介绍了在Python张量流中使用make_merged_spec()方法合并设备规格对象的方法和语法,以及参数和返回值的说明,并提供了一个示例代码。 ... [详细]
  • HashMap的相关问题及其底层数据结构和操作流程
    本文介绍了关于HashMap的相关问题,包括其底层数据结构、JDK1.7和JDK1.8的差异、红黑树的使用、扩容和树化的条件、退化为链表的情况、索引的计算方法、hashcode和hash()方法的作用、数组容量的选择、Put方法的流程以及并发问题下的操作。文章还提到了扩容死链和数据错乱的问题,并探讨了key的设计要求。对于对Java面试中的HashMap问题感兴趣的读者,本文将为您提供一些有用的技术和经验。 ... [详细]
  • 第七课主要内容:多进程多线程FIFO,LIFO,优先队列线程局部变量进程与线程的选择线程池异步IO概念及twisted案例股票数据抓取 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • OO第一单元自白:简单多项式导函数的设计与bug分析
    本文介绍了作者在学习OO的第一次作业中所遇到的问题及其解决方案。作者通过建立Multinomial和Monomial两个类来实现多项式和单项式,并通过append方法将单项式组合为多项式,并在此过程中合并同类项。作者还介绍了单项式和多项式的求导方法,并解释了如何利用正则表达式提取各个单项式并进行求导。同时,作者还对自己在输入合法性判断上的不足进行了bug分析,指出了自己在处理指数情况时出现的问题,并总结了被hack的原因。 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • linux进阶50——无锁CAS
    1.概念比较并交换(compareandswap,CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据交换操作࿰ ... [详细]
  • 本文提供了关于数据库设计的建议和注意事项,包括字段类型选择、命名规则、日期的加入、索引的使用、主键的选择、NULL处理、网络带宽消耗的减少、事务粒度的控制等方面的建议。同时还介绍了使用Window Functions进行数据处理的方法。通过遵循这些建议,可以提高数据库的性能和可维护性。 ... [详细]
  • 本文整理了Java中org.apache.hadoop.hive.ql.plan.ExprNodeColumnDesc.getTypeInfo()方法的一些代码示例,展 ... [详细]
author-avatar
木卫二
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有