UML建模风格之顺序图

5.2 创建交互视图

 

交互视图描述了实现系统行为角色之间的消息交换序列。分类角色是对交互中充当特殊角色的对象的描述。交互视图提供了系统中行为在全局的描述,显示了多个角色间的控制流程。交互视图用侧重点不同的两种图来显示:顺序图和协作图。

消息指角色间的单向通信,从发送者到接收者的携带信息的控制流。消息可能带有角色间传递值的参数。

顺序图和协作图均显示了交互,但它们强调了不同的方面。顺序图显示了时间顺序,但角色间的关系是隐式的。协作图表现了角色之间的关系,并将消息关联至关系,但时间顺序由于用顺序号表达,并不十分明显。每一种图应根据主要的关注焦点而使用。

a.顺序图

顺序图表示了随时间安排的一系列消息。每个分类角色显示为一条生命线,代表整个交互期间上的角色。消息则显示为生命线之间的箭头。顺序图可以表达场景,即一项事务的特定历史。

顺序图以二维图表来显示交互。纵向是时间轴,时间自上而下。横向显示了代表协作中单个对象的分类角色。每个对象用方框表示,对象的名字在方框内部,并在名字的下方加下划线。每个分类角色表现为垂直列-生命线。在角色存在的时间内,生命线显示为虚线;在角色的过程激活时间内,生命线显示为双线。

消息显示为从一个角色生命线出发至另一个角色生命线的箭头,箭头用从上而下来的时间顺序来安排。顺序图的一个用途是显示用例的行为序列。当行为被实现时,每个顺序图中的消息同对象的操作或状态机中迁移上的事件触发相一致。

图4 表示处理请求用例的顺序图。图中五个方框分别表示五个对象:ProcessMonitor、EngineManager、Engine、EntactmentDB、Logfiles。这个用例是由ProcessMonitor 接收用户操作,再将这些操作转换成固定的请求,发送给引擎执行而产生的。

当ProcessMonitor 接收到用户在界面上所作的操作后,将这些操作转换为固定的命令请求,发送给EngineManager。EngineManager 再根据接收到命令的类别,将命令分发给不同的Engine。Engine 则具体执行相应的命令。Engine 执行完命令后,通知EntactmentDB 修改相应的数据。接下来,Engine 再通知Logfiles 将所作的操作记录下来,以供以后查询。最后,Engine 直接将结果返回给ProcessMonitor,由ProcessMonitor将结果包装,显示给用户。

b.协作图

协作图对交互中存在意义的对象和链建模。对象和链仅在提供的上下文中存在意义。分类角色描述了对象,关联角色描述了协作中的链。协作图通过图形的几何排布显示交互中的角色。消息显示为附属在连接分类角色的关系直线上的箭头。消息的顺序由消息描述前的顺序号来表示。

协作图的一个用途是表现操作的实现。协作显示了操作的参数和局部变量,以及更永久性的关联。当行为被实现时,消息的顺序与程序的嵌套调用结构和信号传递一致。

图5表示对应于处理请求用例的协作图。这个用例是由ProcessMonitor 接收用户操作,再将这些操作转换成固定的请求,发送给引擎执行而产生的。这个协作图表现了处理请求用例所涉及的五个相关对象之间相互协作的关系。

5.3 创建状态机视图

状态机视图通过对一种对象的可能生命历史进行建模,描述了对象在时间序列上的动态行为。每个对象被认为是通过检测事件并对之响应来与外界进行通讯的孤立实体。事件表达了对象可以检测的变动-对象间的调用或显示信号、某个值的改变或时间的推移。任何影响对象的事物可以被描述成事件。真实世界发生的事情被建模成外部世界至系统的信号。

状态指就某个特定类而言,对于发生的事件具有相同性质响应的一系列对象值。换言之,同一状态的所有对象以相同的方式响应某个事件,即对于给定的所有对象在接收到同一事件时执行相同的动作。而不同状态的对象可能对相同事件具有不同的响应,执行不同的动作。

状态机包含由事件连接的状态。每个状态对对象生命期中的一段时间建模,该时间内对象满足一定的条件。当事件发生时,它可能导致迁移的激发,使对象改变至新状态。当迁移激发时,附属于迁移的动作可 能被执行。状态机在UML 中显示为状态图。

在状态机视图中,状态用带圆角的长方形表示,初始状态用实心填充的圆表示,结束状态用实心填充的圆外套一个圆圈表示。

图6 表示过程实例的状态机视图。从图中可以看出,一个工作流定义的过程实例,在运行时可能有五种不同的过程,分别为初始状态、就绪状态、运行状态、挂起状态与结束状态。

 

一个过程实例在初始时,均为初始状态(initial state)。根据需要,某个过程实例被创建(create),成为就绪状态(Ready)。随后,用户可以根据需要,选择就绪状态的过程实例进行启动(start),被启动的过程实例的状态就变为运行状态(Running)。处于就绪状态和运行状态的过程实例都可以通过取消操作(abort)转变为结束状态(end state)。处于运行状态的过程实例,通过挂起操作(hold),可以转变为暂时停止的挂起状态(Holded),同时处于挂起状态的过程实例也可以通过运行操作(run)转变为运行状态。挂起状态与结束状态的区别在于挂起状态并不释放所占用的资源,因而是可以恢复的。最后,一个处于运行状态的过程实例如果运行完毕,通过完成操作(finish)转变为结束状态。

状态机可以用于描述用户界面、设备控制和其它交互式子系统。它们还可用于在生命期中经历了若干特定阶段,每个阶段拥有特殊的行为的对象。

5.4 创建活动视图

活动视图是用于显示执行某个计算过程中的运算活动的状态机的一种特殊形式。活动状态代表了运算执行的状态:流程的步骤或操作的执行。活动图描述了顺序和并发活动分组。活动视图表达为活动图。

活动图包含活动状态。活动状态表现了过程中语句的执行或工作流中活动的运行。与一般等待状态等待事件不同,活动状态等待的是运算的结束。当活动结束时,执行处理到图中的下一个活动。前一个活动结束时,活动图中的结束迁移被激发。活动状态通常没有外部事件的迁移,但它们可以由外围状态的事件而被取消。

在活动图中,用左右两段是圆弧的长方形表示活动,用较粗的横线表示活动的分发,用带有箭头的线表示活动处理的先后顺序。

图7 表示用户的操作活动图。用户在使用系统所提供的功能之前,首先应当登录系统,也就是说,操作的第一步是登录(login)。登录之后,用户可以在三种操作中任选一个执行:选择过程定义(choose process define)、选择过程实例(choose process instance)以及选择工作项(choose workitem)。这三个活动的执行,没有先后顺序,完全由用户进行选择。

 

当用户选择了过程定义后,可以创建一个所选的过程定义的实例,也就是执行创建过程定义活动(create process define);当用户选择了一个过程实例后,根据这个过程实例状态的不同,可以对这个过程实例进行终止(abort)、启动(start)、挂起(hold)与运行(run)等操作,这些操作的执行是没有先后顺序的;当用户选择了一个工作项后,可以执行这个工作项,也就是做这个工作项的内容(do workitem)。

根据以上使用用例视图、交互视图、状态机视图以及活动视图对工作流管理系统所应具有的功能层次进行的分析,对通用工作流管理系统要达到的目标,应当有了一个较为清晰的认识。而这些认识与理解,将为进一步的设计,奠定良好的基础。  

<think>我们参考了提供的引用材料,特别是引用[3]中提到了在顺序图中表示分支的方法:使用组合片段(Combined Fragment),如alt(条件分支)、opt(可选分支)等。 在StarUML中,顺序图的分支通常通过组合片段来实现。具体的步骤如下: 1. 在顺序图的工具栏中,找到“Combined Fragment”工具(通常显示为一个矩形框,内部有文字如"opt"、"alt"等)。 2. 点击该工具,然后在顺序图的适当位置绘制一个组合片段区域(矩形框)。 3. 在组合片段的属性中,设置其操作符(Operator)为“alt”(表示条件分支)或“opt”(表示可选分支)等。 4. 在组合片段内部,可以划分多个区域(Region),每个区域代表一个分支。对于alt,通常有两个或多个区域,每个区域可以设置一个监护条件(Guard Condition)。 5. 在每个区域内,可以继续添加消息(Message)来表示该分支下的交互。 注意:每个分支的监护条件写在区域的上方,通常用方括号括起来,例如[x>0]。 示例步骤(以alt为例): a. 创建组合片段,操作符选择alt。 b. 默认会有两个区域(如果不够,可以添加区域),分别代表条件成立和不成立的分支(或者多个条件分支)。 c. 在第一个区域的上方,双击并输入监护条件,如[条件1]。 d. 在该区域内添加消息(即该条件下发生的交互)。 e. 在第二个区域上方输入监护条件,如[else](或其他条件),并添加消息。 另外,引用[2]中提到,时序图(即顺序图)不太适合表达复杂的分支结构,如果分支过于复杂,可以考虑使用活动图。但在顺序图中,我们可以通过组合片段来清晰表达主要分支。 引用[3]中还提到组合片段除了alt和opt外,还有loop(循环)等。 因此,在StarUML中画顺序图体现分支的方法主要是正确使用组合片段(Combined Fragment)中的alt(条件分支)和opt(可选分支)等操作符。 下面我们总结一下步骤: 步骤1:打开StarUML,创建一个顺序图(Sequence Diagram)。 步骤2:在工具栏中选择“Combined Fragment”工具(通常在顺序图的工具集中可以找到)。 步骤3:在顺序图上点击,放置组合片段。 步骤4:在组合片段的属性面板中,设置“Operator”属性为“alt”(用于条件分支)或“opt”(用于可选分支)。 步骤5:组合片段会自动创建两个区域(如果是alt),如果需要更多区域,可以右键点击组合片段,选择添加区域(Add Operand)。 步骤6:为每个区域设置监护条件(Guard Condition)。双击区域顶部的“[ ]”处,输入条件(如[x>0])。注意,可以有一个区域的条件设为[else]表示其他情况。 步骤7:在每个区域内,按照正常顺序图的方式绘制消息(Message)。 示例:假设有一个用户登录的顺序图,分支条件为登录成功和登录失败。 - 组合片段操作符设为alt。 - 第一个区域:条件为[登录成功],内部消息为“显示主界面”。 - 第二个区域:条件为[登录失败],内部消息为“显示错误信息”。 这样,我们就用分支清晰地表达了两种不同的流程。 注意:在顺序图中,分支的每个区域在图中是水平排列的,并且每个区域代表一个独立的流程分支。 引用[3]中给出了组合片段的基本说明,包括alt(条件分支)、loop(循环)等,这些都是顺序图中表示控制流的常用方式。 因此,用户在使用StarUML顺序图时,如果需要体现分支,应使用组合片段(Combined Fragment)中的alt或opt操作符。 相关问题: 1. 除了alt和opt,StarUML顺序图还支持哪些组合片段? 2. 如何在顺序图中表示循环(loop)? 3. 顺序图活动图在表达分支时有何区别? </think>在StarUML中绘制顺序图体现分支的方法,主要通过**组合片段(Combined Fragment)** 实现,以下是具体操作步骤和要点: ### 1. **添加组合片段** - 在顺序图工具栏选择 **`Combined Fragment`** 工具(图标为矩形框) - 在图中拖拽绘制组合片段区域,覆盖需要分支的生命线 - **关键设置**:右键单击组合片段 → 属性面板 → 设置 **Operator** 为 `alt`(条件分支)或 `opt`(可选分支)[^3][^4] ### 2. **定义分支条件** - 每个分支对应一个 **`Operand`**(操作域) - 在分支顶部添加 **监护条件(Guard Condition)**: - 双击操作域顶部的 `[ ]` 区域 - 输入条件表达式(如 `[余额充足]`、`[库存不足]`)[^3] - **多分支示例**: ```plaintext [条件1] → 分支1的消息流 [条件2] → 分支2的消息流 [else] → 默认分支 ``` ### 3. **绘制分支消息流** - 在每个操作域内部绘制独立的消息序列: - 使用 **实线箭头**(→)表示同步调用 - 使用 **虚线箭头**(⇢)表示异步消息[^3][^5] - **示例场景**(ATM取款): ```plaintext alt [余额充足] : 用户→ATM → 出钞 [余额不足] : 用户←ATM ← 显示错误 ``` ### 4. **其他分支表达方式** - **循环分支**:Operator 设为 `loop`,在监护条件中指定循环次数(如 `[i<5]`) - **并行分支**:Operator 设为 `par`,可同时执行多个操作域 - **可选分支**:Operator 设为 `opt`,表示可执行的分支[^3][^4] ### 注意事项 1. 分支覆盖范围应包含相关对象的生命线 2. 复杂分支建议配合 **注释节点**(Note)说明逻辑 3. 避免过度嵌套,若分支过多可改用活动图(Activity Diagram)建模[^2] > 示例图参考引用[2][^2],StarUML的分支可视化效果如图: > ![Sequence Diagram with Branch](https://example.com/staruml-branch-example.png) > *(注:示意图展示alt组合片段的分支结构)*
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值