Вопросы о диаграммах классов UML?

Здравствуйте, у меня есть несколько вопросов о диаграммах классов UML, любая помощь будет оценена

1) Как вы показываете указатели в атрибутах?

2) Что такое множественность?

3) В каком направлении должны быть стрелки композиции?

4) Как вы ставите перечисления?

2 ответа

В соответствии с текущим стандартом UML 2.4.1 и следующим 2.5 (он отличается почти только более простой документацией):

  • Указатели / ссылки должны быть показаны в виде стрелки с маленьким черным кружком (точка) на указанном конце. Если это не указатель, который объект имеет в качестве атрибута, но он учитывается каким-либо образом, будет стрелка без точки. Если на линии должны быть стрелки с обеих сторон, вы можете опустить обе стрелки. Но не точки! Если стрелка находится только на одной стороне, и вы ЗНАЕТЕ, на другой стороне никого не должно быть, этот пустой конец должен быть подписан крестиком

Прежде чем вы должны понять

что такое ассоциация

  • Ассоциация от A до B показана сплошной линией между A и B. Она может представлять одну структуру, которая связывает класс / экземпляры A с классом / экземплярами B. Структура может быть любого вида и принадлежать где угодно, Вся информация, написанная о линии, описывает эту структуру.
  • Если есть две структуры, одна структура, которая соединяет один экземпляр A с экземплярами (ами) B, и другая структура, которая связывает экземпляр B с экземплярами (ами) A, вы можете показать их обе в ОДНОЙ ассоциации. Затем информация, записанная о его конце B, описывает первую структуру (b->a), а информация о другом конце описывает другую структуру.
  • Если у вас будет более одной структуры, ориентирующейся от A до B, вы должны нарисовать две разные ассоциации.
  • Если структура соединения сложна, вы можете представить ее как Ассоциативный класс. Там вы можете определить более подробную информацию.
  • Объединяющая структура может соединять более двух классов, тогда она будет показана в виде большого ромба с сплошными ветвями для этих классов. Это все еще ассоциация! Внимание: эти две более сложные ассоциации очень плохо поддерживаются существующими инструментами. Вы можете легко создать что-то абсолютно бессмысленное с ними. И они сложные. Используйте осторожно.

пример диаграммы классов


  • Кратность.
    • Случай одной структуры: множественность на обоих концах ассоциации показывает, сколько экземпляров этого смежного класса контролируется этой структурой.
    • Случай двух структур: множественность на конце A ассоциации AB показывает, сколько экземпляров A контролируется структурой, которая ведет от B к A. Она имеет 0 или 1 на стороне B. Номер на другой стороне принадлежит другой структуре.
  • Если этого недостаточно, вы можете использовать две ассоциации для этих двух структур.

Да, это не легко, извините. Но НАМНОГО проще, чем текст "более простого" стандарта 2.5 UML. Простое объяснение является ложным, с его помощью вы быстро столкнетесь с проблемами в любой реальной задаче.

  • Композиция и об этом.

    • Есть только одна композиция "стрела", как вы ее назвали, она называется черный или полный бриллиант. Это на стороне контейнера, а не родитель, конечно. Другой, пустой бриллиант, называется "общая агрегация" или, вкратце, "общая". Он не является строго определенным, и вы можете использовать его, создавая собственный стандарт. Конечно, было бы глупо размещать его на стороне предмета ассоциации предмет-контейнер. Но это легко может быть на обоих концах ассоциации.
    • Почему состав алмаза может быть только на одной стороне? Поскольку состав означает, что элементы существуют ТОЛЬКО в то время, как существуют ссылки на них из контейнера (или самого контейнера). Конечно, это не может работать для обеих сторон.
    • Часто вы можете увидеть название "агрегация" для "общая агрегация". Это плохая ошибка. Потому что, согласно стандарту, composition, shared и даже noneвсе три являются агрегатами. Кто-то смешивает родительские и дочерние термины.
  • Простые старые Enums просты - для них есть своего рода блок классов, @MagicMan правильно выразился. Но они уже устарели. И если вы используете более сложный тип перечисления Java (конечно, он есть и в других языках), и вы устанавливаете разные поля или функции для разных элементов, вы должны использовать для них блоки классов, только вам нужно будет создать свой собственный стереотип (если у вашего инструмента его еще нет) и установите для него соответствующий блок класса.

Редактировать:

Итак, простой указатель - это стрелка с точкой. Но если существует другая, обратная навигация, стрелок вообще не будет, и только точка (и).

В C++ экземпляр A может иметь экземпляр B не по указателю, а напрямую. Для него НЕТ специального знака UML, он должен отображаться так же, как обычный атрибут указателя.

1) Обычный путь подобен этому для односторонней ассоциации (указатель): ---->, но, видимо, правильный путь - добавить точку в конце, чтобы указать указанную сторону: ---->*

2) Multiplicty - это диапазон, в котором он может работать (0..1)т.е. указатель может быть нулевым, так что ноль указывает, что он может иметь от 0 до 1 целевых объектов

3) Стрелки композиции принадлежат стороне содержащего объекта: Container<>-----Child

4) Я видел их представленными так:

_______________________
|   <<enumeration>>   |
|       Colors        |
|_____________________|
| Red                 |
| Green               |
| Blue                |
| ...                 |
|_____________________|

Хороший чит-лист UML: Ссылка

Другие вопросы по тегам