Представление массива массивов на диаграмме UML - PullRequest
3 голосов
/ 13 апреля 2020

Как я могу представить указатель на массив указателей на другие массивы (в виде матрицы) на диаграмме UML?

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

Ответы [ 2 ]

2 голосов
/ 13 апреля 2020

Действительно, чтобы пояснить, что qwerty_so и Bruno уже ответили, стандартные типы данных UML очень ограничены и свойства может иметь не более одномерной кратности.

Для типов языка программирования c мы обычно включаем (часто неявно) профиль , чтобы расширить метамодель дополнительными типами данных. Это нормально для отсутствующих типов и template-type . Но, к сожалению, он не работает для преобразования кратностей в измерения массива.

Здесь есть два варианта:

  1. Будьте прагматичными c: просто предположите, что вы можете использовать систему типов C ++ в вашем UML через гипотетический профиль.

    • Преимущество: краткая запись; Большинство людей поймут, что вы имеете в виду.
    • Неудобство: несовместимо со спецификациями: если вам необходимо контрактно доставить совместимую модель, вам лучше обратиться к следующему варианту.
  2. Be le git: продолжайте абстрагировать свой дизайн и не попадитесь на собственное решение о реализации. В этом случае матрица больше не будет двумерным массивом, а будет Ditionary / map, который отображает пару координат в целое число. Это сделано в UML с квалифицированной ассоциацией . В этом понимании размеры массива будут выражаться как ограничения для классификатора.

    • Преимущество: полностью соответствует требованиям; выразительным; более мощный дизайн, поскольку он не будет заставлять вас использовать многомерные массивы, но позволит также использовать разреженную матрицу, реализованную с неудобством std::map<std::pair<size_t,size_t>,int>
    • : менее интуитивно понятным для чтения

С графической точки зрения это может выглядеть следующим образом:

enter image description here

1 голос
/ 13 апреля 2020

Некоторые мысли

UML в основном является языковой независимостью c. А многомерные массивы - это просто язык, определяемый c а), который вообще имеет обозначения и б) в каком синтаксисе. Чтобы оставаться в безопасности, вы не должны показывать такие детали.

Во всяком случае, иногда вам нужно показать их. Если это так, вам нужно знать, что ваша модель больше не зависит от деталей реализации, как это должно быть. Разработчик моделей обычно переводит бизнес-потребности в формализм, понятный программисту. И кодер просто знает, как реализовать эти детали. Доверяй своему кодеру, не бери его на короткую очередь. Если вы не можете доверять им, вы все равно обречены.


Сказав выше, и вы все еще хотите показать массив как двумерный, вы можете сделать это так:

enter image description here

Сам UML не поддерживает нотацию (только коллекции являются одномерными). Но если это по какой-либо причине поможет вам и программистам, я бы не возражал.

Зависит или нет то, что вышеизложенное поддерживается инструментом UML, зависит. Используя EA, мне нужно было определить тип данных int[3] и установить кратность 3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...