【名词解释】8.序列图

http://blog.youkuaiyun.com/suxinpingtao51/article/details/8011335

转自此篇文章,感谢作者SergePing。

1.生命线:

生命线名称可带下划线。当使用下划线时,意味着序列图中的生命线代表一个类的特定实体。

2. 同步消息

发送人在它继续之前,将等待同步消息响应

    

3.异步消息

在发送方继续之前,无需等待响应的消息

    

4.注释

    

5.约束

约束的符号很简单;格式是: [Boolean Test]

    

6.组合片段

组合片段 用来解决交互执行的条件及方式。 它允许在序列图中直接表示逻辑组件,用于通过指定条件或子进程的应用区域,为任何生命线的任何部分定义特殊条件和子进程。

常用的组合片段有:

a.抉择(Alt)

抉择用来指明在两个或更多的消息序列之间的互斥的选择,相当于经典的if..else..。

抉择在任何场合下只发生一个序列。 可以在每个片段中设置一个临界来指示该片段可以运行的条件。 else 的临界指示其他任何临界都不为 True 时应运行的片段。 如果所有临界都为 False 并且没有 else,则不执行任何片段。

 

     

b.选项(Opt)

包含一个可能发生或不发生的序列????

    

c.循环(Loop)

片段重复一定次数。 可以在临界中指示片段重复的条件。

    

 

d.并行(Par)

     

 

下表列出了常用的组合片段:

片段类型

名称

说明

Opt

选项

包含一个可能发生或可能不发生的序列。 可以在临界中指定序列发生的条件。

Alt

抉择

包含一个片段列表,这些片段包含备选消息序列。 在任何场合下只发生一个序列。

可以在每个片段中设置一个临界来指示该片段可以运行的条件。 else 的临界指示其他任何临界都不为 True 时应运行的片段。 如果所有临界都为 False 并且没有 else,则不执行任何片段。

Loop

循环

片段重复一定次数。 可以在临界中指示片段重复的条件。

Loop 组合片段具有“Min”“Max”属性,它们指示片段可以重复的最小和最大次数。 默认值是无限制。

Break

中断

如果执行此片段,则放弃序列的其余部分。 可以使用临界来指示发生中断的条件。

Par

并行

并行处理。 片段中的事件可以交错。

Critical

关键

用在 Par 或 Seq 片段中。 指示此片段中的消息不得与其他消息交错。

Seq

弱顺序

有两个或更多操作数片段。 涉及同一生命线的消息必须以片段的顺序发生。 如果消息涉及的生命线不同,来自不同片段的消息可能会并行交错。

Strict

强顺序

有两个或更多操作数片段。 这些片段必须按给定顺序发生。

 

有关如何解释序列的片段

默认情况下,序列图表明可能发生的一系列消息。 在运行的系统中,可能会出现您未选择显示在关系图上的其他消息。

以下片段类型可用于更改此释义

片段类型

名称

说明

Consider

考虑

指定此片段描述的消息列表。 其他消息可发生在运行的系统中,但对此描述来说意义不大。

“Messages”属性中键入该列表。

Ignore

忽略

此片段未描述的消息列表。 这些消息可发生在运行的系统中,但对此描述来说意义不大。

“Messages”属性中键入该列表。

Assert

断言

操作数片段指定唯一有效的序列。 通常用在 Consider 或 Ignore 片段中。

Neg

否定

此片段中显示的序列不得发生。 通常用在 Consider 或 Ignore 片段中。

 

转载于:https://www.cnblogs.com/CESC4/p/8026224.html

递归数据结构指的是若一个对象部分地包含它自己,或用它自己给自己定义,则称这个对象是递归的。在数据结构领域,若一个数据结构部分地包含它自己,就称该数据结构是递归的。 递归数据结构在很多场景下会被运用,例如树和森林就是以递归的方式定义的。像树和图的很多算法都是以递归来实现的,很多数学公式也以递归的方式定义,如斐波拉契序列 1, 2, 3, 5, 8, 13, ... 。 从设计思想来看,对于涉及递归数据结构的问题,需要寻找递归关系和确定递归出口。递归关系是将整个问题分解成若干个子问题,部分子问题的解决方法和解决整个问题的方法一样,通过分别求解子问题,最后获得整个问题的解。递归出口则是子问题继续分解,直到无需再分解或不能再分解,能直接得到结果的情况。在递归算法设计时,先判断是否满足出口条件,满足则执行出口操作,否则用同样的方法解决子问题。由于每一次递归调用进入下一层时,为了能正确返回并继续操作,需要存储返回地址及过程中使用的参数、局部变量等,且返回时的次序与进入的次序正好相反,所以利用栈的组织空间存储每层信息,形成递归工作栈 [^2][^3]。 利用递归可以用简单的程序来解决一些复杂的问题,它把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大减少了程序的代码量,其能力在于用有限的语句来定义对象的无限集合 [^4]。 以下是一个利用链表结点的结构遍历表中每个结点的递归代码示例: ```cpp #include <iostream> using namespace std; // 定义链表节点结构 struct LinkList { int data; LinkList* next; LinkList(int val) : data(val), next(nullptr) {} }; // 递归遍历链表 void Traverse2(LinkList* L) { if (L == nullptr) cout << "Error"; else { cout << L->data; Traverse2(L->next); } } int main() { // 创建链表 1 -> 2 -> 3 LinkList* head = new LinkList(1); head->next = new LinkList(2); head->next->next = new LinkList(3); // 调用递归遍历函数 Traverse2(head); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值