【问题标题】:Representation array of arrays on UML diagramUML 图上的数组表示数组
【发布时间】:2020-04-13 06:25:08
【问题描述】:

如何在 UML 图上表示指向指向其他数组(作为矩阵)的指针数组的指针?

class C
{
  int Matrix[3][3];
  ...
}

【问题讨论】:

  • fwiw,您的代码 sn-p 中没有指针
  • 是的,你只有一个 int 的二维数组

标签: c++ arrays pointers uml


【解决方案1】:

确实,要详细说明qwerty_soBruno 已经回答的内容,standard UML data types 非常有限,properties 最多可以具有一维多重性。

对于特定于编程语言的类型,我们通常包含(通常是隐含的)profile 以使用其他数据类型扩展元模型。这对于缺少的类型和template-type 来说是可以的。但不幸的是,它并不能真正用于将多重性转换为数组维度。

这里有两个选项:

  1. 务实:假设您可以通过假设的配置文件在 UML 中使用 C++ 类型系统。

    • 优点:符号简洁;大多数人都会明白你的意思。
    • 不便之处:不符合规范:如果您必须通过合同交付符合要求的模型,则最好查看下一个选项。
  2. 合法:进一步抽象你的设计,不要被你自己的实施决定所束缚。矩阵将不再是二维数组,而是将一对坐标映射到整数的字典/映射。这是在 UML 中使用qualified association 完成的。在这种理解中,数组的维度将在限定符上表示为constraints

    • 优势:完全合规;富有表现力;一个更强大的设计,因为它不会强迫您使用多维数组,但允许您使用通过 std::map<std::pair<size_t,size_t>,int> 实现的稀疏矩阵
    • 不便之处:阅读起来不太直观

从图形的角度来看,它可能看起来像以下之一:

【讨论】:

  • 基本上:是的。但是通过对映射矩阵是错误的。你应该留在第二个。
【解决方案2】:

一些想法

UML 基本上与语言无关。并且多维数组只是特定于语言的a)完全具有符号和b)其中的语法。为了安全起见,您不应显示此类详细信息。

无论如何,有时您需要展示它们。如果是这样,您需要知道您的模型不再像应有的那样独立于实现细节。建模者通常将业务需求转化为编码人员可以理解的形式。编码人员只知道如何实现这些细节。相信你的编码员,不要让他/她走短线。如果你不能信任他们,你无论如何都注定要失败。


如上所述,您仍然希望将数组显示为二维,您可以这样做:

UML 本身不支持这种表示法(只有集合是一维的)。但如果它出于任何原因对您和编码人员有帮助,我不介意。

UML 工具是否支持上述内容取决于。使用 EA,我需要将数据类型定义为 int[3],并将多重性设置为 3

【讨论】:

  • 有 9 个 int 所以合法的多重性是 [9],[3][3] 不是一个有效的多重性,反正...
  • @Bruno,我原则上同意并严格遵守 UML 标准。但是,这不是一种务实的方法吗?它已充分记录(在简介中?)并得到利益相关者的同意?
  • @Christophe 今天早上我们进行了更长时间的讨论,但由于我的过错而匆匆而过,我们将其删除。是的,仅仅为了符合 UML 标准而使其 [9] 不会帮助任何想要阅读其背后的想法的人。
猜你喜欢
  • 2018-07-19
  • 1970-01-01
  • 2017-10-09
  • 2017-04-03
  • 2013-09-04
  • 1970-01-01
  • 1970-01-01
  • 2012-03-23
  • 1970-01-01
相关资源
最近更新 更多