目录
这个系列暂停了好几天了,适当时候再恢复一下。
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
提供现金或显示错误消息。通过这个协作图,开发人员可以清晰地看到在取款过程中涉及的对象、它们的交互以及这些交互的顺序。这有助于确保系统的正确实现和理解。
和序列图中,对象的表示、命名,都是一样的。
有3种表示方法:
下划线是重要的特色,以表示其是类的一个实例。
协作图中的消息由三个基本部分构成:发送者、接收者和消息名称。
消息由带消息名称标签的箭头表示。它附着在对象之间的链上。箭头方向指向消息的接收者。
一个消息也可以发送给对象自己,即消息的发送者和接收者都是对象自己。
每个消息都有一个序号,用以表明消息的发送顺序。
消息也有自己的名称,即操作的名称,也可以附带参数,即操作的参数。
在协作图中,消息可以表示以下几种类型的交互:
同步消息:发送对象发送消息后,会等待接收对象处理完毕并返回结果后才能继续执行。同步消息通常用于表示方法调用或函数调用,其中发送对象需要接收对象的返回值来继续其操作。
异步消息:发送对象发送消息后,不会等待接收对象的响应,而是继续执行其他操作。异步消息用于表示并发或并行的交互,其中发送对象不需要等待接收对象的处理结果。
返回消息:返回消息是接收对象对发送对象的响应。它表示接收对象已经处理完发送对象的请求,并将结果返回给发送对象。返回消息通常由接收对象发送回发送对象,并使用虚线箭头表示。
在协作图中,消息的传递顺序可以通过序列号或时间顺序来表示。序列号可以帮助理解对象之间的交互顺序和依赖关系。
消息可以复用序列图中消息的类型和画法,想参考的,可以访问我之前的文章:
我们之前讨论了,消息一共有7种,实际中,上面3种是最常用的。
【UML】第12篇 序列图(1/2)——基本概念和构成-CSDN博客
【UML】第13篇 序列图(2/2)——建模的方法-CSDN博客
链是对象之间的连接,也是类关联的一个实例。在协作图中,链使用实线或弧来连接两个对象。
链也可以位于一个对象跟自己的连接,链的起点和终点在一个对象上。
例如上面例子中,2个对象之前,持有、访问等关系。这个比较灵活,就是一种对象关系的描述。
协作图比较灵活,和序列图一样,就是描述一个交互的场景的实现。但是序列图有标准的布局,画法,由事件的时间轴去驱动,是我们最基本的思路和画法。
但是在协作图,由于我们忽略了时间的顺序,更多是对交互的网络,交互的可能性,建模。因此对象的布局,10个人能画出10个效果来。
由于我们没有序列的概念,序号是很重要的手段。
先确定链的方式,这样可以从更高层面上,将对象之间的关系,进行描述。
例图,很多,可以到网上看看。
?
序列图可以转换为协作图,一些软件支持这样的操作,比如经典的ROSE。
(关注我,更多实用内容。)?
? ? ? ??