【问题标题】:UML - How to model either/or/both (union) concept?UML - 如何建模/或/两者(联合)概念?
【发布时间】:2020-04-20 14:47:57
【问题描述】:

在我的业务中,我们有一个存储数据的“数据存储”(例如数据库、平面文件等)和一个提供数据的“数据提供者”(例如人类、传感器等)。

在 UML 中对此进行建模对我来说没有问题。但是,有时“实例”既是数据存储又是数据提供者(例如物联网设备)。我该如何建模?

“实例可以是数据存储或数据提供者或两者兼而有之”。

数据存储和数据提供者具有不同的属性,同时(数据存储和数据提供者)的实例应该具有这两个属性。

我在 UML 中寻找多重继承或联合概念,但没有找到正确的概念。谁能给我一个提示如何建模? :-)

编辑:我的主要目标是开发一个概念模型(不是为了实现)。

【问题讨论】:

  • 这是一个关于 Stack Overflow 的令人耳目一新的好 UML 问题!

标签: uml union modeling hint concept


【解决方案1】:

要将某个东西同时用作“数据存储”和“数据提供者”,您有两个选择。第一种选择是对实例进行多重分类。第二种选择是实例化一个专门化这两个类的类。对于任何一种选择,“Data Store”和“Data Provider”类都不能不​​相交 [1]。

对于第一种选择,UML 实例规范允许多个分类器,它允许您混合和匹配类。如果您创建一个 Instance Specification 并同时使用“Data Store”和“Data Provider”对其进行分类,就会得到您想要的效果。

对于第二种选择,UML允许一个类specialize多个其他类,它允许你创建一个子类intersection那些其他类[2]。如果您创建一个名为“Data Store Provider”的类并使用泛化箭头将其连接到“Data Store”和“Data Provider”,您也可以获得您想要的效果。


[1] 在 UML 中,您使用具有元属性 isDisjoint=true 的泛化集使类不相交。不要为这些选择中的任何一个这样做。

[2] 在UML 中,没有办法表达精确 交集,而且大多数人不明白你为什么要这样做。一个名为 Cameo Concept Modeler 的 MagicDraw 插件扩展了 UML,以便您可以表达这一点,以及 UML 无法表达的其他内容,因此您可以对本体进行建模。

【讨论】:

  • 感谢您的回答!我用以下方式对其进行建模:imgur.com/Kvka0cb(尝试使用方法“如果您创建一个名为“Data Store Provider”的类并使用泛化箭头将其连接到“Data Store”和“Data Provider”)这是正确的吗?我不确定是否允许同时使用“数据提供者”和“数据存储提供者”之间的泛化和断言。
  • 该图中有很多东西需要挑剔,但你有一个大致的想法。您应该考虑提出一个新问题以获得反馈,因为 cmets 不是练习的正确场所。
【解决方案2】:

我可能需要多考虑一下,但想到的一种方法是使用实​​现不同接口的不同(可选)端口:

【讨论】:

  • 非常感谢!我可能忘了提到我的主要目标是制作一个不会实现的概念模型。不过,我会考虑使用接口...谢谢!
  • 这取决于你认为一个概念是什么。以上(对我而言)只是一个概念 :-) 即使在概念层面上,您也可能拥有端口和接口。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多