【UML】第14篇 协作图
目录
这个系列暂停了好几天了,适当时候再恢复一下。
UML非常经典,只要在这个行业,代码可能不会写一辈子,但是图肯定是画一辈子。其实,随着行业的成熟,一直写代码也将成为常态。GOOGLE的创始人为了AIGC大模型,也出来写代码了,4800亿身家,斯坦福大牛。这个年纪,应该是代码质量最高、思维最成熟度的时候。性价比也最高,因为工资已经不能再涨了。说程序员是青春饭的,只是当年为了跟资本家多要点工资罢了,青春大好的朋友们,别被忽悠了,持续的学习呀!一朝爱上代码,一生离不开BUG。
一、协作图的概述
协作图的定义:
协作图(Collaboration Diagram),用于显示对象之间的交互,强调对象之间的结构关系以及它们之间发送和接收的消息。协作图通常用于表示系统中的操作或方法的执行过程,并显示在执行这些操作时对象是如何相互合作的。
有一个简单易懂的说法:协作图是序列图的另外一种表示交互的方法,但它不强调时间和序列,协作图的主要用途是描述类的一个操作的实现,用于描述对象之间的简单交互。
应用场景介绍:
协作图在软件工程中非常有用,尤其是在分析和设计阶段。以下是协作图的一些应用场景:
- 理解对象交互:协作图帮助开发人员理解系统中不同对象之间的交互方式,包括它们如何协作以完成特定任务。
- 设计系统行为:在系统设计阶段,协作图可以帮助定义系统的动态行为,展示对象之间的消息传递和方法调用。
- 检测潜在问题:通过分析协作图,开发人员可以在早期阶段发现可能的设计问题,如对象之间的不恰当交互或不必要的依赖。
- 文档和沟通:协作图可以用作项目文档的一部分,帮助团队成员之间沟通系统的结构和行为。
例子:
假设我们有一个简单的银行系统,其中包括Customer
(客户)、Account
(账户)和ATM
(自动取款机)三个对象。客户想要在ATM机上取款。这个场景的协作图可能包括以下几个部分:
- 对象:
Customer
、Account
和ATM
分别作为协作图中的三个对象。 - 链接:表示对象之间的关系。例如,
Customer
与Account
之间可能有一个“持有”关系,而ATM
与Account
之间可能有一个“访问”关系。 - 消息:描述对象之间的交互。例如:
Customer
向ATM
发送一个“插入卡”的消息。ATM
验证卡片后,向Account
发送一个“检查余额”的消息。Account
响应“检查余额”的消息,并向ATM
返回当前余额。Customer
向ATM
发送一个“取款”的消息,指定金额。ATM
向Account
发送一个“扣款”的消息。- 如果账户余额足够,
Account
处理扣款并向ATM
确认;否则,它发送一个错误消息。 ATM
根据Account
的响应向Customer
提供现金或显示错误消息。
- 序列号:表示消息的顺序。
通过这个协作图,开发人员可以清晰地看到在取款过程中涉及的对象、它们的交互以及这些交互的顺序。这有助于确保系统的正确实现和理解。
二、协作图的主要构成
2.1 对象
和序列图中,对象的表示、命名,都是一样的。
有3种表示方法:
- “对象名:所属类名”(下划线)
- “对象名”(下划线)
- “:所属类名”(下划线)
下划线是重要的特色,以表示其是类的一个实例。
2.2 消息
协作图中的消息由三个基本部分构成:发送者、接收者和消息名称。
消息由带消息名称标签的箭头表示。它附着在对象之间的链上。箭头方向指向消息的接收者。
一个消息也可以发送给对象自己,即消息的发送者和接收者都是对象自己。
每个消息都有一个序号,用以表明消息的发送顺序。
消息也有自己的名称,即操作的名称,也可以附带参数,即操作的参数。
在协作图中,消息可以表示以下几种类型的交互:
-
同步消息:发送对象发送消息后,会等待接收对象处理完毕并返回结果后才能继续执行。同步消息通常用于表示方法调用或函数调用,其中发送对象需要接收对象的返回值来继续其操作。
-
异步消息:发送对象发送消息后,不会等待接收对象的响应,而是继续执行其他操作。异步消息用于表示并发或并行的交互,其中发送对象不需要等待接收对象的处理结果。
-
返回消息:返回消息是接收对象对发送对象的响应。它表示接收对象已经处理完发送对象的请求,并将结果返回给发送对象。返回消息通常由接收对象发送回发送对象,并使用虚线箭头表示。
在协作图中,消息的传递顺序可以通过序列号或时间顺序来表示。序列号可以帮助理解对象之间的交互顺序和依赖关系。
消息可以复用序列图中消息的类型和画法,想参考的,可以访问我之前的文章:
我们之前讨论了,消息一共有7种,实际中,上面3种是最常用的。
【UML】第12篇 序列图(1/2)——基本概念和构成-CSDN博客
【UML】第13篇 序列图(2/2)——建模的方法-CSDN博客
?2.3 链
链是对象之间的连接,也是类关联的一个实例。在协作图中,链使用实线或弧来连接两个对象。
链也可以位于一个对象跟自己的连接,链的起点和终点在一个对象上。
例如上面例子中,2个对象之前,持有、访问等关系。这个比较灵活,就是一种对象关系的描述。
三、协作图如何画
协作图比较灵活,和序列图一样,就是描述一个交互的场景的实现。但是序列图有标准的布局,画法,由事件的时间轴去驱动,是我们最基本的思路和画法。
但是在协作图,由于我们忽略了时间的顺序,更多是对交互的网络,交互的可能性,建模。因此对象的布局,10个人能画出10个效果来。
3.1 思路
- 设置交互的语境;
- 设置交互的场景;
- 对每个对象设置初始特性;
- 描述对象之间可能有信息沿着它传递的链;
- 设置消息的顺序号。
由于我们没有序列的概念,序号是很重要的手段。
3.2 步骤
- 确定用例中的交互过程——要描述哪个交互;
- 识别参与交互过程的对象——有哪些对象参与到交互中来;
- 如果需要,为每个对象设置初始特性——这些初始值对对象间的交互是否有影响,有的话可以添加,否则所有对象都有类似的行为;
- 确定对象之间的链, 及沿着链的消息——对象之间有消息传送,就可以确定一个链;
- 从引发该交互过程的初始消息开始,将每个消息附到相应的链;
- 可以使用特别技巧设置消息的循环发送、时间约束等;
- 如果需要,可以为每个消息设置前置条件和后置条件。
先确定链的方式,这样可以从更高层面上,将对象之间的关系,进行描述。
例图,很多,可以到网上看看。
?
序列图可以转换为协作图,一些软件支持这样的操作,比如经典的ROSE。
(关注我,更多实用内容。)?
? ? ? ??
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!