【问题标题】:Model composition where instance of class is used multiple times多次使用类实例的模型组合
【发布时间】:2019-04-08 17:44:48
【问题描述】:

我想模拟以下场景:

  • 消息 a 由一种或多种基本类型组成。
  • 基本类型为 uint8 .. uint64 和 int8 .. int64。
  • 一条消息还可以包含其他消息。

示例:

留言位置

  • uint8 x
  • uint8 y

消息移动

  • 位置开始
  • 定位结束
  • uint8 速度

到目前为止,这是我在 Sirius 中建模的内容

这里的问题是我无法将消息位置两次链接到消息移动。您能否提供一种对此问题进行建模的方法?

【问题讨论】:

  • 什么是“消息运动”?
  • 在我提供的示例中,有两条消息,一条称为位置,一条称为移动,其中消息位置仅由基本类型组成,消息移动由另外两条消息组成,它们既是位置又是一种基本类型。
  • 抱歉,我在您的图表中没有看到任何这些。
  • 是不是只能按照上面文字所示的方式实例化?如果是这样,为什么你没有两个不同的类?
  • 好吧,只需创建两个类 MessagePositionMessageMovement 代表您解释的细节。

标签: class-diagram emf eclipse-emf eclipse-emf-ecore ecore


【解决方案1】:

您的建模缺少一个“层”来表示您的“消息类型”/“消息实例”结构。

我认为你需要做的事情有点像这样:

  • MessageType 包含对 BaseType 的遏制(IMO 应将其重命名为 MessageDataType 之类的名称)
  • MessageInstance 具有对自身的遏制和对 MessageType 的引用。

然后您的最终用户必须首先创建一个称为“位置”的MessageType 实例,然后再创建一个称为“运动”的第二个实例。然后创建三个MessageInstance 实例,两个指向MessageType“运动”,一个包含前两个MessageInstance 实例。

我还建议您认真考虑如何命名您的概念,因为您的 EClass 之一的 Ecore 实例与您正在有效地建模类型/实例结构这一事实之间存在潜在的混淆。

【讨论】:

    猜你喜欢
    • 2022-08-14
    • 2018-11-02
    • 1970-01-01
    • 2019-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    相关资源
    最近更新 更多