今天小编终于把所有的图都画完啦,在建好系统用例图以及类图基础上分析和设计系统的动态图(结构行为图)并且建立相应的动态模型。
动态模型:描述了系统随时间变化的行为,这些行为是用从静态视图中抽取的系统的瞬间值的变化描述的。
在UML的表现上,动态模型主要是建立系统的交互图以及活动图和状态图。今天咱们主要来聊一聊交互图——包含时序图和协作图。
一、时序图(Sequence Diagram)
一、时序图(Sequence Diagram)也称为序列图、循序图、顺序图等,是一种UML交互图。
时序图是一种描述不同对象之间交互(按时间顺序排列交互)的图。它描述了对象之间传递消息的时间顺序,它用来表示用例中的行为顺序,是强调消息时间顺序的交互图。
时序图中描述的内容有两类:
(1)参与交互的对象;
(2)对象之间消息交互的时间先后顺序。
二、时序图元素:对象(Object)、生命线(Lifeline)、激活(Activation)、消息(Message)
1.对象(Object)
对象 : 时序图中的对象在交互中扮演的角色就是对象;
对象的符号 : 时序图中的对象与对象图中的表示方法一样, 使用矩形将对象名称包含起来, 并且对象名称下有下划线;
对象创建时机 : 对象可以在交互开始的时候创建, 也可以在交互过程中进行创建;
-- 处于顶部 : 如果对象的位置在时序图顶部, 说明在交互开始的时候对象就已经存在了;
-- 不在顶部 : 如果对象的位置不在顶部, 那么对象在交互过程中创建的;
2.生命线(Lifeline)
生命线 : 生命线是一条垂直的虚线, 这条虚线表示对象的存在, 在时序图中, 每个对象的底部都有生命线;
生命线作用 : 生命线是一个时间线, 从时序图顶部一直到底部都存在, 其长度取决于交互的时间;
对象的生命线 : 对象与生命线结合在一起就是对象的生命线, 这个概念包含对象图标 以及 对象下面的生命线图标
3.激活(Activation)—— 控制焦点(Activation)
激活(Activation) : 代表时序图中对象执行一项操作的时期, 激活期可以理解为C语言语义中 {} 中的内容。激活表示该对象被占用以完成某个任务;
去激活(Deactivation) : 指对象处于空闲状态, 在等待消息激活这个对象;
激活的表示 : 当对象处于激活时期, 生命线可以拓宽为矩形, 这个矩形条成为激活条;
激活去激活的时机 :
-- 激活 : 对象激活是在激活条的顶部激活;
-- 去激活 : 激活条的底部去激活, 通常发生在一个消息离开对象生命线;
4.消息(Message)
消息概念 : 定义 交互 和 协作 中 交换信息 的类, 对 对象之间的 通信内容 建模;
消息动作 :
-- 动作种类 : 消息允许在实体间传递信息 (传递参数), 允许实体请求其它服务, 对象之间通过 发送 和 接收 消息 进行通信;
-- 产生结果 : 消息可以触发操作, 唤起信号, 或使目标对象创建 或 销毁;
消息代表对象之间发送的信息。消息分为三个类型:
(1)同步消息(Synchronous Message): 消息的发送者把控制传递给消息的接收者,然后停止活动,等待消息的接收者放弃或者返回控制。用来表示同步的意义。以一条实线+实心箭头表示。
(2)异步消息(Asynchronous Message): 消息发送者通过消息把信号传递给消息的接收者,然后继续自己的活动,不等待接受者返回消息或者控制。异步消息的接收者和发送者是并发工作的。以一条实线+大于号表示。
(3)返回消息(Return Message):返回消息表示从过程调用返回。以小于号+虚线表示。
比如:
同步消息:你叫我去吃饭,我听到了就和你去吃饭;如果没有听到,你就不停的叫,直到我告诉你听到了,才一起去吃饭。
异步消息:你叫我去吃饭,然后自己去吃饭,我得到消息后可能立即走,也可能等到下班才去吃饭。
自关联消息
表示方法的自身调用或者一个对象内的一个方法调用另外一个方法。以一个半闭合的长方形+下方实心剪头表示。
如下图,我们来认识一下这四个元素的表示符号:
消息类型 :
-- : 两个对象间绘制消息;
-- : 两个对象之间的过程调用;
-- : 两个对象之间的异步消息;
-- : 过程调用中返回的消息;
-- : 绘制反身消息;
提示:消息在生命线 上所处的位置并不是消息发生的准确时间,只是一个相对的位置 。如果一个消息 位于另一消息的上方,只说明它先与另一个消息被发送。
使用Rational Rose工具画时序图时的注意点:
1.画一个对象后,显示的可能是不带激活的状态(只有一条生命线),而你需要两个对象之间传递消息,有没有很慌找不到激活的那个小矩形,我该从哪里画消息的连线呢?
哈哈哈,小编就有这个疑惑,手足无措一脸懵。其实,你可以随便在任何位置开始画消息的那根连线,只要你画消息,自然便激活啦。
2.如果画的过程中需要删除某些消息怎么办?
如果你点击Delete,则会删除整个对象,及对象下边涉及的所有信息操作。
如果你只想删除一条消息,可以点击Ctrl+D删除,但是要注意,如果这个消息所在的激活条上还有其他消息,则可能会把附带的其他消息,以及其他消息连接的其他激活条全部删除,这时候可以点击你所要删除的消息连接线,将他移动,使之自己为一个激活条(不影响其他激活条和消息),再点击Ctrl+D即可。
3.如果要撤销一个对象,只要在其生命线终止点放置一个“X”符号即可,该点通常是对 删除或取消 消息的回应。
【二】协作图(Collaboration Diagram)
一、协作图(Collaboration Diagram):
协作图(Collaboration Diagram /Communication Diagram,也叫合作图)是一种交互图(interaction diagram),强调的是发送和接收消息的对象之间的组织结构。
一个协作图显示了一系列的对象和在这些对象之间的联系以及对象间发送和接收的消息。对象通常是命名或匿名的类的实例,也可以代表其他事物的实例,例如协作、组件和节点。使用协作图来说明系统的动态情况。
协作图就是表现对象协作关系的图,它表示了协作中作为各种类元角色的对象所处的位置,在图中主要显示了类元角色(Classifier Roles)和关联角色(Association Roles)。
在UML的表示中,协作图将类元角色表示为类的符号(矩形),将关联角色表现为实线的关联路径,关联路径上带有消息符号。
二、协作图的组成元素:对象(Object)、链(Link)、消息(message)
对象和链分别作为协作图中的类元角色和关联角色出现,链上可以有消息在对象间传递。
1. 对象(Object):对象代表协作图交互中所扮演的角色。(与时序图中对象的概念类似,但是在协作图中,无法表示对象的创建和撤销,所以兑现在协作图中的位置没有限制。)
表示:矩形。 矩形内为对象的名字。
2.链(Link): 协作图中链的符号和对象图中链所用的符号是一样的,即一条连接两个类角色的实线。
表示:一条实线。
作用:连接对象。连线可以有名字,它标注与实线上。
协作图中的对象以及几种常用的链符号:
3.消息(Message):消息代表协作图中对象间通过链接发送的消息。
对象之间的箭头表明在对象间交换的消息流,消息由一个对象发出,由消息所指的对象接收,链接用于传输或实现消息的传递。
消息流上标有消息的序列号和对象间发送的消息。一条消息会触发接收对象中的一项操作。
绘制:消息的图标沿直线方向绘制,消息的箭头指向 接受消息的对象。
时序图和协作图中消息的区别 : 时序图中的消息强调消息的时间顺序, 协作图中的消息强调交换消息的对象间的关系;
三、时序图和协作图的异同:
相同点
(1)规定责任。两种图都直观地规定了发送对象和接收对象的责任。将对象确定为接收对象,意味着为此对象添加一个接口。而消息描述成为接收对象的操作特征标记,由发送对象触发该操作。
(2)支持消息。两种图都支持所有的消息类型。
(3)衡量工具。两种图还是衡量耦合性的工具。耦合性被用来衡量模型之间的依赖性,通过检查两个元素之间的通信,可以很容易地判断出它们的依赖关系。
不同点
(1)协作图是将对象的交互映射到他们之间的链上,而时序图没有相应的链存在,但是也可以随意绘制消息。
(2)时序图可以描述对象的创建和撤销(“X”表示该对象在系统中不再继续使用)的情况。而协作图中,对象要么存在要么不存在,除了通过消息描述或约束,没有其他办法可以表示对象的创建或结束。
(3)时序图可以表示对象的激活和去激活情况。但协作图,没有对时间藐视,所以除了通过对消息进行解释,它无法清晰地表示对象的激活和去激活情况。
四、时序图和协作图的转换:F5
机房收费系统的时序图与协作图:
如图:时序图
如图:协作图:
如果有不足的地方,希望多多指导呦~