UML:信号分类器与类分类器

Pav*_*l_K 8 java uml

如果我理解信号正确,这是两个或多个对象之间的异步消息.例如在UML中我们有一个信号分类器:

-----------------
|  << signal >> |
|  SomeEvent    |
-----------------
|id:Int         |
|text:String    |
-----------------
|getId()        |
|getText()      |
-----------------
Run Code Online (Sandbox Code Playgroud)

然后我们可以用Java编写这个信号如下:

class SomeEvent{
  private final int id;
  private final String text;
  //+constructor + getters
}
Run Code Online (Sandbox Code Playgroud)

但是,在Java中我们有一个CLASS,但在UML中我们有一个SIGNAL分类器,但不是CLASS分类器(更新:我的意思是在这个例子中).怎么解释呢?

ser*_*gej 4

您关于 UML 信号的讨论是正确的。

从规格来看:

10.3.3.1 信号

信号是一种对象之间通信的规范,其中在接收器中异步触发反应而无需回复。接收对象按照第 13.3 节的规定处理信号。通信携带的数据被表示为信号的属性。信号的定义与处理它的分类器无关。


然而,在Java中我们有一个CLASS,但在UML中我们有一个SIGNAL分类器,但没有CLASS分类器。怎么解释呢?

  1. 根据规范,UML 确实有一个 CLASS 分类器。(强调我的):

11.4 类

...类的目的是指定对象的分类并指定表征这些对象的结构和行为的特征。

11.4.4 符号

类使用分类器符号显示。由于 Class 是使用最广泛的分类器,因此不需要关键字来表明元类是 Class。

  1. UML 是独立于编程语言的。

    在Java中,UML类和信号分类器被实现为类。

    又如:UML 有接口分类器,但 C++ 没有接口。C++ 中的接口是一个抽象(纯虚拟)类。