• Python设计模式


    简介

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

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

    通信图建模步骤

        - 确定系统需要和哪些外部参与者交互通信

        - 确定系统内哪些主要对象之间有发送或接收消息的需求

        - 确定外部参与者与系统对象之间、系统内部对象与对象之间的消息内容和消息类型

        - 用相应的链将参与者和对象、对象和对象或对象自身连起来

        - 确定参与者与对象之间、对象与对象之间的约束条件

    通信图主要元素

    • 对象:通信图中交互的主体

          - 三种UML表示法

              - 一般表示法:包括对象名、冒号、类名和下划线

                  

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

                  

              - 只包括对象名

                  

          - 添加对象

              - 添加参与者:在User Case View中添加Actor或在Class Diagram中创建好类并将该类的Stereotype改成Actor,然后将该Actor从拖到通信图中

                

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

                 

    • 链接:让消息在不同的对象间传递

           - UML表示法

                - 不同对象之间通信路径

                

                - 调用自身属性

                  

           - 添加链接:直接点击工具栏中的图标

                 

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

          - UML消息表示法

                - 不同对象之间或对象自身增加链接消息

                   

                - 不同对象之间或对象自身反向增加链接消息

                   

                - 不同对象之间的数据标记

                   

                - 不同对象之间的反向数据标记

                   

          - 消息标签格式:[前置消息号列表]  [监护条件]  消息序列表达式   [返回值 :=] 消息名([参数列表])

              - 前置消息号列表

                  - 消息号:有两种,一种是无层次编号;另一种是嵌套的编号,表示消息的包含层次

                  - 语法规则:消息号,消息号,……,消息号 /

                  - 作用:用来同步线程,表示在发送当前消息之前[前置消息号列表]中各消息号指代的消息被处理

              - 监护条件

                  - 语法规则:[条件语句]

                  - 作用:当条件满足时才进行通信

              - 消息序列表达式

                  - 语法规则:[消息号|name][recurrence]:

                        - 消息号:参见[前置消息号列表]处解释

                        - name:同时发送的并发消息

                        - recurrence:一个条件或循环的执行,有两种选择

                            - *[循环语句]:循环用*标识,如 *[x = 1...100]

                            - [条件语句]:这里的条件表示分支,如[x > 0]

              - 返回值:操作调用的结果

              - 消息名:消息的名字

              - 参数列表:所需参数列表

              - 示例:

                  - 简单消息:         1: run()

                  - 带返回值的消息:      1: p:=query()

                  - 嵌套消息:         2.2.2: action()

                  - 循环消息:         1.4 *[x = 1...100]: execute()

                  - 条件消息:         [x > 0] 3: drive(source, dest)

                  - 带前置消息号列表的消息:  2.1, 2.2/2.3: test()  #在发送消息2.3之前先发送消息2.1和2.2

     

          - 添加链接消息(Add Link Message)

              1. 进入添加链接消息操作框:点击两个对象之间的链接,弹出Link Specification对话框

                  

              2. 添加链接消息:右键点击Link Specification选项卡,在弹出的菜单中选择"Insert to: School"或"Insert to: student"

                

     

            

              3. 设置链接消息的类型:双击链接消息,进入"Detail"选项卡,选择需要的消息类型

                

           - 添加数据标记(Add Data Token):数据标记主要用于

              

              1. 选中数据标记按钮其中之一

                

                

              2. 单击需要返回的链接消息,数据标记就会被添加到这个链接消息上

       

                

    通信图与时序图的关系

      

    • 联系

          - 都是交互图,都描述了参与者与对象之间、对象与对象之间的消息通信过程

          - 都需要消息编号来标识顺序

          - 二者可以相互转化

    • 区别

          - 侧重点:通信图侧重哪些对象交互了哪些消息;时序图侧重不同对象间交互消息的时间顺序

          - 创建和销毁对象:通信图中无法创建和销毁对象;时序图中可以明确标识对象的创建和销毁

          - 激活与去激活:通信图无法标识对象的激活与去激活;时序图中可以明确标识对象的激活与去激活

    • 转化

          - 时序图转化为通信图:在Rose中打开时序图,然后选择菜单【 Browse】-> Create Collaboration Diagram 或者直接按 F5

              - 原时序图

                 

              - 转化后的通信图(move后)

                

          - 通信图转化为时序图:在Rose中打开通信图,然后选择菜单【 Browse】-> Create Sequence Diagram 或者直接按 F5

              - 原通信图

                 

              - 转化后的时序图(move后)

                

    通信图示例

    以图书馆新书采购流程为例

    通信图注意事项

        - 侧重消息的调用顺序,就使用时序图;侧重参与者之间的链接,就使用通信图

        - 通信图中表示对象的方法与对象图中表示对象的方法一致

        - 通信图交互过程中可能会创建新对象、销毁已有对象、创建并销毁新对象

        - 通信图中的消息较为复杂,需要区分嵌套、条件及循环等消息的应用场景,尤其是多级消息号的使用

  • 相关阅读:
    ButterKnife 原理解析
    有关java之反射的使用
    Integer 与 int 中的 ==
    下拉框、多选框、单选框 通过TagHelper绑定数据
    动态构建视图表单
    添加我的应用中的后台图标
    标准服务接口示例代码
    .net Core下的 常用方法
    使用Redirect跳转
    标准表单提交示例代码
  • 原文地址:https://www.cnblogs.com/coolstream/p/9573452.html
Copyright © 2020-2023  润新知