通信图

作者: ArcherZang | 来源:发表于2019-12-03 12:57 被阅读0次

    以下内容部分出至博客园coolstream,主要是自己懒得写了,部分做了修改。

    简介

    通信图表示对象之间的消息往来,是表述时序图中信息交互的另一种UML图,介绍完时序图就要对照学习一下通信图,二者是一体两面的。

    通信图和时序图可以相互转换,二者的侧重点不同,通信图侧重哪些对象发送或接收了哪些消息,时序图侧重对象之间消息交互的时间顺序。

    通信图建模步骤
    1. 确定系统需要和哪些外部参与者交互通信
    2. 确定系统内哪些主要对象之间有发送或接收消息的需求
    3. 确定外部参与者与系统对象之间、系统内部对象与对象之间的消息内容和消息类型
    4. 用相应的链将参与者和对象、对象和对象或对象自身连起来
    5. 确定参与者与对象之间、对象与对象之间的约束条件
    通信图主要元素
    • 对象:通信图中交互的主体

      1. 三种UML表示法:
        一般表示法:包括对象名、冒号、类名和下划线


        image

        只包括类名、冒号和下划线:标识该类的所有实例,这种方式称为匿名对象


        image
        只包括对象名
        image
      2. 添加对象:
        添加参与者:Actor拖到通信图中


        Actor.PNG

        添加普通对象:直接点击工具栏中的图标,在Name处输入“对象名”


        object.PNG
        添加类信息:右击对象或者actor选择高级的intanceClassifier
        class.png
    • 链接:让消息在不同的对象间传递
      UML表示法

      1. 不同对象之间通信路径


        image
      2. 调用自身属性,会根据情况显示不同效果


        linestyle.png
      3. 添加链接:直接点击工具栏中的图标,选中要关联的对象或者选中自己两次


        associate.PNG
    • 消息:不同对象之间通信的内容。分为链接消息(Link Message)和数据标记(Data Token)两种

      1. UML消息表示法
        不同对象之间或对象自身增加链接消息;分同步和异步

        同向.PNG
        不同对象之间或对象自身反向增加链接消息
        反向.PNG
        不同对象之间的数据标记(EA中没有)
        image
        不同对象之间的反向数据标记(EA中没有)
        image
      2. 消息标签格式:[前置消息号列表] [条件] 消息序列表达式 [返回值 :=] 消息名([参数列表])

        • 前置消息号列表
          消息号:有两种,一种是无层次编号;另一种是嵌套的编号,表示消息的包含层次
          语法规则:消息号,消息号,……,消息号 /(EA中只有一个)
          作用:用来同步线程,表示在发送当前消息之前[前置消息号列表]中各消息号指代的消息被处理
        • 条件
          语法规则:[条件语句]
          作用:当条件满足时才进行通信
        • 消息序列表达式
          语法规则:[消息号|name][recurrence]:
            消息号:参见[前置消息号列表]处解释
            name:同时发送的并发消息
            recurrence:一个条件或循环的执行,有两种选择
              -*[循环语句]:循环用*标识,如 *[x = 1...100]
              -[条件语句]:这里的条件表示分支,如[x > 0]
        • 返回值:操作调用的结果
        • 消息名:消息的名字
        • 参数列表:所需参数列表
        • 示例:
          简单消息:       1: run()
          带返回值的消息:    1: p:=query()
          嵌套消息:       2.2.2: action()
          循环消息:       1.4 *[x = 1...100]: execute()
          条件消息:       3[x > 0]: drive(source, dest)
          带前置消息号列表的消息:2.1, 2.2/2.3: test()  #在发送消息2.3之前先发送消息2.1和2.2
          在EA中默认消息2.1、2.2、2.3是有顺序的,如果要表示2.2和2.3之间没有关联(2.1、2.1.1、2.1.1.1 和 2.2、2.2.1、2.2.1.1使用Sequence Communications Messages的向左向右按钮),但是两者和2.0还是有顺序关系的
      3. 添加链接消息(Add Link Message):

        • 进入添加链接消息操作框:点击两个对象之间的链接,右击后选择要新建的消息


          addmessage.png
        • 设置链接消息的类型:双击链接消息,右侧Properties设置


          Properties.PNG
    通信图与时序图的关系
    • 联系
      都是交互图,都描述了参与者与对象之间、对象与对象之间的消息通信过程
      都需要消息编号来标识顺序
      二者可以相互转化

    • 区别
      侧重点:通信图侧重哪些对象交互了哪些消息;时序图侧重不同对象间交互消息的时间顺序
      创建和销毁对象:通信图中无法创建和销毁对象;时序图中可以明确标识对象的创建和销毁
      激活与去激活:通信图无法标识对象的激活与去激活;时序图中可以明确标识对象的激活与去激活

    • 转化
      时序图转化为通信图:在EA中打开时序图,然后选择菜单Design > Tools > Transform > Transform Selection【Ctrl+Shift+H (transform current Package)、Ctrl+H (transform selected elements)】,选择apply Transformations,然后在Transformations里面选择类型Sequence和目标包。
      原时序图

      communication.PNG
      转化后的通信图(move后)
      transSequence .PNG
      通信图转化为时序图:在EA中打开时序图,然后选择菜单Design > Tools > Transform > Transform Selection【Ctrl+Shift+H (transform current Package)、Ctrl+H (transform selected elements)】,选择apply Transformations,然后在Transformations里面选择类型Communication和目标包。
      原通信图
      alt.PNG
      转化后的时序图(move后)
      tramCommunication.PNG
    • 通信图示例
      以图书馆新书采购流程为例

      image
    • 通信图注意事项
      侧重消息的调用顺序,就使用时序图;侧重参与者之间的链接,就使用通信图。
      通信图中表示对象的方法与对象图中表示对象的方法一致。
      通信图交互过程中可能会创建新对象、销毁已有对象、创建并销毁新对象。
      通信图中的消息较为复杂,需要区分嵌套、条件及循环等消息的应用场景,尤其是多级消息号的使用。

    相关文章

      网友评论

          本文标题:通信图

          本文链接:https://www.haomeiwen.com/subject/pbaqgctx.html