1.时序图是什么
时序图(Sequence diagram)是一种用于描述系统中不同对象之间交互的行为建模图。它展示了对象之间的消息交换顺序,以及这些消息的触发时间和对象之间的相互作用。
时序图通常用于需求分析和系统设计阶段,它们可用于可视化系统中的多个角色、对象或组件之间的时序行为。这些图形化表示可以帮助开发人员和设计师更好地理解系统的交互过程,从而更好地进行软件设计和开发。
在时序图中,各个对象被表示为参与者(参与者可以是人、组织、系统、子系统等),它们以水平的虚线表示。参与者之间的交互则通过垂直的实线消息表示,消息按照时间顺序从上到下绘制。时序图还可以显示并发执行、条件分支、循环和返回消息等特性。
时序图的主要元素包括参与者、生命线、消息、激活和返回消息。参与者代表系统中的各个角色或对象,生命线表示参与者的存在时间。消息用于表示参与者之间的交互动作,激活表示参与者在处理消息时的活动状态。返回消息表示从被调用者返回到调用者的响应消息。
时序图是一种强大的工具,它可以帮助开发人员和设计师更好地理解系统中的交互过程,并发现潜在的问题和改进点。它们在软件开发、系统分析和设计中被广泛应用,特别适用于描述复杂的系统和交互流程。
2. StarUML时序图含义
生命线(Lifeline)是时序图中的一个命名元素,表示交互中的一个参与者。虽然部分和结构特征可能具有大于1的多重性,但生命线仅代表一个交互实体。
如果所引用的可连接元素是多值的(即,具有多重性>1),则生命线可以具有一个表达式(选择器),指定此生命线所代表的特定部分。如果省略选择器,则意味着选择了多值可连接元素的任意代表。
生命线使用一个符号表示,它由一个形成“头部”的矩形后面跟随的垂直线(可以是虚线)组成,表示参与者的生命周期。
在矩形内显示标识生命线的信息,格式如下(稍有修改,不同于UML 2.4标准):
lifeline-ident ::= [ connectable-element-name [ '[' selector ']' ]] [ ':' class-name ] [ decomposition ] | 'self' selector ::= expression decomposition ::= 'ref' interaction-ident [ 'strict' ]
其中class-name是所表示可连接元素引用的类型。请注意,尽管语法允许,但生命线标识不能空白。
生命线的头部形状基于此生命线所代表的部分的分类器。通常,头部是一个包含类名的白色矩形。
如果名称是关键字"self",那么生命线表示拥有该生命线的交互所包含的分类器的对象。即生命线所代表的是包围该交互的分类器的对象。即使包括"self"关键字,该分类器的端口也可以单独显示。
消息(Message)是定义交互中生命线之间一种特定通信的命名元素。消息不仅指定通信的类型,还指定了发送者和接收者。发送者和接收者通常是两个事件发生规范(消息的两端)。
消息的语法如下:
message ::= [ attribute '=' ] signal-or-operation-name [ arguments ] [ ':' return-value ] | '' arguments ::= '(' [argument [ ',' argument] ')' argument ::= [ parameter-name '='] argument-value | attribute '=' out-parameter-name [ ':' argument-value ] | ' -'
消息的参数可以是以下类型之一:
发送生命线的属性, 常量, 符号值(通配符值,表示任何合法值), 封闭交互的显式参数, 拥有交互的类的属性。
消息显示为从发送者消息端到接收者消息端的一条线。该线必须满足以下条件:从发送事件到接收事件遍历时,每个线段要么是水平的,要么向下。发送事件和接收事件可以在同一生命线上。线的形式或箭头的形状反映了消息的属性。
消息的一种,消息的发送者和接收者都是自身,表示参与者执行自己的逻辑。
发送消息后立即继续进行,而无需等待返回值。异步消息具有一个开放的箭头头部。
消息回复,回复消息显示为带有虚线和开放箭头头部的线条。
创建消息(Create message)是发送给生命线以创建自身的消息。它以虚线和开放箭头头部的形式显示(与回复消息相似),并指向被创建生命线的头部。
删除消息(在之前的UML版本中称为"stop")被发送以终止另一个生命线。生命线通常以一个位于底部的交叉符号(X形)表示销毁事件的发生。
异步信号消息对应于异步发送信号操作
Found Message是一种消息,其中接收事件已知,但没有(已知的)发送事件。它被解释为消息的起源位于描述范围之外。这可能是噪声或其他不需要详细描述的活动。语义上,它仅表示迹线:<receiveEvent>,而发送事件则不存在。
Found Message用一个小黑圆圈标记在消息的起始端。如下不知道搜索chatgpt源是是么,但是目的地是chatgpt服务
Lost Message是一种消息,其中发送事件已知,但没有接收事件。它被解释为消息未能到达其目的地。语义上,它的迹线是<sendEvent>,而接收事件不存在。
Lost Message用一个小黑圆圈标记在消息的箭头端。假设RabbitMq 给消费者投递消息,如何没有消费者消息将无法被接受
消息端点
Gate(门)是消息端点,用于将交互片段外部的消息与交互片段内部的消息相关联。
门和门之间的消息的目的是为每个消息指定具体的发送者和接收者。门扮演不同的角色:
- 形式门(formal gates)- 在交互中使用
- 实际门(actual gates)- 在交互使用中
- 表达式门(expression gates)- 在组合片段中使用
门可以隐式或显式命名。隐式门名称通过连接消息的方向("in"或"out")和消息名称构成,例如in_search、out_read。
门在框架上的表示方式与消息连接点相同。
状态不变式(State invariant)是一个交互片段,它代表对交互参与者的运行时约束。它可以用于指定不同类型的约束,例如属性或变量的值、内部或外部状态等。
该约束在执行下一个事件发生规范之前立即进行评估,以确保所有未明确建模的动作都已执行。如果约束为真,则迹线是有效的迹线;否则,迹线是无效的迹线。
状态不变式通常在生命线上用花括号中的约束形式显示。
它也可以用状态符号表示,代表对生命线所表示的对象状态进行检查的约束的等效形式。这可以是与相应分类器相关的分类器行为的内部状态,也可以是基于对生命线的“黑盒”视图的某些外部状态。
状态符号在视觉上表示了交互过程中对象在特定时刻的状态。它提供了有关在该状态下生命线应满足的条件或约束的信息。通过将状态符号放置在生命线上,它表示在执行交互期间应满足的状态约束。
这种表示方式可以更直观地理解状态不变式及其对生命线行为和系统内部交互的影响。
状态不变式可以选择作为与事件发生规范相关联的注释(note)来显示。
- Continuation
-
Combined Fragment
组合片段(Combined fragment)是定义交互片段的组合(表达式)的一种交互片段。组合片段由交互操作符和相应的交互操作数定义。通过使用组合片段,用户可以以紧凑简洁的方式描述多个迹线。
组合片段提供了一种结构化的方式来组合和编排不同的交互片段,以表达复杂的交互行为。它可以用于表示条件分支、循环、并行执行等不同的交互模式。
通过使用组合片段,用户可以在交互图中以一种更加清晰和可读的方式描述多个迹线,并将多个交互片段组合在一起,以便更好地理解和分析系统的行为。
1.Alternatives
交互操作符alt
表示组合片段代表一种选择或行为的多种可能性。最多只能选择一个操作数。被选择的操作数必须具有在交互中此时评估为真的显式或隐式守卫表达式。
2.Option
交互操作符 opt
表示组合片段代表一种行为的选择,其中要么发生(唯一的)操作数,要么什么都不发生。选项在语义上等同于一个替代的组合片段,其中有一个非空内容的操作数,而第二个操作数为空。
3.Loop
交互操作符 loop
表示组合片段代表一个循环。循环操作数将被重复执行多次。循环结构表示 seq
操作符的递归应用,其中循环操作数在之前迭代的结果之后被顺序执行。
4.Break
交互操作符 break
表示中断或异常情况,它会替代封闭交互片段的剩余部分。
带有守卫的 break
操作符在守卫为真时被选择。在这种情况下,直接封闭的交互片段的剩余部分被忽略。当 break
操作数的守卫为假时,将忽略该操作数,并继续执行封闭交互片段的剩余部分。
5.Parallel
交互操作符 par
定义了组合片段中操作数行为的可能并行执行。不同的操作数可以以任何方式交错,只要保留每个操作数所规定的顺序。
并行操作符的一组迹线描述了操作数的事件发生规范可以以何种方式交错,而不改变每个操作数内部的顺序。
换句话说,par
操作符表示操作数之间的行为可以并行执行,并且可以以不同的方式交替进行,同时保留每个操作数内部的顺序。它描述了在不改变操作数内部顺序的情况下,操作数之间可能发生的各种方式或组合。
交互使用(Interaction use)是一种交互片段,允许使用(或调用)另一个交互。通过交互使用,可以简化大型和复杂的顺序图。在多个其他交互之间重用某些交互也很常见。
被引用的交互具有形式门(formal gates)。交互使用提供了一组实际门(actual gates),这些实际门必须与交互的形式门匹配。
交互使用的工作方式如下:
- 将引用交互的内容复制到需要使用该交互的位置。
- 使用参数替换形式参数。
- 将形式门与实际门连接起来。
通过这样的过程,交互使用实现了对引用交互的重用,并将引用交互的行为嵌入到当前交互中。
时间限制
持续时间
如下图 A请求服务B的时间限制在3秒内没成功,相会发送重试,重试时间从1秒到10秒
3.列子
jwt sso ,服务A充当认证中心角色
spring hibernate 事务
3. api 调用重试