UML - 如何建模一个/或/两个(联合)概念?

标签 uml union modeling hint concept

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

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

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

数据存储和数据提供者具有不同的属性,一个既是数据存储又是数据提供者的实例应该具有这两种属性。

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

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

最佳答案

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

对于第一个选择,UML 实例规范允许多个分类器,这允许您混合和匹配类。如果您创建一个实例规范并将其分类为“数据存储”和“数据提供者”,您将获得您正在寻找的效果。

对于第二种选择,UML 允许一个类专门化多个其他类,这允许您创建交集子类那些其他类 [2]。如果您创建一个名为“Data Store Provider”的类,并使用泛化箭头将其连接到“Data Store”和“Data Provider”,您也可以获得您正在寻找的效果。


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

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

关于UML - 如何建模一个/或/两个(联合)概念?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59554837/

相关文章:

java - UML 2.x : isLeaf vs isReadOnly

sql - UNION 多个存储过程的结果

sql - 条件结合

php - Zend 框架中的建模

uml - 什么是 UML 概要图以及何时使用它?

c++ - 如何在UML类图中绘制C++概念?

php - 这是 AJAX 的 UML 序列图 - 使用 JS 和 PHP 进行数据库查询吗?

java - UML 类图关系

c++ - 为什么继承的结构成员在 union 中不可访问?

visual-studio - 通用类型的 Visual Studio UML 类图和建模