Подтвердить что ты не робот

Как описать содержащуюся карту в диаграмме классов UML?

У меня есть класс MyServer, который содержит карту, ключи которой являются объектами MyClientType и значениями которых являются объекты MyClient. Я хотел бы изобразить это отношение в диаграмме классов, но я не могу понять, как это сделать.

4b9b3361

Ответ 1

Вы можете использовать квалифицированную ассоциацию:

┌──────────┐             1 ┌───────┐
│ MyServer │Key│───────────│ Value │
└──────────┘               └───────┘

Смотрите: http://etutorials.org/Programming/UML/Chapter+6.+Class+Diagrams+Advanced+Concepts/Qualified+Associations/ (потому что его трудно рисовать с помощью ASCII)

Обратите внимание также, что квалифицированная ассоциация меняет кратность:

┌──────────┐          0..* ┌───────┐
│ MyServer │───────────────│ Value │
└──────────┘               └───────┘

┌──────────┐             1 ┌───────┐
│ MyServer │Key│───────────│ Value │
└──────────┘               └───────┘

В верхней части показана ассоциация от сервера до 0-n значений. Напротив, квалифицированная ассоциация говорит, что любой заданный ключ будет связан только с одним значением и что вы не можете иметь ключ отсутствующего значения.

Ответ 2

Я бы просто показал связь с MyServer на MyClient с множеством 0.. * в конце MyClient. Все остальное - подробности реализации и может быть оставлено программисту.

Ответ 3

           MyServer
               |
               |*
            T1toT2
            /    \
          1/      \1
         Key     Value

Разница с решением Mark заключается в том, что сервер имеет много отношения к контейнерам. Это также, как Eclipse Modeling Framework (EMF) предлагает реализовать карты.

Вы также можете добавить еще некоторые UML-специфические вещи, например указать, что ключи должны быть уникальными (через стереотипы).

Ответ 4

             MyServer
                 |
                 |
                 |
                Map
                 |
                | |
               |   |
  MyClientTypeKey   MyClientType

Если это не так просто, как указано выше?

  • У MyServer есть один к одному с помощью Map
  • Карта имеет от 1 до многих ассоциаций с ключами и значениями.

Ответ 5

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

"Способ EMF" кажется правильным, однако это дает имхо слишком большое значение для типа, что действительно несущественно, поэтому я бы моделировал его как класс ассоциации. Это позволит вам фиксировать все специфические для карты ограничения (например, множественность), которые могут быть записаны с использованием обычного класса, но не сделает этот класс таким же важным, как другие.

Ответ 6

Ответ Kru - лучший, но он все еще только намекает на карту.

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

           MyServer
               |
               |
              Map                
               |
               |*
            T1toT2
            /    \
          1/      \1
         Key     Value

То, как карта затем реализована в коде, совершенно не имеет значения (T1toT2 объекты времени выполнения на самом деле не могут быть).

Как уже упоминалось Gabreil, это можно было бы также смоделировать с использованием класса ассоциации

           MyServer
               |
               |
              Map                
               |
               |*
            T1toT2
               |
               |
          1--------1
         Key     Value

Конечно, это только вопросы, если вам действительно нужно показать или указать карту.