【UML】UML交互图(顺序图和通信图)

1.交互图简介

UML使用交互图来描述对象间通过消息的交互,交互图可以用于动态对象建模

当我们要考虑真正的面向对象设计细节时,就必须要“落实”发送哪些消息、发送给谁、以何种顺序发送等具体问题。应该花费时间使用交互图进行动态对象建模,而不仅是使用类图进行静态对象建模。

交互图在精化阶段中使用,用来描述一个用例的行为,显示该用例中所涉及的对象以及这些对象之间的消息传递情况

2.前置——CRC cards(Class-Responsibility-Collaborator)

CRC卡用于职责分配,是交互图和类图的极简版,在初始阶段使用

  • 类 类名写在整个CRC卡的最上方。
  • 职责 包括这个类对自身信息的了解,以及这些信息将如何运用。这个部分在CRC卡的左边。
  • 协作 指代另一个类,这里写的信息是协作的类名。我们通过这个类获取我们想要的信息或者相关操作。这个部分在CRC卡的右边。

3.对比和优缺点

在这两种类型的交互图中,顺序图具有更丰富的符号标记,更容易查阅,但是通信图也有其独特的功能,尤其适用于在墙上画草图。

  • 表示法选项方面,UML规范更多是以顺序图为核心,对其表示法和语义投入了更多的精力。因此,顺序图对工具的支持更好,并且有更多有效的表示法选项。
  • 阅读顺序方面,采用顺序图可以更方便地表示调用流的顺序,仅需要由上至下阅读即可,而对于通信图,我们则必须查阅顺序编号。因此,顺序图在文档化方面更胜一筹。
  • 空间效用方面,通信图更具有优越性,因为可以在任何位置(水平或垂直)方便地放置或擦除框图。相比之下,在顺序图中添加的新对象时必须总是位于纸(或墙)的右边,因而右边的空间会很快被占用;垂直方向的空余空间不能得到有效利用。因此,用通信图绘制的墙上草图更易于修改,在墙上绘制。

4.交互图详解

4.1 顺序图通信图共同点

生命线框图

UML中定义了参与者框图的以下几种表达:

参与者框图

消息表达式

交互图展示了对象之间的消息,UML对于这些消息表达式具有标准语法:

return = message(parameter : parametreType) : returnType

没有返回值时,返回值可省略,没有参数时,圆括号可省略,类型信息不重要时也可省略,甚至可以只保留方法名

4.2 顺序图

基本构成

  • 虚线为生命线(类的存活时间)
  • 箭头实线代表对象间的消息(典型同步消息)
  • 执行规格条(Execution specification bar)表示控制期(focus of control)
  • 最开始的消息在UML中称为初始消息,没有特定发送者。
  • 返回值的消息既可以使用消息表达式来表示,也可以通过反方向的虚线箭头表示应答线,应答线上应标记返回值。
  • 还有发送给自身的消息
    顺序图的消息

创建与销毁对象

  • 在某个对象当中创建新实例,使用create
  • 并且新创建的对象,被置于其创建的“高度”上
  • 若需要显式地表示对象的销毁,用大X和终止于大X的生命线表示。
    对象的创建与销毁

框图

有条件框图,里面的方法都遵循该条件执行(if,for等等),more items代表保护消息,或者称作条件子句

下图左侧是以图框操作符opt表示的"“有条件消息”,右侧是以图框操作符alt表示的"互斥的有条件消息"。互斥的有条件消息的图框用虚线分为上下两部分,条件子句为真时,走上方的消息路径,否则走下方的路径。

有条件消息
下图是循环消息的两种表示法。

循环消息的图框表示法

标记ref的框图,是引用其他顺序图来简化,命名其他顺序图只要打上sd标签
image.png
至于常见图框操作符的含义,如下表所示:

图框操作符

多态

多态类,以这种方式对抽象类以及其每个实现画图
image.png

同步与异步

异步调用使用的箭头为刺形箭头,因为不用等待响应,因此不会阻塞,而常规同步(阻塞)调用用实心箭头表示
异步和同步调用

主动对象(active object)在生命线框图两侧加双竖线。
即在其进行的执行线程中运行或控制自己的执行线程的实例

顺序图代码实例

代码与图之间的关系如图所示,被指向的类B拥有箭头所示方法,发出箭头的类A调用方法

image.png

消息的传播
1.makePayment消息被发送到Register一个实例
2.Register实例将makePayment消息发送到Sale实例
3.Sale实例创建Payment实例
image.png

4.3 通信图

链、消息

链(link)是连接两个对象的路径,它指明了对象间某种可能的导航和可见性,更正式地说,链是关联的实例

如图所示,从Register到Sale之间有一条链,消息会沿此链流转,例如makePayment消息。

  • 对象间的每个消息都可以使用消息表达式,和指明消息方向的小箭头表示,许多消息会沿着此链传输,可以增加顺序编号,以表示当前控制线程中消息的次序需要注意所有的消息在同一条链上流转。
    image.png

  • 对象可以向自身发送消息,在这种情况下,使用到自身的链来表示,消息将沿着此链传输。

image.png

创建实例

image.png

消息嵌套(编号)

  • 可以不给起始消息(外部消息)编号,这样可以简化编号易于理解
    image.png

有条件消息

image.png

带有互斥路径的有条件编号

image.png

三者组合使用

通信图的消息编号

迭代和循环

迭代子句和循环条件子句不重要时可以用星号简化

代表遍历lineItems中每个元素
image.png

多态

image.png

同步和异步消息

一样是刺形箭头代表异步调用
image.png

  • 8
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值