使用 UML 序列图中的片段描述控制流
在 Visual Studio 旗舰版中的 UML 序列图中,使用组合片段可以显示循环、分支和其他备选项。
组合片段由一个或多个交互操作数组成,其中每个操作数包含一个或多个消息、交互使用或组合片段。
备注
本主题针对序列图中的片段。有关如何读取 UML 序列图的更多信息,请参见 UML 序列图:参考。有关如何绘制 UML 序列图的更多信息,请参见 UML 序列图:准则。
图中显示的元素如下所示。
组合片段。 组合片段有若干种。 本示例是一个 Alt 组合片段,可用于表明可以出现备选消息序列。
交互操作数。 每个组合片段包含至少一个交互操作数,交互操作数可以包含消息、交互使用和较小的组合片段。 在本例中,Alt 组合片段有两个交互操作数,表示两个备选消息序列。
可以单独选择每个交互操作数,方法是单击其内部。 在本例中,选择了上面的交互操作数,以便可以看到其边界。 通常,只能看到交互操作数之间的分隔线。
备注
若要选择上面的交互操作数,不能在距离组合片段的顶部过近的位置单击。
临界。 可以为每个交互操作数设置一个临界。 临界描述交互操作数内的消息的执行条件。
创建组合片段
有关可以创建的片段种类的列表,请参见组合片段的种类。
创建组合片段
选择一个消息,或消息序列(其中的所有消息都在同一生命线或执行匹配项上开始)。
备注
如果选择多个消息,则这些消息必须构成一个不间断序列。
右击其中一个消息,指向**“外侧代码”,然后单击所需组合片段的种类,如“Alt 组合片段”**。
新的组合片段随即显示。 标题指示所选组合片段的种类,如**“Alt”**。
在组合片段内有一个包含所选消息的片段。
可以向某些种类的组合片段添加更多交互操作数。
向组合片段添加新的交互操作数
右击交互操作数 (2) 内部、任何所包含片段外部并且在组合片段的标题下面的空白处。
指向**“添加”**。
单击**“前面的交互操作数”或“后面的交互操作数”**。
可以使用消息工具或通过复制并粘贴现有消息而在新的交互操作数内部添加消息。
可以设置交互操作数的**“临界”属性来描述该交互操作数内的消息的执行条件。 例如,在“Loop”组合片段中,可以使用临界指定循环的继续条件。 在“Alt”**组合片段中,可以为每个交互操作数指定单独的条件。
设置交互操作数的临界
单击交互操作数 (2) 内部、任何所包含片段外部的空白处。
交互操作数四周和临界条件四周将显示一个选择边框。
“属性”窗口中的标题显示“交互操作数”。
键入临界条件。
该条件将显示在片段 (4) 的顶端附近。
可以设置某些种类的组合片段的属性。
设置或查看组合片段的属性
右击组合片段的标题,然后单击**“属性”**。
备注
不同种类的组合片段具有不同的属性。
组合片段的种类
描述控制流的片段
一个简单的序列图仅显示一个典型序列。 可以使用以下类型的组合片段来描述可能发生在不同场合的变体。
片段类型 |
说明 |
---|---|
Opt |
可选。 包含一个可能发生或可能不发生的序列。 可以在临界中指定序列发生的条件。 |
Alt |
包含一个片段列表,这些片段包含备选消息序列。 在任何场合下只发生一个序列。 可以在每个片段中设置一个临界来指示该片段可以运行的条件。 else 的临界指示其他任何临界都不为 True 时应运行的片段。 如果所有临界都为 False 并且没有 else,则不执行任何片段。 |
Loop |
片段重复一定次数。 可以在临界中指示片段重复的条件。 Loop 组合片段具有“Min”和“Max”属性,它们指示片段可以重复的最小和最大次数。 默认值是无限制。 |
Break |
如果执行此片段,则放弃序列的其余部分。 可以使用临界来指示发生中断的条件。 |
Par |
并行处理。 片段中的事件可以交错。 |
Critical |
用在 Par 或 Seq 片段中。 指示此片段中的消息不得与其他消息交错。 |
Seq |
有两个或更多操作数片段。 涉及同一生命线的消息必须以片段的顺序发生。 如果消息涉及的生命线不同,来自不同片段的消息可能会并行交错。 |
Strict |
有两个或更多操作数片段。 这些片段必须按给定顺序发生。 |
有关如何解释序列的片段
默认情况下,序列图表明可能发生的一系列消息。 在运行的系统中,可能会出现您未选择显示在关系图上的其他消息。
以下片段类型可用于更改此释义。
片段类型 |
说明 |
---|---|
Consider |
指定此片段描述的消息列表。 其他消息可发生在运行的系统中,但对此描述来说意义不大。 在“Messages”属性中键入该列表。 |
忽略 |
此片段未描述的消息列表。 这些消息可发生在运行的系统中,但对此描述来说意义不大。 在“Messages”属性中键入该列表。 |
断言 |
操作数片段指定唯一有效的序列。 通常用在 Consider 或 Ignore 片段中。 |
Neg |
此片段中显示的序列不得发生。 通常用在 Consider 或 Ignore 片段中。 |