画时序图就和写作文一样,经常会遇到一发而不可收的情况,结果就是得到一个巨大的时序图。这种情况下,作者首先会因为完成了一件大工程而感到自豪,可是一旦他把完成的时序图拿给别人看或者是需要维护的时候就开始意识到问题了,这样的时序图既难理解又难维护。

如果是写代码的话,可以通过定义函数和调用函数来解决这个问题,时序图也提供了类似的手段:交互和交互使用。

交互(interaction)

交互描述了在一个上下文中为了执行一个任务,消息在角色之间是如何交换的。交互描述了行为的模式。

----UML参考手册(第二版)

中文本身相信都能看懂,但想知道说什么却不是那么容易。让我们换一种说法。

定义一个函数除了需要函数体以外还需要函数声明。函数声明规定了调用函数是需要提供哪些信息,函数的返回值是什么。交互的作用也一样。

实例

下面以电车速度控制为例说明,首先看下面的时序图。

电车司机设定加速度上下限,目标速度以后,调用startControlPattern启动指定模式的速度控制,当目标达成或出现异常情况时,结束控制并反馈结束的原因。

这段时序图描述了速度控制是如何进行的,但如果想被其他时序图(严格讲应该是交互图)使用,还需要定义交互。这就像有了函数体,还需要函数声明一样。

定义交互

首先拖动工具箱中的【Interaction】图标到时序中。

接下来在【Interation】属性对话框中各个属性页输入必要的信息。

【General】属性页

输入交互名SpeedControl。

【Behavior】属性页

选择返回值的类型为FinishReason(需要事先定义数据类型)。

【Parameters】属性页

定义max_acc,max_dec,speed一共3个参数。它们相当于函数的形参。

按下【确定】按钮并调整interation框的大小后,时序图就会变成下面这个样子。

外层方框的左上角文字为【int SpeedControl(,,)】,其中的int不是表示整数,而是interation的缩写。

交互使用

定义交互以后自然就是使用交互。

步骤

首 先将定义过Interaction的时序图拖动到使用该交互的时序图,这时会出现如下对话框,这里选【Interaction Occurrence】。在UML中,交互发生(interaction occurrence)和交互使用(interaction use)的含义是一样的。

设定方法

通过随后出现的【Interaction Occurrence】对话框中的各个属性页来进行设定。

【General】属性页

指定调用上下文中的实际名称。本例输入ConstantSpeedControl。这个名称相当于函数调用时的别名。

【Call】属性页

点 击【Behavior】项目右侧的【...】按钮,选择前面定义的SpeedControl交互以后,在【ReturnValue】项目中输入 FinishReason,在AttributeName项目中输入finish_reason。这个finish_reason相当于函数调用时用来接 受返回值的变量。

【Arguments】属性页

为Interation的每个参数指定调用上下文中的变量名。输入的内容相当于定义函数调用时的实参。

按下【确定】按钮以后,调用侧的时序图变成下面这样。

图中明确表明的实参,形参的对应关系,返回值赋值操作等信息。实参应该在使用该交互前指定,返回值可以在调用以后使用。这里省略。

总结

交互和交互使用就是时序图中的函数声明和函数调用。

以上就是今天的文章,如果它能给您带来些许收获,欢迎点赞并推荐给朋友!

更新文章,请扫描下面二维码,关注公众号【面向对象思考】

EAUML日拱一卒--序列图(Sequence Diagram)::交互和交互使用相关推荐

  1. EAUML日拱一卒--序列图(Sequence Diagram)::生命周期

    在实际的程序中,创建对象,删除对象这样的控制对象生命周期的处理可以说比比皆是. 创建对象 下面以图形编辑软件中用户双击鼠标创建新对象为例说明. 处理流程: 用户双击鼠标. Framework生成QMo ...

  2. EAUML日拱一卒 时序图入门

    有些文章将TimingDiagram翻译为定时图,但总是差那么点意思.经过权衡,本文将TimingDiagram译为时序图.对于本系列早期文章中将SequenceDiagram翻译成时序图的情况,将来 ...

  3. EAUML日拱一卒--类图::对象图(object diagram)

    对象图的功能 类图用于说明类以及类之间的关系,但是它相对抽象,有时会比较难理解.比如下面的例子: 上图是一个图形编辑软件的例子,我们有一个超类Shape和它的五个子类.其中ShapeComposite ...

  4. EAUML日拱一卒-活动图::OMG UML2.5中文译文 16.12 Expansion Regisons

    16.12.1 Summary(概要) An ExpansionRegion is a StructuredActivityNode that executes its contained eleme ...

  5. EAUML日拱一卒-活动图:: 对象流

    如果你足够细心,应该可以注意到上一篇文章最后的示例流程中,有一个地方与众不同,就是下图中红框中的部分. 这部分就是今天的内容,对象流. 语义 控制流(control flow)描述了两个活动节点之间执 ...

  6. EAUML日拱一卒 总目录

    用例图 EA&UML日拱一卒 用例图开篇 EA&UML日拱一卒 用例包含关系 EA&UML日拱一卒 用例泛化关系 EA&UML日拱一卒 用例扩展关系 类图 EA& ...

  7. EAUML日拱一卒-微信小程序实战:位置闹铃 (16)-单元测试是个技术活

    程序设计,实现之后的下一个环节就是单元测试了.对于位置闹铃小程序来讲,带着设备到处移动以测试监控点的状态迁移就是一个必经之路,但是如果所有环节都通过实地测试来解决,那将耗费大量的时间和体力. 我们的选 ...

  8. EAUML日拱一卒-微信小程序实战:位置闹铃 (7)-在画面之间共享数据

    序列图 为了理顺用户的操作逻辑,我们将监控点的设定分到选择监控点和编辑监控条件两个画面进行: 为了新建监控点和编辑监控点流程的共通化,创建监控点对象的工作被分配到了主画面. 序列图如下: index. ...

  9. EAUML日拱一卒 用例扩展关系

    用例扩展关系 下面是ULM2.5.1中对用例扩展关系的解释. 扩展是从扩展用例到被扩展用例的关系,它指定扩展用例中定义的行为如何以及何时可以插入到被扩展用例.扩展发生在被扩展用例中定义的一个或多个特定 ...

最新文章

  1. java api 设计_Java API设计实践
  2. 归纳工作中用到的Linux 命令
  3. 康威生命游戏是如何搭建计算机的?
  4. 如何扩展Linux的ip_conntrack
  5. 16.PAE分页实验
  6. 超级楼梯HDOJ2041
  7. js中函数的参数为函数的情况即回调函数
  8. hdu1006 Tick and TIck
  9. mysql设置字段为空字符串_mysql数据类型字段插入空字符串自动填充为0报错
  10. php必填参数校验,laravel请求参数校验方法
  11. CentOS 6.5 中安装Jenkins
  12. .net reflector 反编译失败 索引超出了数组界限问题处理方法
  13. 有限元分析及运用课程笔记第一章:引论
  14. 中控智慧身份证读卡器工具类
  15. 云开发:微信小程序开发-组件化开发
  16. Value did not match schema:\n1. return.ok.Ok2: Invalid type. Expected: array, given: null
  17. sci影响因子小于1计算机,单位入编要求两篇SCI,影响因子大于1.0就可以,请问难吗?...
  18. MD5 SHA1 哈希 签名 碰撞 MD
  19. 团队管理18--员工激励
  20. 羞辱性加薪_如何避免羞辱新人:高级开发人员指南

热门文章

  1. reboot复位ipcam,为何不可靠?
  2. unity的九宫格切割
  3. 看距离纪念日还有多少天的日历软件 便签自动计算距离纪念日剩余天数
  4. 用SVD压缩彩色图片(MATLAB代码)
  5. HiveSQL percentile和percentile_approx 函数计算千分数
  6. Problem Joseph。。。lzl==sz
  7. php global 要点
  8. 如何将exe添加到windows本地服务
  9. python之global关键字
  10. jQuery自定义插件