Композиция модели, в которой экземпляр класса используется несколько раз

Я хочу смоделировать следующий сценарий:

  • Сообщение a состоит из одного или нескольких базовых типов.
  • Базовыми типами являются uint8 .. uint64 и int8 .. int64.
  • Сообщение может также содержать другие сообщения.

Пример:

Позиция сообщения

  • uint8 х
  • uint8 г

Движение сообщения

  • позиция начала
  • конец позиции
  • uint8 скорость

Это то, что я пока смоделировал в Sirius Модель Sirius

Проблема здесь в том, что я не могу дважды связать позицию сообщения с движением сообщения. Не могли бы вы предложить подход к моделированию этой проблемы?


person IDontKnow    schedule 05.11.2018    source источник
comment
Что такое движение сообщения?   -  person qwerty_so    schedule 05.11.2018
comment
В примере, который я предоставил, есть два сообщения, одно с названием позиции и одно с названием движения, где позиция сообщения состоит только из базовых типов, а движение сообщения состоит из двух других сообщений, которые являются как позициями, так и одним базовым типом.   -  person IDontKnow    schedule 06.11.2018
comment
Извините, но я не вижу ни одного из них на вашей схеме.   -  person qwerty_so    schedule 06.11.2018
comment
Вы можете создать экземпляр только так, как показано в тексте выше? Если да, то почему у вас нет двух разных классов?   -  person qwerty_so    schedule 06.11.2018
comment
Как будет выглядеть решение с двумя разными классами?   -  person IDontKnow    schedule 07.11.2018
comment
Что ж, просто создайте два класса MessagePosition и MessageMovement, которые представляют особенности, которые вы объяснили.   -  person qwerty_so    schedule 07.11.2018


Ответы (1)


В вашей модели отсутствует один «слой» для представления вашей структуры «тип сообщения» / «экземпляр сообщения».

Я думаю, что вам нужно сделать что-то вроде этого:

  • Класс MessageType с защитной оболочкой в ​​направлении BaseType (который по ИМО следует переименовать примерно в MessageDataType)
  • Класс MessageInstance с включением в себя и ссылкой на MessageType.

Затем конечный пользователь должен сначала создать экземпляр MessageType с именем «позиция», а второй — «движение». Затем создайте три экземпляра MessageInstance, два из которых указывают на MessageType «движение», а один содержит первые два экземпляра MessageInstance.

Я бы также посоветовал серьезно подумать о том, как вы хотите назвать свои концепции, потому что существует потенциальная путаница между экземпляром Ecore одного из ваших EClass и тем фактом, что вы эффективно моделируете структуру типа/экземпляра.

person user1292456    schedule 09.11.2018