【UML】第14篇 协作图

发布时间:2024年01月03日

目录

一、协作图的概述

二、协作图的主要构成

2.1 对象

2.2 消息

?2.3 链

三、协作图如何画

3.1 思路

3.2 步骤


这个系列暂停了好几天了,适当时候再恢复一下。

UML非常经典,只要在这个行业,代码可能不会写一辈子,但是图肯定是画一辈子。其实,随着行业的成熟,一直写代码也将成为常态。GOOGLE的创始人为了AIGC大模型,也出来写代码了,4800亿身家,斯坦福大牛。这个年纪,应该是代码质量最高、思维最成熟度的时候。性价比也最高,因为工资已经不能再涨了。说程序员是青春饭的,只是当年为了跟资本家多要点工资罢了,青春大好的朋友们,别被忽悠了,持续的学习呀!一朝爱上代码,一生离不开BUG。

一、协作图的概述

协作图的定义:

协作图(Collaboration Diagram),用于显示对象之间的交互,强调对象之间的结构关系以及它们之间发送和接收的消息。协作图通常用于表示系统中的操作或方法的执行过程,并显示在执行这些操作时对象是如何相互合作的。

有一个简单易懂的说法:协作图是序列图的另外一种表示交互的方法,但它不强调时间和序列,协作图的主要用途是描述类的一个操作的实现,用于描述对象之间的简单交互。

应用场景介绍:

协作图在软件工程中非常有用,尤其是在分析和设计阶段。以下是协作图的一些应用场景:

  1. 理解对象交互:协作图帮助开发人员理解系统中不同对象之间的交互方式,包括它们如何协作以完成特定任务。
  2. 设计系统行为:在系统设计阶段,协作图可以帮助定义系统的动态行为,展示对象之间的消息传递和方法调用。
  3. 检测潜在问题:通过分析协作图,开发人员可以在早期阶段发现可能的设计问题,如对象之间的不恰当交互或不必要的依赖。
  4. 文档和沟通:协作图可以用作项目文档的一部分,帮助团队成员之间沟通系统的结构和行为。

例子:

假设我们有一个简单的银行系统,其中包括Customer(客户)、Account(账户)和ATM(自动取款机)三个对象。客户想要在ATM机上取款。这个场景的协作图可能包括以下几个部分:

  1. 对象CustomerAccountATM分别作为协作图中的三个对象。
  2. 链接:表示对象之间的关系。例如,CustomerAccount之间可能有一个“持有”关系,而ATMAccount之间可能有一个“访问”关系。
  3. 消息:描述对象之间的交互。例如:
    • CustomerATM发送一个“插入卡”的消息。
    • ATM验证卡片后,向Account发送一个“检查余额”的消息。
    • Account响应“检查余额”的消息,并向ATM返回当前余额。
    • CustomerATM发送一个“取款”的消息,指定金额。
    • ATMAccount发送一个“扣款”的消息。
    • 如果账户余额足够,Account处理扣款并向ATM确认;否则,它发送一个错误消息。
    • ATM根据Account的响应向Customer提供现金或显示错误消息。
  4. 序列号:表示消息的顺序。

通过这个协作图,开发人员可以清晰地看到在取款过程中涉及的对象、它们的交互以及这些交互的顺序。这有助于确保系统的正确实现和理解。

二、协作图的主要构成

2.1 对象

和序列图中,对象的表示、命名,都是一样的。

有3种表示方法:

  • “对象名:所属类名”(下划线)
  • “对象名”(下划线)
  • “:所属类名”(下划线)

下划线是重要的特色,以表示其是类的一个实例。

2.2 消息

协作图中的消息由三个基本部分构成:发送者、接收者和消息名称。

消息由带消息名称标签的箭头表示。它附着在对象之间的链上。箭头方向指向消息的接收者。

一个消息也可以发送给对象自己,即消息的发送者和接收者都是对象自己。

每个消息都有一个序号,用以表明消息的发送顺序。

消息也有自己的名称,即操作的名称,也可以附带参数,即操作的参数。

在协作图中,消息可以表示以下几种类型的交互:

  1. 同步消息:发送对象发送消息后,会等待接收对象处理完毕并返回结果后才能继续执行。同步消息通常用于表示方法调用或函数调用,其中发送对象需要接收对象的返回值来继续其操作。

  2. 异步消息:发送对象发送消息后,不会等待接收对象的响应,而是继续执行其他操作。异步消息用于表示并发或并行的交互,其中发送对象不需要等待接收对象的处理结果。

  3. 返回消息:返回消息是接收对象对发送对象的响应。它表示接收对象已经处理完发送对象的请求,并将结果返回给发送对象。返回消息通常由接收对象发送回发送对象,并使用虚线箭头表示。

在协作图中,消息的传递顺序可以通过序列号或时间顺序来表示。序列号可以帮助理解对象之间的交互顺序和依赖关系。

消息可以复用序列图中消息的类型和画法,想参考的,可以访问我之前的文章:

我们之前讨论了,消息一共有7种,实际中,上面3种是最常用的。

【UML】第12篇 序列图(1/2)——基本概念和构成-CSDN博客

【UML】第13篇 序列图(2/2)——建模的方法-CSDN博客

?2.3 链

链是对象之间的连接,也是类关联的一个实例。在协作图中,链使用实线或弧来连接两个对象。

链也可以位于一个对象跟自己的连接,链的起点和终点在一个对象上。

例如上面例子中,2个对象之前,持有、访问等关系。这个比较灵活,就是一种对象关系的描述。

三、协作图如何画

协作图比较灵活,和序列图一样,就是描述一个交互的场景的实现。但是序列图有标准的布局,画法,由事件的时间轴去驱动,是我们最基本的思路和画法。

但是在协作图,由于我们忽略了时间的顺序,更多是对交互的网络,交互的可能性,建模。因此对象的布局,10个人能画出10个效果来。

3.1 思路

  • 设置交互的语境;
  • 设置交互的场景;
  • 对每个对象设置初始特性;
  • 描述对象之间可能有信息沿着它传递的链;
  • 设置消息的顺序号。

由于我们没有序列的概念,序号是很重要的手段。

3.2 步骤

  • 确定用例中的交互过程——要描述哪个交互;
  • 识别参与交互过程的对象——有哪些对象参与到交互中来;
  • 如果需要,为每个对象设置初始特性——这些初始值对对象间的交互是否有影响,有的话可以添加,否则所有对象都有类似的行为;
  • 确定对象之间的链, 及沿着链的消息——对象之间有消息传送,就可以确定一个链;
  • 从引发该交互过程的初始消息开始,将每个消息附到相应的链;
  • 可以使用特别技巧设置消息的循环发送、时间约束等;
  • 如果需要,可以为每个消息设置前置条件和后置条件。

先确定链的方式,这样可以从更高层面上,将对象之间的关系,进行描述。

例图,很多,可以到网上看看。

?

序列图可以转换为协作图,一些软件支持这样的操作,比如经典的ROSE。

(关注我,更多实用内容。)?

? ? ? ??

文章来源:https://blog.csdn.net/giszz/article/details/135358333
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。