Данный материал является вводной частью в язык UML, стараясь дать Вам возможность сразу после прочтения начать использовать UML в своих практических целях.
Чем UML не является
Хорошо, когда есть инструмент версионирования схемы (например, что бы посмотреть, что изменено в новой версии бизнес-схемы).
Нотация UML довольно свободная: рисовать можно как угодно, лишь бы не возникало недоразумений. Например рассмотрим пример "Четыре способа представления ребер" из книги Фаулер М. UML. Основы (3-е издание, 2005):
Поставщики инструментов работы с 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 касается программирования, поэтому UML как язык для общения с бизнесом, применяется очень скудно, но я попробую привести пример на основе компьютера.
Пример взаимосвязи | Описание | ||
наличие обязательных деталей | Ассоциация | Компьютер | Если у сложного устройства есть в наличии обязательные детали (материнская плата, процессор, озу) значит это компьютер |
сложное устройство | Наследование | Компьютер | Любое сложное устройство (ноутбук, планшет, умные часы и т.д.) является представителем компьютера |
компьютер | Реализация/Имплементация | Стандарты сборки | Чтобы правильно собрать компьютер, нужно следовать неким стандартам сборки (размеры, виды разъемов, версии протоколов взаимодействия и т.д.) |
компьютер | Зависимость | Электричество | Работа компьютера зависит от электричества, но электричество не зависит от компьютера |
дополнительные детали | Агрегация | Компьютер | В компьютере могут быть дополнительные детали (точпад, веб-камера и т.д), но их может и не быть |
обязательные детали | Композиция | Компьютер | Без обязательных деталей компьюетр не может быть собран (материнская плата, процессор, озу) |
Рассмотрим примеры с детальным пояснением.
Агрегация (aggregation ) – это ассоциация типа «целое-часть». Агрегация в UML представляется в виде прямой с ромбом на конце. Ромб на связи указывает, какой класс является агрегирующим (т.е. «состоящим из»); класс с противоположного конца — агрегированным (т.е. те самые «части»). | |
Композиция (composition ) – это такая агрегация, где объекты-части не могут существовать сами по себе и уничтожаются при уничтожении объекта агрегирующего класса. Композиция изображается так же, как ассоциация, только ромбик закрашен. Важно понимать разницу между агрегацией и композицией: при агрегации объекты-части могут существовать сами по себе, а при композиции — нет. Пример агрегации: автомобиль—колесо, пример композиции: дом—комната. | |
Наследование (inheritance ) – это отношение типа «общее-частное». Позволяет определить такое отношение между классами, когда один класс обладает поведением и структурой ряда других классов . При создании производного класса на основе базового (одного или нескольких) возникает иерархия наследования. Реализация принципов наследования является ключевой предпосылкой возможности повторного использования кода, поскольку это основной инструмент достижения полиморфизма. |
На рис. 3.7 показаны зависимости, которые можно обнаружить в многоуровневом приложении. Класс Benefits Window (Окно льгот) – это пользовательский интерфейс, или класс представления, зависящий от класса Employee (Сотрудник). Класс Employee – это объект предметной области, который представляет основное поведение системы, в данном случае бизнес- правила. Это означает, что если класс Employee изменяет свой интерфейс, то, возможно, и класс Benefits Window также должен измениться.
В целом, Вы теперь знаете базовые вещи о UML-диаграммах, но чтобы закрепить знания, рекомендую рассмотреть несколько схем с пояснениями к ним.
Примеры:
isPrepaid: Boolean[1]
+ userName: String [1] = "Без имени" {readOnly}
Обязательно только имя.
Параметризованный класс:
Рассмотрим php-пример нотации называемой "леденец на палочке":
class Order { private List $Lineltems; public function __construct() { $this->LineItems = new ArrayListO; } } |
Еще пример, но уже с диаграммой компонентов:
В этом примере компонент Till (Касса) может взаимодействовать с компонентом Sales Server (Сервер продаж) с помощью интерфейса sales message (Сообщение о продажах). Поскольку сеть ненадежна, то компонент Message Queue (Очередь сообщений) установлен так, чтобы касса (Till) могла общаться с сервером продаж (Sales Server), когда сеть работает. А когда сеть отключена, чтобы можно было разговаривать с очередью сообщений. Тогда очередь сообщений сможет поговорить с сервером, когда сеть снова станет доступной. В результате очередь сообщений предоставляет интерфейс для разговора с кассой (Till), и требует такой же интерфейс для разговора с сервером. Сервер разделен на два основных компонента: Transaction Processor (Процессор транзакций) реализует интерфейс сообщений, а Accounting Driver (Драйвер счетов) общается с Accounting System (Система ведения счетов) .
Пример демонстрирующий, как вызов функции calculatePrice порождает цепочку действий.
Обратите внимание на следующие нюансы:
Обратите внимание выше, как завершается слияние у решения.
Часто, можно встретить такие обозначения:
Иногда полезно разбить диаграмму деятельности на разделы (partitions):
Еще пример:
Временный сигнал:
Как видите, до моего отлета остается два часа (Two hours before flight), и мне пора собирать багаж. Если я упакую его раньше времени, то все равно не смогу уехать, пока не прибудет такси. Если такси приходит (Taxi Arrives) до того, как я успею собрать багаж (Pack Bags), то оно должно ждать меня, пока я не закончу.
Пример вложенности:
Акцентирует внимание на временных ограничениях.
Пример из жизни основанный на использовании насоса (Pump) и нагревательного элемента (Hotplate) в кофеварке (coffee pot).
Представим себе правило, которое гласит, что между включением насоса и включением нагревательного элемента должно пройти по крайней мере 10 секунд. Когда емкость с водой становится пустой (waterEmpty), насос выключается, а нагревательный элемент не может оставаться включенным более 15 минут.
Временная диаграмма, на которой состояния представлены в виде линий:
Временная диаграмма, на которой состояния представлены в виде областей:
Источники: 1 - 2 - 3 - 4 - 5 - 6- 7 - 8