3、序列图(动态分析)
在面向动态行为进行建模时,通过描述一组相关联、彼此相互作用的对象之间的动作序列和配合关系,以及这些对象之间传递、接受的消息来描述系统为实现自身的某个功能而展开的一组动态行为。重点在于消息在系统内如何按照时间顺序被发送、接受和处理的。
序列图在项目开发中的作用:
(1)确认和丰富一个使用语境的逻辑表达。一个使用情境的逻辑可能是一个用例的一部分或一条控制流。
(2)细化用例的表达。用例常常被细化为一个或者更多的序列图。
(3)有效地描述如何分配各个类的职责。明确每个类应该有的操作(成员函数)
注意:
序列图强调消息发送的时间先后顺序,即对象间消息的发送和接受的顺序;
序列图用来表现用例中的行为顺序,描述了如何一步步完成系统的某项功能;
序列图揭示了一个特定场景的交互,即系统执行期间发生在某个时间点的对象之间的特定交互.
组成
序列图由对象、生命线、激活、消息四个部分组成。
对象和生命线
对象可以是系统的参与者或者任何有效的系统对象;
生命线(Lifeline)是一条垂直的虚线,表示序列图中的对象在一段时间内的存在。
将一个交互的发起者称为主角,置于序列图的最左边;
同一序列图中,可以有同一个类的不同对象;
如果对象位置不在顶部,说明是交互过程中创建的。
激活和消息
激活表示该对象被占用正在执行某个操作,矩形框称为激活条或控制期;
消息是从一个对象(发送者)向另一个或几个对象(接收者)发送信号,或由一个对象调用另一个对象的操作。
UML中,共有4种消息:
- 同步消息
- 过程调用
必须返回一个与之对应的返回消息。 - 同步消息
并不要求必须返回一个与之对应的返回消息。
- 过程调用
- 异步消息
用于控制流在完成前不需要中断的情况;
发送者把控制传递给消息的接收者,然后继续自己的活动,不需等待接收者返回信息或控制。
- 简单消息
适用于不关心消息是同步还是异步的时候。
- 返回消息
表示从过程调用返回;
如果是过程调用(同步)的返回,则返回消息是隐含的,所以返回消息可以不用画出来;
对于非过程调用(异步),如果有返回消息,必须明确表示出来。
扩展
4、协作图
用于描述系统的行为是如何由系统的成分合作实现的。在协作图中,类元角色描述了一个对象,关联角色描述了协作关系中的链,并通过几何排列表现交互作用中的各个角色。一个协作图通常用来代表一个操作或用例的实现。
协作图的作用:
通过描绘对象之间消息的传递情况来反映逻辑表达。一个使用情境的逻辑可能是一个用例的一部分,或是一条控制流。这和序列图的作用类似。
显示对象及其交互关系的空间组织结构。协作图显示了在交互过程中各个对象之间的组织交互关系以及对象彼此之间的链接。
表现一个类操作的实现。消息编号对应了程序中调用结构和信号传递过程。
协作图与序列图之间的异同:
相同点:
都表示对象间的交互关系;
侧重点不同:
序列图强调交互的时间顺序;
协作图强调对象的整体组织与相互的连接;
维度不同:
序列图按照时间维度布图;
协作图按照空间组织维度布图。
组成
由对象,消息和链组成.
对象
一个协作代表了为了完成某个目标而共同工作的一组对象;
同一个类的对象在一个协作图中也可能要充当多个角色。
链
协作图中的链和对象图中的链相同,都是两个或多个对象之间的独立连接,是关联的实例。关联是类与类之前的关系,对象为类的实例,链接为关联的实例;
在协作图中,链的表示形式为一个或多个相连的线或弧;
一个链上可以有多个消息。在链上可以加一些修饰,如角色名、导航,但由于链是连接对象的,所以链的两端没有多重性标记。
消息
消息的名称可以是一个类的方法,包含一个名字和参数表、可选的返回值表。
消息可能要求某个对象返回操作结果的值。
UML提供了返回值的表示法。返回值的名字在最左,后跟赋值号“:=”,接着是操作名和操作的参数。
消息类型
序列图和协作图之间的切换(RR):
打开选中的序列图——>菜单栏“Browse”——>“Create Collaboration Diagram”或按“F5”
5、活动图
活动图是描述系统行为的视图,用来描述动作和动作导致对象状态改变的结果,不用考虑引发状态改变的事件。活动图记录单个操作或方法的逻辑、单个用例或商业过程的逻辑流程。
动图与流程图的主要区别:
活动图是面向对象的,流程图是面向过程
活动图不仅能表达顺序流程控制,还能表达并发流程控制
作用
描述用例的行为。建模用例的工作流,显示用例内部和用例之间的路径;说明用例的实例是如何执行动作以及如何改变对象状态。
理解工作流程。活动图对理解业务处理过程十分有用。可以画出描述业务工作流的活动图与领域专家进行交流。
描述复杂过程的算法。
图形元素
动作状态、活动状态、组合状态、分叉与结合、分支与合并、泳道、对象流。
-
动作状态
指执行原子的(活动图中最小单位)、不可中断的动作,并在此动作完成后通过完成转换转向另一个状态。动作状态是瞬时的行为,不能有入口动作和出口动作,更不能有内部转移。 -
活动状态
活动状态是非原子性的,可以分解成其他子活动或动作状态。可以被使转换离开状态的事件从外部中断。
活动状态是一个程序的执行过程而不是一个普通对象的状态;
活动状态可以用另一个活动图来描述自己的内部活动。
动作状态的非原子态就是活动状态,原子态的活动状态就是动作状态。
活动状态和动作状态表示形式相同,但是活动状态有入口、出口动作信息。
动作状态是活动状态的一个特例,如果某个活动状态只包括一个动作,那么它就是一个动作状态。注意:在UML中,状态指活动状态。 -
组合状态
组合活动是一种内嵌活动图的状态。不含内嵌活动或者动作的活动叫做简单活动,反之称为组合活动,组合活动有自己的名字和相应的子活动图。
将一个活动细分为若干子活动的行为称为——活动的分解
当企图在一个组合活动中表示一个过于复杂的动作时,可以将子图单独放在一个图中,然后使用活动状态引用。 -
分叉与结合(代表并发)
分叉用来表示将一个控制流分成两个或多个并发运行的分支。
结合用来表示将多个控制流汇合成一个,只有当所有控制流都到达结合点时,控制流才能继续进行。
并发指的是多个事件需要在一个时间段内都处理完才能进行下一步骤;并行强调的是同时进行,但是并发的事件在微观上不一定是同时进行的。 -
分支与合并
当动作流遇到分支时,会根据监护条件(布尔值)的真假来判定动作的流向。
分支的每个路径的条件是互斥的,保证只有一条路径被激发。
合并指两个或者多个控制路径在此汇合的情况。
合并和分支常常成对的使用,合并表示从对应分支开始的条件行为的结束。 -
泳道
对活动的职责进行组织而在活动图中将活动状态分为不同的组,称为泳道(swimlane)。
泳道明确表示哪些活动是由哪些对象进行的。
每个活动只能明确的属于一个泳道。
类所执行的动作或拥有的状态按照发生的事件顺序自上而下的排列在泳道内。 -
对象流
对象流(object flow)是将对象流状态作为输入或输出的控制流。描述了动作状态或者活动状态与对象之间的关系,表示了动作使用对象以及动作对对象的影响。
如果箭头从活动指向对象流状态,则表示输出对象(活动对对象造成了影响)。如果箭头从对象流状态指向活动,则表示向活动输入对象(活动使用了这个对象)。
对象流中对象特点:
一个对象可以由多个动作操纵。
一个动作输出的对象可以作为另一个动作的输入对象。
在活动图中,同一个对象多次出现,那么他的每一次出现表明该对象正处于对象生存期的不同时间点。
PS:UML笔记(四)