
# 绘制组合片段
Fragment用来对顺序图中的消息发送/接收施加控制，用以将复杂的交互场景分解为更小、更易于管理的部分。每一个Fragment都会有对应的操作符类型，不同的操作符对应着不同的逻辑控制，Fragment中一共有12种操作符类型，可参考下方的操作符介绍说明。
![](https://support.huaweicloud.com/usermanual-codeartsmodeling/public_sys-resources/note_3.0-zh-cn.png)
服务将使用频率高的loop、alt元素放到工具箱中直接使用，与通过Fragment设置成loop、alt元素意义相同。
#### 操作符介绍
| 片段类型     | 片段名称 | 说明                                                                                                                                                                                                                     |
|:---|:---|:---|
| alt      | 抉择   | 具备alt操作符的Fragment通常表示一组行为选择，且最多只有一个行为被选择。被选择的行为必须有一个明确或隐含的值为true的卫语句表达式，如果没有显式卫语句表达式则表明其是一个隐含的值为true的表达式。 对应到软件模型，alt通常用来表示if...else if...或者switch语句的逻辑执行。                       |
| opt      | 选择   | 具备opt操作符的Fragment通常表示一个唯一行为是否被选择，它等同于具备一个内容行为和一个空内容行为的alt操作符。 对应到软件模型，alt通常用来表示if或者if...else语句的逻辑执行。                                                                           |
| break    | 中断   | 具备break操作符的Fragment通常表示封闭交互内的一个中断行为，带有卫语句表达式在值为true时，该中断行为会被选择，而封闭交互内的其余交互都不会执行。与opt操作符相比，它多了一个中断后续逻辑执行的能力。该Fragment在绘制时应该包含封闭交互逻辑内的所有生命线。 对应到软件模型，break通常用来表示if...break语句的逻辑执行。 |
| loop     | 循环   | 片段重复一定次数，可以在临界中指示片段重复的条件。                                                                                                                                                                                              |
| par      | 并行   | 并行处理。 片段中的事件可以交错。                                                                                                                                                                                                      |
| critical | 关键   | 用在par或seq片段中。指示此片段中的消息不能与其他消息交错。                                                                                                                                                                                       |
| seq      | 弱顺序  | 有两个或更多操作数片段。 涉及同一生命线的消息必须以片段的顺序发生。 如果消息涉及的生命线不同，来自不同片段的消息可能会并行交错。                                                                                                                                                      |
| strict   | 强顺序  | 有两个或更多操作数片段。 这些片段必须按给定顺序发生。                                                                                                                                                                                            |
| consider | 考虑   | 指定此片段描述的消息列表。 其他消息可发生在运行的系统中，但对此描述来说意义不大。                                                                                                                                                                              |
| ignore   | 忽略   | 此片段未描述的消息列表。 这些消息可发生在运行的系统中，但对此描述来说意义不大。                                                                                                                                                                               |
| assert   | 断言   | 操作数片段指定唯一有效的序列。 通常用在consider或ignore片段中。                                                                                                                                                                                |
| neg      | 否定   | 此片段中显示的序列不会发生。 通常用在consider或ignore片段中。                                                                                                                                                                                 |
   
#### 建模步骤
1. 选择片段元素的操作符类型。 
   从元素面板拖拽Fragment元素到画布中，会先要求用户选择对应的操作符类型，默认操作符类型是opt。各个操作符对应的含义可参考上方的操作符说明及下方的模型示例。
   除了通用Fragment之外，元素面板还额外提供了使用频率较高的loop和alt操作符，可以快速拖入使用。
   ![](https://support.huaweicloud.com/usermanual-codeartsmodeling/zh-cn_image_0000002155877122.png "点击放大")
   
   
2. 打开编辑条件面板。 
   Fragment元素通常会包含有一定量的条件集，可以在元素上通过单击"右键 \> 编辑条件"打开条件编辑面板。
   - 通过交互操作符下拉框设置操作符类型，支持设置操作符的显示和隐藏。
   
   - 通过新增条件按钮/删除按钮/单击条件名称等可以新增/删除/修改条件。
   
   - 通过条件列表首列的拖动图标调整各条件顺序。
   
   
   ![](https://support.huaweicloud.com/usermanual-codeartsmodeling/zh-cn_image_0000002157721498.png "点击放大")
   除了右键菜单，也可以通过鼠标悬停到Fragment元素的条件名称上，单击编辑图标打开条件编辑面板。
   ![](https://support.huaweicloud.com/usermanual-codeartsmodeling/zh-cn_image_0000002192809301.png "点击放大")
   
   
3. 调整条件区域的高度。 
   当Fragment元素有多个条件时，在元素内会有多个条件区域，以虚线进行分隔。可以通过拖拽虚线来调整条件区域的高度。
   ![](https://support.huaweicloud.com/usermanual-codeartsmodeling/zh-cn_image_0000002191198317.gif "点击放大")
   
   
 
#### 模型示例
- alt操作符：表示if...else if...或者switch语句的逻辑执行。 ![](https://support.huaweicloud.com/usermanual-codeartsmodeling/zh-cn_image_0000002155877126.png "点击放大")
  对应的代码模型。
  ![](https://support.huaweicloud.com/usermanual-codeartsmodeling/zh-cn_image_0000002191083981.png "点击放大")
  
- opt操作符：表示if或者if...else语句的逻辑执行。 ![](https://support.huaweicloud.com/usermanual-codeartsmodeling/zh-cn_image_0000002155717374.png "点击放大")
  对应的代码模型。
  ![](https://support.huaweicloud.com/usermanual-codeartsmodeling/zh-cn_image_0000002191198325.png "点击放大")
  
- loop操作符：表示for或者while等循环逻辑的执行。 ![](https://support.huaweicloud.com/usermanual-codeartsmodeling/zh-cn_image_0000002155877134.png "点击放大")
  对应的代码模型。
  ![](https://support.huaweicloud.com/usermanual-codeartsmodeling/zh-cn_image_0000002191083993.png "点击放大")
  
- break操作符：表示对for或者while等循环逻辑的执行中断，通常与loop操作符结合使用。 ![](https://support.huaweicloud.com/usermanual-codeartsmodeling/zh-cn_image_0000002155717382.png "点击放大")
  对应的代码模型。
  ![](https://support.huaweicloud.com/usermanual-codeartsmodeling/zh-cn_image_0000002191198333.png "点击放大")
  
 
