HashMap в диаграмме классов (UML) - PullRequest
4 голосов
/ 15 января 2012

Я строю диаграмму классов UML 2.0 для своего Java-приложения.В моем коде у меня есть атрибут с типом данных HashMap.Но, как я знаю, в стандарте UML отсутствует тип данных HashMap.Вопрос в том, могу ли я использовать HashMap в качестве типа данных для атрибута класса?

ОБНОВЛЕНИЕ

, возможно, на диаграмме мне просто следует указать на пакет java.util?а может быть, разместить класс Map в этом пакете на диаграмме?

Ответы [ 4 ]

3 голосов
/ 15 января 2012

HashMap не должен появляться в вашей модели UML в любом случае.HashMap - это просто реализация квалифицированной ассоциации.Вероятно, это даже просто улучшенная скорость неквалифицированной ассоциации.Поэтому, если бы у вас был класс A с HashMap, вы бы смоделировали UML-класс A, UML-класс B и UML-ассоциацию от A до B. Вы можете добавить классификатор к ассоциации, если он квалифицирован ключом, который не является атрибутомof B. Если ваш ключ HashMap является именем B (а B имеет это имя в качестве атрибута), вы просто опустите квалификатор.

Чтобы обозначить реализацию вашей ассоциации (вы хотите реализовать ее с помощьюHashSet) вы можете добавить это в качестве ключевого слова или создать для него стереотип (более сложный).

1 голос
/ 15 января 2012

Просто используйте обычный класс в UML и назовите его HashMap.UML не зависит от языка и не знает заранее определенных классов Java.Или я неправильно понял ваш вопрос?

0 голосов
/ 04 февраля 2016

HashMap может быть именем Java для концепции, но каждый язык программирования имеет некоторый класс Hash<> или Map<>, и что-то эквивалентное должно быть включено в UML, потому что многие модели включают атрибуты контейнера Hash или Map.

Некоторые инструменты поддерживают стереотип <<map>>;если у вас есть это, я бы использовал его, если вы в основном озабочены визуальной интуитивностью - но невозможно сказать, какой тип ключа подразумевается.

Графическое UML-устройство квалифицированной ассоциации не является интуитивно понятным, и я подозреваю, что инструментальные средства трудно преобразовать во что-либо разумное при генерации прямого кода.Я бы этого избегал.

Другой способ сделать это (что я обычно и делаю) заключается в следующем:

  • создать класс Hash с V и K в качестве общих параметров.Чтобы сделать это правильно, K действительно должен быть ограничен таким классом, как 'Ordered', также отсутствующим в UML (мы всегда добавляем это)
  • для каждого использования Hash, например Hash<Thing, String> (будьте осторожны с порядком -Сначала я использую значение, затем ключ), создаю класс UML с именем Hash<Thing,String> и исходящее отношение к Hash<>, а затем сопоставляю V и K с фактическими параметрами Thing и String
  • , затем вкласс, который хочет использовать его, определите свойство, например things, тип которого является типом Hash<Thing,String>.

Например, MagicDraw поддерживает это.

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

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

0 голосов
/ 15 января 2012

HashMap - это только один из многих классов Java.
И вы можете использовать любой класс Java, интерфейс или тип примитива в диаграмме классов UML 2.0.
Любой тип данных в диаграмме классов Java UML 2.0 соответствует некоторому классу Java, интерфейсу или примитиву.

Вы используете диаграмму UML для разработки своего собственного приложения. Поэтому не стесняйтесь расширять стандарт UML 2.0 для вашего удобства. Никто не может обвинить вас в этом.

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