在 UML 类图中,信号的正确设计是什么?

4

这是一件本不应该难以找到的事情,但我搜寻了数小时却找不到确定的答案。

问题如下:

我们有两个类,一个是活动类“传感器”,另一个是“设备”。

当传感器检测到某些东西时,它应该通知设备。所有这些都必须在类图中定义。

我的想法是,传感器发送信号,然后设备接收。很简单吧?我找不到确定正确的建模方式!

首先,在类图中,一个类如何发送信号?我考虑从传感器到信号的有向关联,并使用“send”构造型。这样建模是否正确?

接着,如何表明设备接收到了确切的信息?我知道有一个接收信号的区域,但这可能会被忽略。能否创建信号和接收者之间的直接(图形)关联?


你正在混合使用静态和动态设计。CD是静态设计,而信号是动态的。除非有其他人参与讨论,否则我将在今晚回答。 - qwerty_so
1个回答

2
希望你现在已经知道了,UML图表通常分为两大类:静态和动态。它们分别代表关于元素的信息,例如数据结构、系统组件等(静态),以及交互和系统行为、功能和交互。
类图是静态图之一,因此它不能直接显示两个(或多个)类之间的信号交换。你可以建模指定类发送信号以及接收信号触发类的行为,但它并不表示类之间的直接连接。为此,你必须参考动态图表,信号交换可在活动图、序列图和通信图中描述。
在类图中,信号本身被表示为一个分类器,即一个矩形。它必须有一个附加的构造型,即<<signal>>

enter image description here

接收可以在分类器的...部分(特别是类)中以与信号名称匹配的名称为前缀的Reception形式描绘,前缀为<>。

enter image description here

我在规范中没有找到任何特定的符号(在类图中)来表示一个特定的类可以发送信号。您可以始终使用依赖关系(即带有开放头部的虚线箭头)-作为最弱的关系类型。在该依赖关系上使用构造型<<send>>也不会有害。
我建议不要将与Signal的关系描绘为Association,因为这会暗示Signal是该类的特征(实际上是属性),而这是不正确的。

实际上这是一个关键字(见UML 2.5第168页)。但没关系;-) - qwerty_so
谢谢。但我想知道,异步类在类图中通常如何表示?我搜索了很多,但可行的结果非常少。在现实世界中是否有您展示的实际示例(使用<<send>>构造体和依赖项)? - SomeUserNameForThisWebsite
1
@SomeUserNameForThisWebsite 类是异步的。异步性是关于行为(“动态”)的,而不是关于结构的。您可能会对序列图感兴趣,以显示异步交换和消息交换。 - Christophe
1
@SomeUserNameForThisWebsite 就像 Christophe 已经写过的那样,调用是同步还是异步的事实并不是模型的静态部分,而是动态的,并应在相应的图表中描述。正如我在答案中已经写过的那样,主要的图表包括活动图、序列图和通信图。新手常见的方法是尝试在单个图表中表示结构和行为。这不是 UML 的工作方式。 - Ister
依赖方法是否也适用于信号和接收器?以更好地显示接收器确切地接收到该信号?尽管有专门的隔间? - SomeUserNameForThisWebsite
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接