Взаимосвязи
Много в UML касается программирования, поэтому UML как язык для общения с бизнесом, применяется очень скудно, но я попробую привести пример на основе компьютера.
Взаимосвязь | Пример | Описание | ||
Ассоциация | наличие обязательных деталей | Компьютер | Если у сложного устройства есть в наличии обязательные детали (материнская плата, процессор, озу) значит это компьютер | |
Наследование | сложное устройство | Компьютер | Любое сложное устройство (ноутбук, планшет, умные часы и т.д.) является представителем компьютера | |
Реализация/Имплементация | компьютер | Стандарты сборки | Чтобы правильно собрать компьютер, нужно следовать неким стандартам сборки (размеры, виды разъемов, версии протоколов взаимодействия и т.д.) | |
Зависимость | компьютер | Электричество | Работа компьютера зависит от электричества, но электричество не зависит от компьютера | |
Агрегация | дополнительные детали | Компьютер | В компьютере могут быть дополнительные детали (точпад, веб-камера и т.д), но их может и не быть | |
Композиция | обязательные детали | Компьютер | Без обязательных деталей компьюетр не может быть собран (материнская плата, процессор, озу) |
Мне кажется, чтобы описать подобными взаимосвязями свою бизнес-структуру, нужно искать в голове примеры по каждой взаимосвязи.
Конечно, чтобы построить диаграмму, нужно ознакомиться вкратце с каждым из 13 официальных типов диаграмм, которые описаны UML 2.
Диаграмма |
Цель |
Происхождение |
Деятельности |
Пример программный: процедурное и параллельное поведение. Пример из жизни: рабочий поток организации, способы взаимодействия программного обеспечения и пользователей, контекст работы сложных прецедентов. |
В UML 1 |
Классов |
Пример программный: Классы, свойства и отношения. Пример из жизни: точный словарь предметной области. |
В UML 1 |
Взаимодействия |
Взаимодействие между объектами; акцент на связях |
Диаграмма коопераций в UML 1 |
Компонентов |
Структура и взаимосвязи между компонентами |
В UML 1 |
Составных структур |
Декомпозиция класса во время выполнения |
Новое в UML 2 |
Развертывания |
Развертывание артефактов в узлы |
В UML 1 |
Обзора взаимодействий |
Комбинация диаграммы после довательности и диаграммы деятельности |
Новое в UML 2 |
Объектов |
Вариант конфигурации экземпляров |
Неофициально в UML 1 |
Пакетов |
Пример программный: иерархическая структура времени компиляции. Пример из жизни: высокоуровневую организацию программного продукта. |
Неофициально в UML 1 |
Последовательности |
Взаимодействие между объектами; акцент на последовательности |
В UML 1 |
Конечных автоматов |
Как события изменяют объект в течение его жизни. Второе название — диаграмма состояний. |
В UML 1 |
Временная |
Взаимодействие между объектами; акцент на синхронизации |
Новое в UML 2 |
Прецедентов |
Как пользователи взаимодействуют с системой |
В UML 1 |
Авторы UML считают, что диаграммы определены не очень строго. Часто вполне допустимо присутствие элементов диаграммы одного типа в другой диаграмме.
Стоит добавить, что иерархия UML диаграмм и полное описание каждого типа хорошо продемонстрированы в википедии.
В целом, Вы теперь знаете базовые вещи о UML-диаграммах, но чтобы закрепить знания, рекомендую рассмотреть несколько схем с пояснениями к ним.
Типы элементов нотации
- фигура (shape) — прямоугольники и эллипсы, внутри фигур могут помещаться другие элементы нотации: тексты, линии, значки и даже другие фигуры. Единственное требование: должно быть однозначно понятно, что элемент нотации находится внутри фигуры, в частности, его изображение не должно пересекать границу фигуры.
- линия (line) — могут быть прямые, ломаные, плавные кривые, сплошные и пунктирные. Всегда присоединяются своими концами к фигурам или значкам, они не могут быть нарисованы сами по себе. К линиям могут быть пририсованы дополнительные элементы: стрелки на концах, тексты и т.д. Единственное требование: должно быть ясно, что дополнительный элемент относится именно к данной линии. Линии могут пересекаться, и это ничего не значит, но рекомендуется избегать таких случаев, поскольку это затрудняет восприятие.
- значок (icon) — не имеют внутренности, в которую можно что-то поместить.
- текст (text) — различаются прямые, курсивные и подчеркнутые тексты
- рамка (frame) — используется исключительно как контейнер для других фигур, линий, значков и текстов
Нотация UML довольно свободная: рисовать можно как угодно, лишь бы не возникало недоразумений. Например рассмотрим пример «Четыре способа представления ребер» из книги Фаулер М. UML. Основы (3-е издание, 2005):
Поставщики инструментов работы с UML пользуются свободой кто во что горазд: использование цветов для заливки фигур и раскрашивания линий, тени у значков и фигур, разные шрифты в текстах, наконец, анимация изображений ‒ все это, конечно не обязательные, но полезные вещи, поскольку повышают наглядность картинок.
Диаграмма классов
Кратность
- 1 Заказ может представить только один клиент.
- 0..1 (Корпоративный клиент может иметь, а может и не иметь единственного торгового представителя.)
- * Клиент не обязан размещать заказ, и количество заказов не ограничено. Он может разместить ноль или более заказов.
Атрибут
Пример: + String = «Без имени» {readOnly}
Обязательно только имя.
- слева от имени отображается метка видимости, которая может быть + (public) или — (private). Если не указано, значит +
- справа от знака равно = показано значение по умолчанию (значение для вновь создаваемых объектов, если атрибут не определен в процессе создания)
- Элемент {строка свойств} позволяет указывать дополнительные свойства атрибута. В примере он равен {readOnly}, то есть клиенты не могут изменять атрибут. Если он пропущен, то, как правило, атрибут можно модифицировать
Шарово-гнездовая нотация:
Рассмотрим пример нотации называемом леденц на палочке:
- ArrayList реализует List и Collection
- Order требует интерфейс List
Параметризованный класс:
Диаграмма последовательности
Пример демонстрирующий, как вызов функции calculatePrice порождает цепочку действий.
Обратите внимание на следующие нюансы:
- возвращающие стрелки не отображены, но подразумеваются (кроме последней стрелки пунктиром)
- объект Order сделав вызов getDiscountedValue породил обратный вызов к себе getBaseValue от объекта Customer
Диаграмма деятельности
Обратите внимание выше, как завершается слияние у решения. Часто, можно встретить такие обозначения:
Часто, можно встретить такие обозначения:
Иногда полезно разбить диаграмму деятельности на разделы (partitions):
Временный сигнал:
Как видите, до моего отлета остается два часа (Two hours before flight), и мне пора собирать багаж. Если я упакую его раньше времени, то все равно не смогу уехать, пока не прибудет такси. Если такси приходит (Taxi Arrives) до того, как я успею собрать багаж (Pack Bags), то оно должно ждать меня, пока я не закончу.
Пример вложенности:
Временные диаграммы
Акцентирует внимание на временных ограничениях. Пример из жизни основанный на использовании насоса (Pump) и нагревательного элемента (Hotplate) в кофеварке (coffee pot)
Пример из жизни основанный на использовании насоса (Pump) и нагревательного элемента (Hotplate) в кофеварке (coffee pot).
Представим себе правило, которое гласит, что между включением насоса и включением нагревательного элемента должно пройти по крайней мере 10 секунд. Когда емкость с водой становится пустой (waterEmpty), насос выключается, а нагревательный элемент не может оставаться включенным более 15 минут.
Временная диаграмма, на которой состояния представлены в виде линий:
Временная диаграмма, на которой состояния представлены в виде областей: