uml - UML - 如何建模/或/两者(联合)概念?
问题描述
在我的业务中,我们有一个存储数据的“数据存储”(例如数据库、平面文件等)和一个提供数据的“数据提供者”(例如人类、传感器等)。
在 UML 中对此进行建模对我来说没有问题。但是,有时“实例”既是数据存储又是数据提供者(例如物联网设备)。我该如何建模?
“实例可以是数据存储或数据提供者或两者兼而有之”。
数据存储和数据提供者具有不同的属性,同时(数据存储和数据提供者)的实例应该具有这两个属性。
我在 UML 中寻找多重继承或联合概念,但没有找到正确的概念。谁能给我一个提示如何建模?:-)
编辑:我的主要目标是开发一个概念模型(不是为了实现)。
解决方案
要使某个东西同时成为“数据存储”和“数据提供者”,您有两个选择。第一种选择是对实例进行多重分类。第二种选择是实例化一个专门化这两个类的类。对于任何一种选择,“Data Store”和“Data Provider”类都不能不相交 [1]。
对于第一个选择,UML 实例规范允许多个分类器,它允许您混合和匹配类。如果您创建一个实例规范并使用“数据存储”和“数据提供者”对其进行分类,您将获得您正在寻找的效果。
对于第二种选择,UML 允许一个类专门化多个其他类,这允许您创建这些其他类的交集的子类 [2]。如果您创建一个名为“Data Store Provider”的类并使用泛化箭头将其连接到“Data Store”和“Data Provider”,您也可以获得您正在寻找的效果。
[1] 在 UML 中,您使用具有 meta-property 的 Generalization Set 使类不相交isDisjoint=true
。不要为这些选择中的任何一个这样做。
[2] 在 UML 中,没有办法表达确切的交集,而且大多数人不明白你为什么要这样做。一个名为 Cameo Concept Modeler 的 MagicDraw 插件扩展了 UML,以便您可以表达这一点,以及 UML 无法表达的其他内容,因此您可以对本体进行建模。
推荐阅读
- c# - 为什么在实例化一个类时使用不同的类型和构造函数?
- android - 更新gms库的android x迁移问题
- python - 使用 xlwings 打开 excel 工作表。需要搜索字符串并打印整行
- typescript - 打字稿,将一个对象映射到另一个对象?
- visual-studio-code - VS Code 是否有扩展来替换标题栏?
- python - 请求错误:未找到连接适配器
- python - 如何使用与功能相关的颜色图绘制立方体或平行六面体
- python - 如何使用 django_oauth_toolkit 从 refresh_token 获取新的 access_token?
- filter - 标准外设库中的 STM8A CAN 过滤
- javascript - 点击html标签后Javascript不起作用?