当一个对象订阅另一个对象上的事件时,UML关系是什么?

当一个对象订阅另一个对象上的事件时,UML关系是什么?,uml,staruml,Uml,Staruml,对象B包含一组公共事件 对象A订阅这些事件 它们之间的UML关系是什么 目前我有一个从对象a到对象B的定向关联,对吗?或者方向应该是相反的吗?A和B都可能保持对彼此的引用。A可能想要取消订阅,B当然必须能够通知A事件。因此,我将它建模为一种双向关系。您甚至可能希望B组合所有订阅实例。看看著名的 A和B可能都保持对彼此的引用。A可能想要取消订阅,B当然必须能够通知A事件。因此,我将它建模为一种双向关系。您甚至可能希望B组合所有订阅实例。看看著名的 这取决于你想表达什么 从逻辑上讲,订阅服务器A必须

对象B包含一组公共事件

对象A订阅这些事件

它们之间的UML关系是什么


目前我有一个从对象a到对象B的定向关联,对吗?或者方向应该是相反的吗?

A和B都可能保持对彼此的引用。A可能想要取消订阅,B当然必须能够通知A事件。因此,我将它建模为一种双向关系。您甚至可能希望B组合所有订阅实例。看看著名的

A和B可能都保持对彼此的引用。A可能想要取消订阅,B当然必须能够通知A事件。因此,我将它建模为一种双向关系。您甚至可能希望B组合所有订阅实例。看看著名的

这取决于你想表达什么

从逻辑上讲,订阅服务器A必须知道发布服务器B,反之亦然,因此您具有双向关系


从技术上讲,订阅通常不是由发布服务器B管理,而是由某个调度程序D管理。订阅服务器A知道调度程序D,反之亦然。但是发布者B不知道A,根据提供广播机制的平台,甚至可能不知道dispatcher D。因此,如果您考虑的是特定的平台,请找出哪些类型的对象需要实例变量来引用其他对象,然后根据这一点对关系进行建模。

这取决于你想表达什么

从逻辑上讲,订阅服务器A必须知道发布服务器B,反之亦然,因此您具有双向关系


从技术上讲,订阅通常不是由发布服务器B管理,而是由某个调度程序D管理。订阅服务器A知道调度程序D,反之亦然。但是发布者B不知道A,根据提供广播机制的平台,甚至可能不知道dispatcher D。因此,如果您考虑的是特定的平台,请找出哪些类型的对象需要实例变量来引用其他对象,然后根据该关系建模。

从a到B应该有一个依赖关系(一个从a到B的虚线箭头)。UML规范版本2.5的第7.8.4.1章内容如下:

依赖关系是一种关系,表示单个模型元素或一组模型元素需要其他模型元素来进行规范或实现

在您的例子中,A要求B存在,但B不要求A存在。也许B需要A来实现一个特定的接口。在这种情况下,B取决于接口,而不是A本身

您建议从A到B建立关联。关联比依赖性更强。这意味着A有一个类型为B的属性(好吧,定义有点复杂,参见UML规范的第11.5.3.1章)。这意味着A依赖于B,就像依赖项一样,但依赖项不要求A具有B类型的属性

总结如下:

  • 箭头应该指向A到B,而不是从B到A(除非B的特定实现依赖于称为A的类的存在,这是不可能的)
  • 依赖项就足够了,但如果希望A具有类型B的属性,则可以绘制关联(实线)而不是依赖项(虚线)

从a到B应该存在依赖关系(从a到B的虚线箭头)。UML规范版本2.5的第7.8.4.1章内容如下:

依赖关系是一种关系,表示单个模型元素或一组模型元素需要其他模型元素来进行规范或实现

在您的例子中,A要求B存在,但B不要求A存在。也许B需要A来实现一个特定的接口。在这种情况下,B取决于接口,而不是A本身

您建议从A到B建立关联。关联比依赖性更强。这意味着A有一个类型为B的属性(好吧,定义有点复杂,参见UML规范的第11.5.3.1章)。这意味着A依赖于B,就像依赖项一样,但依赖项不要求A具有B类型的属性

总结如下:

  • 箭头应该指向A到B,而不是从B到A(除非B的特定实现依赖于称为A的类的存在,这是不可能的)
  • 依赖项就足够了,但如果希望A具有类型B的属性,则可以绘制关联(实线)而不是依赖项(虚线)

欢迎来到StackOverflow,@rygo6。如果你找到了你的问题的答案,请考虑(点击复选标记),并考虑投票(点击上箭头)。接受一个答案向更广泛的社区表明,你已经找到了解决方案,给了自己一些声誉分数,并给回答你问题的人一些声誉分数。如果您的问题没有找到令人满意的答案,请留下评论。欢迎访问StackOverflow,@rygo6。如果你找到了你的问题的答案,请考虑(点击复选标记),并考虑投票(点击上箭头)。接受一个答案向更广泛的社区表明,你已经找到了解决方案,给了自己一些声誉分数,并给回答你问题的人一些声誉分数。如果您对您的问题没有找到满意的答案,请留下评论。