序列图是建模过程中必选的一种描述行为的手段,它展示在某些有用的行为中元素之间的消息交换和相互作用。交互是构成行为的一个单元;这些元素必须是可连接元素,通常将这些可连接元素称为交互中的参与者(Participants)。
序列图中的参与者不是类或对象(这和许多建模者的认知不同),它们更接近于协作中的类型化角色或结构化分类器的一部分(实际上是组合关系中的部分)。它们的命名格式为”角色名:类型名“,其中用冒号将名称分割为两个部分,两个部分中任何一部分都可以为空,但不允许同时为空。由于它们不是对象,因此不能对参与者名称加下划线(但在UML的早期版本中允许这样做)。当省略”角色名“时,可以用指定类型的任何参与者来替代。“类型名”通常是类或数据类型的名称,当省略“类型名”时,任何指定角色的参与者都应该是在当前场景下适用且足够用的,而无论它属于哪个类或数据类型。
在“角色名“之后,你可能会看到由方括号包含的选择器”[selector]“,选择器用于指示当前打算使用的多值角色中的哪个元素,但它不是参与者名称的一部分。在实际应用中,selector通常是一个整数值索引,用于指向给定类型元素数组中的一个元素。
下图(图 1)是一个简单的序列图:
图中包含两个参与者:Patron类型的角色current和CirculationSystem类型的匿名角色。如前所述,参与者名称还可以是给出角色名而缺失类型名的形式。
序列图中的参与者一定是”可连接元素“,这些参与者通常描画在序列图的顶部,并且用一个矩形表示,矩形内部则是参与者名称,正如图 1所展示的那样。但根据参与者的不同构造型,它也有其他一些不同的表示形式,常见的一些形式如图 2所示。
在实际建模中,一些建模者会将用例图中的参与者(Actors)作为序列图中的参与者(Participants)。然而不幸的是,在UML规范中,用例图中的参与者(Actors)不能作为序列图中的可连接元素,即序列图中不应当出现参与者(Actors)。但另一方面,几乎所有的UML工具都支持将用例图中的参与者(Actors)作为序列图中的参与者(Participants)使用。这种用法通常被认为是合理的,当系统视角或边界变化时,例如序列图描述一个子系统时,所有其他与当前子系统有交互的子系统都将被视为参与者(Actors),但实际上,所有这些子系统最终都只是整个系统的一部分。包含一个参与者(Actors)的序列图例子如图 3所示。
在序列图顶部的这些参与者(Participants)都向下延伸出一条虚线,这条虚线称为”生命线“。每条生命线表示一个按时间顺序排列的事件(称为发生事件)序列,这些事件在生命线上按照从上到下的顺序发送或接收。在图 1中显示Patron先向CirculationSystem发送一条名为mayIBorrowBooks的消息,随后CirculationSystem回复了一条yesYouMay消息。
从单独一条时间线的角度来看,从图的顶部到底部代表时间顺序。因此,在Patron这一端,yesYouMay消息是在Patron发送mayIBorrowBooks消息之后接收到的;而在CirculationSystem这一端,mayIBorrowBooks消息是在它发送yesYouMay消息之前接收到的。
不同时间线之间位于同一水平线上的事件并不能说明它们在同一时间发生,例如对于mayIBorrowBooks消息,虽然在图 1中,它在Patron端和CirculationSystem端处于同一水平位置,但很容易想象,即使mayIBorrowBooks消息可以很快从Patron端发送至CirculationSystem端,也一定是Patron端的发送时间早于CirculationSystem端的接收时间。
通常,参与者之间的消息以括号结尾,例如mayIBorrowBooks()。在进行业务建模时,由于消息表达的还是概念层级交互,它意在给读者一个关于正在发生的事情的概念,而不试图做到形式上的正确或指定详细的实现细节,因而使用括号的情况较少。而在功能建模时,例如描述类或进程之间的交互,括号用于表示要传递的参数,此时参数将有助于说明通过消息传递的具体信息,对该层级的建模使用括号并标明参数是有用且必要的。
在序列图中,参与交互的生命线的头部通常都对齐在图的顶部。然而,生命线也可以在交互过程中创建,在这种情况下,头部位于创建点,而在创建点之下,新创建的生命线可以与已经存在的生命线进行交互。图 4展示了这种情况,生命线Lifeline2创建生命线Lifeline3,而此后Lifeline2与Lifeline3之间就如一开始就存在的生命线一般展开交互。
在交互过程中创建的生命线在其被创建的时点才开始具有”生命“,但从序列图顶端开始的生命线并不是在当前序列图描述的交互开始时被创建的,它们可能在序列图所描述的交互开始前就已经存在。类似地,当序列图所描述的交互结束之后,它所涉及的各条生命线也并没有终结,而是继续存在。类似于可以在序列图交互过程中创建一条生命线,也可以在交互过程中终结某条生命线。终结生命线的符号是在生命线终结处画上一个大大的”ד,如图 5所示。
一条生命线一旦被终结,将不能够继续参与序列图中的后继交互。
UML之扩展用例_将这两个用例扩展语议,扩展为“用例实现”-CSDN博客
UML之参与者(Actor)_uml actor-CSDN博客
UML之模型、包及包的版型(构造型)_包体系结构-CSDN博客
UML之类型_bolck definition diagram 中的signal,value type,enume-CSDN博客