Все о тюнинге авто

Диаграммы UML. Инструменты для рисования UML-диаграмм Диаграмма синхронизации uml

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

План действий

В разделе «Описание» изучите основной набор символов диаграммы состояний, необходимый для того, чтобы уметь читать диаграммы.

После ознакомления с другими разделами («Пример», «Применение») вы можете попробовать свои силы в самостоятельном составлении диаграмм состояний.

Замечания (описание)

Здесь представлен основной набор символов диаграммы состояний , необходимый для того, чтобы суметь прочитать диаграмму. После ознакомления с другими разделами («Пример», «Применение») вы сможете составлять диаграммы состояний самостоятельно!

Термин Изображение Описание
Начальное псевдосостояние (initial pseudostate) Начальное состояние системы
Переход Переход (transition) означает перемещение из одного состояния в другое.
Состояние Обозначает выполняемые системой действия (могут включать возможные варианты), приводящие к наблюдаемым актёрами результатам.
Состояние
активности (activity state)
Сложный шаг в прецеденте можно представить другим прецедентом.
В терминах языка UML мы говорим, что первый прецедент включает (includes) второй.
Конечное состояние Позволяет обозначить границы систем или подсистем.
Внутренние активности (internal activities) Случай когда состояния могут реагировать на события без совершения перехода, и в этом случае событие, защита и активность размещаются внутри прямоугольника состояния.
Входная активность Входная активность выполняется всякий раз, когда вы входите в состояние
Выходная активность Выходная активность – выполняется всякий раз, когда вы покидаете состояние.
Суперсостояние
Часто бывает, что несколько состояний имеют общие переходы и внутренние активности. В таких случаях можно их превратить в подсостояния (substates), а общее поведение перенести в суперсостояние (superstate).
Параллельные состояния
Состояния могут быть разбиты на несколько параллельных состояний, запускаемых одновременно.

Как применять технику креативности

Диаграммы состояний UML хороши для описания поведения одного объекта в нескольких прецедентах. Но они не очень подходят для описания поведения, характеризующегося взаимодействием множества объектов. Поэтому имеет смысл совместно с диаграммами состояний применять другие технологии. Например, диаграммы взаимодействия (глава 4) прекрасно описывают поведение нескольких объектов в одном прецеденте, а диаграммы деятельности UML хороши для показа основной последовательности действий нескольких объектов в нескольких прецедентах.

Не все считают диаграммы состояний естественными. Понаблюдайте, как специалисты работают с ними. Вполне возможно, что члены вашей команды не думают, что диаграммы состояний подходят для их стиля работы. Это не самая большая трудность; вы должны не забывать совместно использовать различные приемы работы.

Если вы применяете диаграммы состояний, то не старайтесь нарисовать их для каждого класса системы. Такой подход часто применяется в целях формально строгой полноты, но почти всегда это напрасная трата сил. Применяйте диаграммы состояний только для тех классов, которые проявляют интересное поведение, когда построение диаграммы состояний помогает понять, как все происходит.

Многие специалисты считают, что редактор UI и управляющие объекты имеют функциональные средства, полезные при отображении с помощью диаграммы состояний .

Как научиться

Здесь мы попытались предоставить как можно более простой способ изучения диаграммы состояний языка UML .

Как и многие другие языки он использует для описания набор знаков. Смысл этих знаков вы найдете в таблице в разделе «Замечания (описание)». Каждый знак имеет свое наименование (термин) и написание. Также каждый термин снабжен кратким пояснением, чтобы быстро уяснить его основную суть.

Далее мы бы рекомендовали перейти в раздел «Примеры» диаграмм состояний , чтобы попробовать свои силы в чтении разных диаграмм. Затем стоит изучить раздел «Применение», так как, хотя и количество типов диаграмм в UML невелико, максимум преимуществ от их использования вы сможете получить только если будете применять соответствующие диаграммы по назначению.

Пример использования

Диаграмма состояний (state machine diagrams) – это известная технология описания поведения системы. В том или ином виде диаграмма состояний существует с 1960 года, и на заре объектно-ориентированного программирования они применялись для представления поведения системы. В объектно-ориентированных подходах вы рисуете диаграмму состояний единственного класса, чтобы показать поведение одного объекта в течение его жизни.

Всякий раз, когда пишут о конечных автоматах, в качестве примеров неизбежно приводят системы круиз-контроля или торговые автоматы.
Мы решили использовать контроллер секретной панели управления в Готическом замке. В этом замке мы хотим так спрятать свои сокровища, чтобы их было трудно найти. Для того чтобы получить доступ к замку сейфа, мы должны вытащить из канделябра стратегическую свечу, но замок появится, только если дверь закрыта. После появления замка мы можем вставить в него ключ и открыть сейф. Для дополнительной безопасности мы сделали так, чтобы сейф можно было открыть только после извлечения свечи. Если вор не обратит внимания на эту предосторожность, то мы спустим с цепи отвратительного монстра, который проглотит вора.

На рис. 10.1 показана диаграмма состояний класса контроллера, который управляет моей необычной системой безопасности. Диаграмма состояния начинается с состояния создаваемого объекта контроллера: состояния Wait (Ожидание) . На диаграмме это обозначено с помощью начального псевдосостояния (initial pseudostate) , которое не является состоянием, но имеет стрелку, указывающую на начальное состояние.
На диаграмме показано, что контроллер может находиться в одном из трех состояний: Wait (Ожидание), Lock (Замок) и Open (Открыт) . На диаграмме также представлены правила, согласно которым контроллер переходит из одного состояния в другое. Эти правила представлены в виде переходов – линий, связывающих состояния.

Переход (transition) означает перемещение из одного состояния в другое. Каждый переход имеет свою метку, которая состоит из трех частей:
триггер-идентификатор [защита]/активность (trigger-signature /activity) . Все они не обязательны. Как правило, триггер-идентификатор – это единственное событие, которое может вызвать изменение состояния.

Защита, если она указана, представляет собой логическое условие, которое должно быть выполнено, чтобы переход имел место. Активность – это некоторое поведение системы во время перехода. Это может быть любое поведенческое выражение. Полная форма триггера-идентификатора может включать несколько событий и параметров. Переход из состояния Wait (рис. 10.1) в другое состояние можно прочесть как «В состоянии Wait , если свеча удалена, вы видите замок и переходите в состояние Lock ».

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

Когда в определенном состоянии происходит событие, то из этого состояния можно совершить только один переход, например в состоянии Lock (рис. 10.1) защиты должны быть взаимно исключающими. Если событие происходит, а разрешенных переходов нет – например закрытие сейфа в состоянии Wait или удаление свечи при открытой двери, – событие игнорируется.

Конечное состояние (final state ) означает, что конечный автомат закончил работу, что вызывает удаление объекта контроллера. Так что для тех, кто имел неосторожность попасть в ловушку, сообщаем, что поскольку объект контроллера прекращает свое существование, мы вынуждены посадить кролика обратно в клетку, вымыть пол и перегрузить систему.

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

Когда разработчики говорят об объектах, они часто ссылаются на состояние объектов, имея в виду комбинацию всех данных, содержащихся в полях объектов. Однако состояние на диаграмме конечного автомата является более абстрактным понятием состояния; суть в том, что различные состояния предполагают различные способы реакции на события.

Внутренние активности в диаграмме состояний

Состояния могут реагировать на события без совершения перехода, используя внутренние активности (internal activities ), и в этом случае событие, защита и активность размещаются внутри прямоугольника состояния.

На рис. 10.2 представлено состояние с внутренними активностями символов и событиями системы помощи, которые вы можете наблюдать в текстовых полях редактора UI . Внутренняя активность подобна самопереходу (self-transition) – переходу, который возвращает в то же самое состояние. Синтаксис внутренних активностей построен по той же логической схеме события, защиты и процедуры.

На рис. 10.2 показаны также специальные активности: входная и выходная активности . Входная активность выполняется всякий раз, когда вы входите в состояние; выходная активность – всякий раз, когда вы покидаете состояние. Однако внутренние активности не инициируют входную и выходную активности ; в этом состоит различие между внутренними активностями и самопереходами .

Состояния активности в диаграмме состояний

В состояниях, которые мы описывали до сих пор, объект молчит и ожидает следующего события, прежде чем что-нибудь сделать. Однако возможны состояния, в которых объект проявляет некоторую активность.

Состояние Searching (Поиск) на рис. 10.3 является таким состоянием активности (activity state) : ведущаяся активность обозначается символом do/ ; отсюда термин do-activity (проявлять активность) . После того как поиск завершен, выполняются переходы без активности, например показ нового оборудования (Display New Hardware) . Если в процессе активности происходит событие отмены (cancel ), то do-активность просто прерывается и мы возвращаемся в состояние Update Hardware Window (Обновление окна оборудования).

И do-активности, и обычные активности представляют проявление некоторого поведения. Решающее различие между ними заключается в том, что обычные активности происходят «мгновенно» и не могут быть прерваны обычными событиями, тогда как do-активности могут выполняться в течение некоторого ограниченного времени и могут прерываться, как показано на рис. 10.3. Мгновенность для разных систем трактуется по-разному; для систем реального времени это может занимать несколько машинных инструкций, а для настольного программного обеспечения может составить несколько секунд.

В UML 1 обычные активности обозначались термином action (действие), а термин activity (активность) применялся только для do-активностей .

Суперсостояния

Часто бывает, что несколько состояний имеют общие переходы и внутренние активности. В таких случаях можно их превратить в подсостояния (substates), а общее поведение перенести в суперсостояние (superstate), как показано на рис. 10.4. Без суперсостояния пришлось бы рисовать переход cancel (отмена) для всех трех состояний внутри состояния Enter Connection Details (Ввод подробностей соединения) .

Параллельные состояния

Состояния могут быть разбиты на несколько параллельных состояний, запускаемых одновременно. На рис. 10.5 показан простой будильник, который может включать либо CD, либо радио и показывать либо текущее время, либо время сигнала.

Опции CD/радио и текущее время/время сигнала являются параллельными. Если бы вы захотели представить это с помощью диаграммы непараллельных состояний, то получилась бы беспорядочная диаграмма при необходимости добавить состояния. Разделение двух областей поведения на две диаграммы состояний делает ее значительно яснее.

Рис. 10.5 включает также состояние предыстории (history pseudostate). Это означает, что когда включены часы, опция радио/CD переходит в состояние, в котором находились часы, когда они были выключены. Стрелка, выходящая из предыстории, показывает, какое состояние существовало изначально, когда отсутствовала предыстория.

Реализация диаграмм состояний

Диаграмму состояний можно реализовать тремя основными способами: с помощью вложенного оператора switch, паттерна State и таблицы состояний. Самый прямой подход в работе с диаграммами состояний – это вложенный оператор switch, такой как на рис. 10.6.

Хотя этот способ и прямой, но очень длинный даже для этого простого случая. Кроме того, при данном подходе очень легко потерять контроль, поэтому не рекомендуем применять его даже в элементарных ситуациях.
Паттерн «Состояние» (State pattern) представляет иерархию классов состояний для обработки поведения состояний. Каждое состояние на диаграмме состояний имеет свой подкласс состояния. Контроллер имеет методы для каждого события, которые просто перенаправляют к классу состояния. Диаграмма состояний, показанная на рис. 10.1, могла бы быть реализована с помощью классов, представленных на рис. 10.7.

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

Так, диаграмма на рис. 10.1 может быть представлена в виде табл. 10.1.
Затем мы строим интерпретатор, который использует таблицу состояний во время выполнения программы, или генератор кода, который порождает классы на основе этой таблицы.

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

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

Подписывайтесь на новости сайта, форму подписки вы можете найти в правой колонке сайта.

Если вы хотите научиться работать на фрилансе профессионально, приглашаем на курс « ».

UML - это аббревиатура, обозначающая Unified Modeling Language. Фактически, это один из самых популярных методов моделирования бизнес-процессов, являющийся международной стандартной нотацией для указания, визуализации и документирования разработки ПО. Определенный группой управления объектами, появился, как результат нескольких дополнительных систем нотаций UML и теперь стал стандартом де-факто для визуального моделирования. Основополагающий принцип любого объектно-ориентированного программирования начинается с построения модели.

UML был создан в результате хаоса вокруг разработки ПО и документации. В 1990-х годах было несколько различных способов представления программных систем. Появилась потребность в более унифицированном способе visual UML представления этих систем, и в результате в 1994-1996 годах он был разработан тремя инженерами-программистами, работающими в Rational Software. Позднее он был принят в виде стандарта в 1997 году и до сих пор остается им, получив всего лишь несколько обновлений.

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

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

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

  1. Заявления о языке программирования.
  2. Актеры - расписывают роль, которую играет пользователь или любая другая система, взаимодействующая с объектом.
  3. Мероприятия, которые должны выполняться по исполнению рабочего контракта и быть представлены в диаграммах.
  4. Бизнес-процесс, включающий в себя набор задач, создающих конкретный сервис для клиентов, визуализируемый блок-схемою последовательных действий.
  5. Логические и многоразовые программные компоненты.

Диаграммы UML делятся на две категории. Первый тип включает семь типов диаграмм, представляющих структурную информацию, второй - остальные семь, представляющие общие типы поведения. Эти диаграммы используются для документирования архитектуры систем и принимают непосредственное участие в UML моделировании системы.

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

Для упрощения моделирования доступны самые разнообразные инструменты моделирования UML, включая IBM Rose, Rhapsody, MagicDraw, StarUML, ArgoUML, Umbrello, BOUML, PowerDesigner и Dia.

Использование UML имеет различные виды и в документации по разработке программного обеспечения, и в бизнес-процессах:

  1. Эскиз. В этом случае UML-диаграммы используются для передачи различных аспектов и характеристик системы. Однако это только представление верхнего уровня системы и, скорее всего, не будет включать все необходимые детали для выполнения проекта до самого конца.
  2. Forward Design - дизайн эскиза выполняется до кодирования приложения. Это делается для лучшего обзора системы или рабочего процесса, который пользователь пытается создать. Многие проблемы дизайна или недостатки могут быть выявлены, что улучшит общее состояние здоровья и благополучия проекта.
  3. Обратный дизайн. После написания кода диаграммы UML отображаются как форма документации для разных действий, ролей, участников и рабочих процессов.
  4. Светокопия. В этом случае диаграмма служит полной конструкцией, которая требует исключительно фактической реализации системы или программного обеспечения. Часто это делается с помощью инструментов CASE (Computer Aided Software Engineering Tools). Основным недостатком использования инструментов CASE является то, что они требуют определенного уровня знаний, обучения пользователей, а также управления и персонала.

UML не является автономным языком программирования, как Java, C ++ или Python, однако с правильными инструментами он может превратиться в язык UML псевдопрограмм. Для достижения этой цели вся система должна быть документирована в разных диаграммах, и, используя правильное программное обеспечение, диаграммы могут быть непосредственно переведены в код. Этот метод может быть полезен только в том случае, если время, затрачиваемое на рисование диаграмм, займет меньше времени, чем написание фактического кода. Несмотря на то, что UML был создан для моделирования систем, он нашел несколько применений в бизнес-областях.

Ниже приводится пример UML-диаграммы для моделирования бизнеса.

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

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

Разные типы разбиваются следующим образом:

  1. Не все из 14 различных типов UML-диаграмм используются на регулярной основе при документировании систем и архитектур.
  2. Принцип Парето, применяется и в отношении использования диаграмм UML.
  3. 20 % диаграмм используются разработчиками в 80 % случаев.

Наиболее часто используемые элементы в разработке программного обеспечения:

  • диаграммы использования;
  • диаграммы классов;
  • последовательности.

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

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

Диаграмма использования

Краеугольная часть системы - применяются для анализа требований к уровню системы. Эти требования выражаются в разных вариантах использования. Три основных компонента диаграммы UML - это:

  1. Функциональные - представлены в качестве вариантов использования.
  2. Глагол, описывающий действие.
  3. Актеры - для взаимодействия с системой. В роли актера могут быть пользователи, организации или внешней заявкой. Отношения между участниками представляются прямыми стрелками.

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

Этот тип диаграмм хорошо подходит для отображения динамического поведения между участниками в системе, упрощая ее представление не отражая детали реализации.

Временная

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

Каждый отдельный участник представляется через линию жизни, которая по существу является строкой, формирующей этапы, так как отдельный участник переходит от одного этапа к другому. Основное внимание уделяется продолжительности времени событий и изменениям, происходящим в зависимости от нее.

Основными компонентами временной диаграммы являются:

  1. Lifeline - индивидуальный участник.
  2. Временная шкала состояния - единственный жизненный путь может проходить через различные состояния внутри процесса.
  3. Ограничение продолжительности - ограничение временного интервала, которое представляет продолжительность необходимого для выполнения ограничения.
  4. Ограничение по времени - ограничение временного интервала, в течение которого что-то должно выполняться участником.
  5. Появление разрушения - появление сообщения, которое уничтожает отдельного участника и изображает конец жизненного цикла этого участника.

Горизонтальные диаграммы, также называемые диаграммами состояний, используются для описания различных состояний компонента внутри системы. Он принимает конечный формат имени, потому что диаграмма по существу является машиной, которая описывает несколько состояний объекта и как изменяется на основе внутренних и внешних событий.

Очень простая диаграмма состояния машины была бы в шахматной игре. Типичная шахматная игра состоит из ходов, сделанных Белыми, и движений, сделанных Черными. У Белых есть первый ход, что таким образом инициирует игру. Завершение игры может происходить независимо от того, побеждают ли Белые или Черные. Игра может закончиться матчем, отставкой или ничьей (разные состояния машины). Statecharts находят применение в основном в прямом и обратном UML проектировании различных систем.

Последовательные

Этот тип диаграмм самые важные диаграммы UML не только среди сообщества компьютерных наук, но и как модели уровня проектирования для разработки бизнес-приложений. Они популярны при описании бизнес-процессов из-за их визуально самоочевидного характера. Как следует из названия, диаграммы описывают последовательность сообщений и взаимодействий, которые происходят между субъектами и объектами. Актеры или объекты могут быть активны только в случае необходимости или когда другой объект хочет общаться с ними. Все коммуникации представлены в хронологическом порядке.

Чтобы получить более полную информацию, можно рассмотреть пример диаграммы последовательности UML ниже.

Как следует из примера, структурные диаграммы используются для отображения структуры системы. Более конкретно, язык используется в разработке ПО для представления архитектуры системы и того, как разные компоненты взаимосвязаны.

Диаграмма классов UML является наиболее распространенным типом диаграммы для документации по программному обеспечению. Поскольку большинство программ, создаваемых в настоящее время, по-прежнему основано на парадигме объектно-ориентированного программирования, использование диаграмм классов для документирования программного обеспечения оказывается здравым смыслом. Это происходит потому, что ООП основан на UML-классах и отношениях между ними. В двух словах, диаграммы содержат классы, наряду с их атрибутами, также называемыми полями данных, и их поведением, называемыми функциями-членами.

Более конкретно, каждый класс имеет 3 поля: имя вверху, атрибуты прямо под именем, операции/поведение внизу. Связь между различными классами (представленная соединительной линией) составляет диаграмму классов. В приведенном выше примере показана базовая диаграмма классов.

Объектов

Когда обсуждают структурные диаграммы UML, нужно углубиться в понятия, связанные с информатикой. В разработке программного обеспечения классы рассматриваются, как абстрактные типы данных, тогда как объекты являются экземплярами Например, если есть «Автомобиль», который является общим абстрактным типом, то экземпляром класса «Автомобиль» будет «Ауди».

Диаграммы UML-объекта помогают разработчикам программного обеспечения проверить, генерирует ли генерированная абстрактная структура, представляет собой жизнеспособную структуру при реализации на практике, то есть, когда объекты создаются. Некоторые разработчики считают это вторичным уровнем проверки точности. Она отображает экземпляры классов. Точнее, общий класс «Клиент» теперь имеет фактического клиента, например, под названием «Джеймс». Джеймс является экземпляром более общего класса и имеет одинаковые атрибуты, однако, с заданными значениями. То же самое было сделано с учетной записью «Счета и сбережения». Они оба являются объектами их соответствующих классов.

Развертывания

Диаграммы развертывания используются для визуализации взаимосвязи между программным и аппаратным обеспечением. Чтобы быть более конкретным, с диаграммами развертывания можно построить физическую модель того, как программные компоненты (артефакты) развертываются на аппаратных компонентах, известных как узлы.

Типичная упрощенная схема развертывания для веб-приложения будет включать:

  1. Узлы (сервер приложений и сервер баз данных).
  2. Артефакты схема клиентского приложения и базы данных.

Диаграмма пакетов похожа на макросбор для диаграмм UML развертывания, которые мы объясняли выше. Различные пакеты содержат узлы и артефакты. Они группируют диаграммы и компоненты модели в группы, подобно тому, как пространство имен инкапсулирует разные имена, которые несколько взаимосвязаны. В конечном итоге пакет также может быть создан несколькими другими пакетами, чтобы отображать более сложные системы и поведение.

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

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

Они обычно делятся на следующие основные категории:

  1. Бумага и ручка - это легко. Берется бумага и ручка, открывается синтаксический код UML из Интернета и рисуется любой тип диаграммы, который нужен.
  2. Онлайн-инструменты - существует несколько онлайн-приложений, которые можно использовать для создания диаграммы. Большинство из них предлагают платную подписку или ограниченное количество диаграмм на свободном уровне.
  3. Бесплатные онлайн-инструменты - это почти то же самое, что и платные. Основное различие заключается в том, что платные также предлагают учебные пособия и готовые шаблоны для конкретных диаграмм.
  4. Настольное приложение - типичное настольное приложение для использования для диаграмм и почти любая другая диаграмма - это Microsoft Visio. Он предлагает расширенные возможности и функциональность. Единственным недостатком является то, что нужно заплатить за это.

Таким образом, совершенно очевидно, что UML - важный аспект, связанный с разработкой объектно-ориентированного ПО. Он использует графическую нотацию для создания визуальных моделей системных программ.

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

Существует много хороших книг в которых описано в деталях про UML (местами даже очень подробно), мне хотелось бы собрать в одном месте основные понятия про диаграммы, сущности и связи между ними для быстрого вспоминания, что-то наподобие шпаргалки.

В заметке используется материалы из книжек: Иванов Д. Ю., Новиков Ф. А. Унифицированный язык моделирования UML и Леоненков. Самоучитель по UML .

Для начала определимся с редактором. Под Linux я перепробовал разные UML-редакторы, больше всего мне понравился UMLet , хоть он и написан на Java но шевелится весьма проворно и большинство заготовок сущностей в нем есть. Еще есть ArgoUML кроссплатформенный UML-редактор, написан тоже на Java, функционально-богат но подтормаживает больше.

Я остановился на UMLet , установим его под Arch Linux и Ubuntu :

# под Arch Linux yaourt -S umlet # под Ubuntu sudo apt-get install umlet

В UML все сущности можно разбить на такие типы:

  • структурные;
  • поведенческие;
  • группирующие;
  • аннотационные;

В UML используются четыре основных типа отношений:

Зависимость (dependency) - указывает на то, что изменение независимой сущности каким-то образом влияет на зависимую сущность. Графически отношение зависимости изображается в виде пунктирной линии со стрелкой, направленной от зависимой сущности к независимой.

Ассоциация (association) - имеет место, если одна сущность непосредственно связана с другой (или с другими - ассоциация может быть не только бинарной). Графически ассоциация изображается в виде сплошной линии с различными дополнениями, соединяющей связанные сущности.

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

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

В UML 2 определено 13 типов диаграмм. По стандартам каждая диаграмма должна иметь рамку с прямоугольником (правый нижний угол скошенный) в левом верхнем углу, в котором указывается идентификатор диаграммы (тег) и название.

Диаграммы для изображения структуры системы :

  • Диаграмма компонентов (component diagram, тег component );
  • Диаграмма размещения (deployment diagram, тег deployment );
  • Диаграмма классов (class diagram, тег class );
  • Диаграмма объектов (object diagram, тег object );
  • Диаграмма структуры внутренней (composite structure diagram, тег class );

Диаграммы для изображения поведения системы :

  • Диаграмма синхронизации (interaction diagram, тег timing );
  • Диаграмма деятельности (activity diagram, тег activity );
  • Диаграмма последовательности (sequence diagram, тег sd );
  • Диаграмма коммуникации (communication diagram, тег comm );
  • Диаграмма автомата (state machine diagram, тег state machine );
  • Обзорная диаграмма взаимодействия (interaction overview diagram, тег interaction );

Особняком стоят диаграммы:

  • Диаграмма использования(use case diagram, тег use case);
  • Диаграмма пакетов (package diagram, тег package );

Диаграмма использования

Диаграмма использования (use case diagram) - это наиболее общее представление функционального назначения системы.

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

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

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

Отношение расширения - определяет взаимосвязь экземпляров отдельного варианта использования с более общим вариантом, свойства которого определяются на основе способа совместного объединения данных экземпляров. Так, если имеет место отношение расширения от варианта использования А к варианту использования В, то это означает, что свойства экземпляра варианта использования В могут быть дополнены благодаря наличию свойств у расширенного варианта использования А.

Отношение расширения между вариантами использования обозначается пунктирной линией со стрелкой (вариант отношения зависимости), направленной от того варианта использования, который является расширением для исходного варианта использования.

Отношение обобщения служит для указания того факта, что некоторый вариант использования А может быть обобщен до варианта использования В. В этом случае вариант А будет являться специализацией варианта В. При этом В называется предком или родителем по отношению А, а вариант А - потомком по отношению к варианту использования В.

Графически данное отношение обозначается сплошной линией со стрелкой в форме не закрашенного треугольника, которая указывает на родительский вариант использования.

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

Отношение включения между двумя вариантами использования указывает, что некоторое заданное поведение для одного варианта использования включается в качестве составного компонента в последовательность поведения другого варианта использования.

Отношение включения, направленное от варианта использования А к варианту использования В, указывает, что каждый экземпляр варианта А включает в себя функциональные свойства, заданные для варианта В.

Графически данное отношение обозначается пунктирной линией со стрелкой (вариант отношения зависимости), направленной от базового варианта использования к включаемому.

Диаграмма классов

Диаграмма классов (class diagram) - основной способ описания статической структуры системы.

На диаграмме классов применяется один основной тип сущностей: классы (включая многочисленные частные случаи классов: интерфейсы, примитивные типы, классы-ассоциации и т.д.), между которыми устанавливаются следующие основные типы отношений: зависимости, ассоциации, обобщения, реализации.

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

Отношение зависимости графически изображается пунктирной линией между соответствующими элементами со стрелкой на одном из ее концов, при этом стрелка направлена от класса-клиента зависимости к независимому классу или классу-источнику.

Над стрелкой могут находится специальные ключевые слова (стереотипы):

  • "access" - служит для обозначения доступности открытых атрибутов и операций класса-источника для классов-клиентов;
  • "bind" - класс-клиент может использовать некоторый шаблон для своей последующей параметризации;
  • "derive" - атрибуты класса-клиента могут быть вычислены по атрибутам класса-источника;
  • "import" - открытые атрибуты и операции класса-источника становятся частью класса-клиента, как если бы они были объявлены непосредственно в нем;
  • "refine" - указывает, что класс-клиент служит уточнением класса-источника в силу причин исторического характера, когда появляется дополнительная информация в ходе работы над проектом.

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

Отношение агрегации имеет место между несколькими классами в том случае, если один из классов представляет собой некоторую сущность, включающую в себя в качестве составных частей другие сущности. Применяется для представления системных взаимосвязей типа "часть-целое".

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

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

Диаграмма автомата

Диаграмма автомата (state machine diagram) или диаграмма состояний в UML 1 (state chart diagram) - это один из способов детального описания поведения в UML. В сущности, диаграммы автомата, как это следует из названия, представляют собой граф состояний и переходов конечного автомата нагруженный множеством дополнительных деталей и подробностей.

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

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

Начальное состояние представляет собой частный случай состояния, которое не содержит никаких внутренних действий (псевдосостояния). В этом состоянии находится объект по умолчанию в начальный момент времени. Оно служит для указания на диаграмме состояний графической области, от которой начинается процесс изменения состояний.

Конечное (финальное) состояние представляет собой частный случай состояния, которое также не содержит никаких внутренних действий (псевдосостояния). В этом состоянии будет находиться объект по умолчанию после завершения работы автомата в конечный момент времени.

Диаграмма деятельности

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

Диаграмма деятельности (activity diagram) - еще один способ описания поведения, который визуально напоминает старую добрую блок-схему алгоритма. Используется для моделирования процесса выполнения операций.

Основным направлением использования диаграмм деятельности является визуализация особенностей реализации операций классов, когда необходимо представить алгоритмы их выполнения.

На диаграмме деятельности применяют один основной тип сущностей - действие, и один тип отношений - переходы (передачи управления). Также используются такие конструкции как развилки, слияния, соединения, ветвления. Рекомендуется в качестве имени простого действия использовать глагол с пояснительными словами.

Диаграмма последовательности

Диаграмма последовательности (sequence diagram) - это способ описания поведения системы "на примерах".

Фактически, диаграмма последовательности - это запись протокола конкретного сеанса работы системы (или фрагмента такого протокола). В объектно-ориентированном программировании самым существенным во время выполнения является пересылка сообщений между взаимодействующими объектами. Именно последовательность посылок сообщений отображается на данной диаграмме, отсюда и название.

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

Возможные виды сообщений (изображение взято у larin.in):

Диаграмма коммуникации

Диаграмма коммуникации (communication diagram) - способ описания поведения, семантически эквивалентный диаграмме последовательности. Фактически, это такое же описание последовательности обмена сообщениями взаимодействующих экземпляров классификаторов, только выраженное другими графическими средствами.

Таким образом, на диаграмме коммуникации также как и на диаграмме последовательности применяют один основной тип сущностей - экземпляры взаимодействующих классификаторов и один тип отношений - связи. Однако здесь акцент делается не на времени, а на структуре связей между конкретными экземплярами.

Диаграмма компонентов

Диаграмма компонентов (component diagram) - показывает взаимосвязи между модулями (логическими или физическими), из которых состоит моделируемая система.

Основной тип сущностей на диаграмме компонентов - это сами компоненты, а также интерфейсы, посредством которых указывается взаимосвязь между компонентами. На диаграмме компонентов применяются следующие отношения:

  • реализации между компонентами и интерфейсами (компонент реализует интерфейс);
  • зависимости между компонентами и интерфейсами (компонент использует интерфейс);

Диаграмма размещения

Диаграмма размещения (deployment diagram) наряду с отображением состава и связей элементов системы показывает, как они физически размещены на вычислительных ресурсах во время выполнения.

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

Диаграмма объектов

Диаграмма объектов (object diagram) - является экземпляром диаграммы классов.

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

Диаграмма внутренней структуры (composite structure diagram) используется для более подробного представления структурных классификаторов, прежде всего классов и компонентов.

Структурный классификатор изображается в виде прямоугольника, в верхней части которого находится имя классификатора. Внутри находятся части (parts). Частей может быть несколько. Части могут взаимодействовать друг с другом. Это обозначается с помощью соединителей (connectors) различных видов. Место на внешней границе части, к которому присоединяется соединитель, называется портом (port). Порты располагаются также на внешней границе структурного классификатора.

Обзорная диаграмма взаимодействия (interaction overview diagram) является разновидностью диаграммы деятельности с расширенным синтаксисом: в качестве элементов обзорной диаграммы взаимодействия могут выступать ссылки на взаимодействия (interaction use), определяемые диаграммами последовательности.

Диаграмма синхронизации

Диаграмма синхронизации (timing diagram) представляет собой особую форму диаграммы последовательности, на которой особое внимание уделяется изменению состояний различных экземпляров классификаторов и их временной синхронизации.

Диаграмма пакетов

Диаграмма пакетов (package diagram) - единственное средство, позволяющее управлять сложностью самой модели.

Основные элементы нотации - пакеты и зависимости с различными стереотипами.

Модель сущность-связь (ER-модель)

Аналогом диаграммы классов (UML) может быть ER-модель , которая используется при проектировании баз-данных (реляционной модели).

Модель сущность-связь (ER-модель) - модель данных, позволяющая описывать концептуальные схемы предметной области. ER-модель используется при высокоуровневом (концептуальном) проектировании баз данных. С её помощью можно выделить ключевые сущности и обозначить связи, которые могут устанавливаться между этими сущностями. wikipedia

Любой фрагмент предметной области может быть представлен как множество сущностей, между которыми существует некоторое множество связей.

Основные понятия:

Сущность (entity) - это объект, который может быть идентифицирован неким способом, отличающим его от других объектов, например, КЛИЕНТ 777 . Сущность фактически представляет из себя множество атрибутов.

Набор сущностей (entity set) - множество сущностей одного типа (обладающих одинаковыми свойствами).

Связь (relationship) - это ассоциация, установленная между несколькими сущностями.

Домен (domain) - множество значений (область определения) атрибута.

Существует три типа бинарных связей:

  • один к одному - одиночный экземпляр сущности одного класса связан с одиночным экземпляром сущности другого класса, напимер, НАЧАЛЬНИК - ОТДЕЛ;
  • 1 к N или один ко многим - одиночный экземпляр сущности одного класса связан со многими экземплярами сущности другого класса, например, ОТДЕЛ - СОТРУДНИК;
  • N к M или многие ко многим - многие экземпляры сущности одного класса связаны со многими экземплярами сущности другого класса, например, СОТРУДНИК - ПРОЕКТ;
  • Словарь основных понятий по UML

    Объект (object) - сущность, обладающая уникальностью и инкапсулирующая в себе состояние и поведение.

    Класс (class) - описание множества объектов с общими атрибутами, определяющими состояние, и операциями, определяющими поведение.

    Интерфейс (interface) - именованное множество операций, определяющее набор услуг, которые могут быть запрошены потребителем и предоставлены поставщиком услуг.

    Кооперация (collaboration) - совокупность объектов, которые взаимодействуют для достижения некоторой цели.

    Действующее лицо (actor) - сущность, находящаяся вне моделируемой системы и непосредственно взаимодействующая с ней.

    Компонент (component) - модульная часть системы с четко определенным набором требуемых и предоставляемых интерфейсов.

    Артефакт (artifact) - элемент информации, который используется или порождается в процессе разработки программного обеспечения. Другими словами, артефакт - это физическая единица реализации, получаемая из элемента модели (например, класса или компонента).

    Узел (node) - вычислительный ресурс, на котором размещаются и при необходимости выполняются артефакты.

    Поведенческие сущности предназначены для описания поведения. Основных поведенческих сущностей всего две: состояние и действие.

    Состояние (state) - период в жизненном цикле объекта, находясь в котором объект удовлетворяет некоторому условию и осуществляет собственную деятельность или ожидает наступления некоторого события.

    Действие (action) - примитивное атомарное вычисление.

    Автомат является пакетом, в котором определено множество понятий, необходимых для представления поведения моделируемой сущности в виде дискретного пространства с конечным числом состояний и переходов.

    Классификатор (classifier) - это дескриптор множества однотипных объектов.

    Дополнительное чтиво

    • Фаулер М. UML. Основы, 3-е издание
    • Буч Г., Рамбо Д., Якобсон И. Язык UML. Руководство пользователя

Модель UML (UML model) ‒ это совокупность конечного множества конструкций языка, главные из которых ‒ это сущности и отношения между ними.

Сами сущности и отношения модели являются экземплярами метаклассов метамодели.

Рассматривая модель UML с наиболее общих позиций, можно сказать, что это граф (точнее, нагруженный мульти-псевдо-гипер-орграф), в котором вершины и ребра нагружены дополнительной информацией и могут иметь сложную внутреннюю структуру. Вершины этого графа называются сущностями, а ребра ‒ отношениями . Остальная часть раздела содержит беглый (предварительный), но полный обзор имеющихся типов сущностей и отношений. К счастью, их не слишком много. В последующих главах книги все сущности и отношения рассматриваются еще раз, более детально и с примерами.

1.4.1. Сущности

Для удобства обзора сущности в UML можно подразделить на четыре группы:

  • структурные;
  • поведенческие;
  • группирующие;
  • аннотационные.

Структурные сущности, как нетрудно догадаться, предназначены для описания структуры. Обычно к структурным сущностям относят следующие.

Объект (object) 1 ‒ сущность, обладающая уникальностью и инкапсулирующая в себе состояние и поведение.

Класс (class) 2 ‒ описание множества объектов с общими атрибутами, определяющими состояние, и операциями, определяющими поведение.

Интерфейс (interface) 3 ‒ именованное множество операций, определяющее набор услуг, которые могут быть запрошены потребителем и предоставлены поставщиком услуг.

Кооперация (collaboration) 4 ‒ совокупность объектов, которые взаимодействуют для достижения некоторой цели.

Действующее лицо (actor) 5 ‒ сущность, находящаяся вне моделируемой системы и непосредственно взаимодействующая с ней.

∇ Подобная взаимосвязь безусловно существует, что выражается на рис. Иерархия типов диаграмм для UML 1 в виде отношения зависимости со стереотипом «refine» .

∇∇ В UML 1 возникала невольная ассоциация между диаграммой кооперации и одноименной сущностью, что было не совсем верно и порой вводило в заблуждение.

∇∇∇ В UML 2 синтаксическая и смысловая нагрузка диаграммы состояний настолько изменилась, что название уже не отражало содержания.

Список новых диаграмм и их названий, принятых в этой книге, приведен ниже.

  • Диаграмма внутренней структуры (Composite Structure diagram)
  • Диаграмма пакетов (Package diagram)
  • Диаграмма автомата (State machine diagram)
  • Диаграмма коммуникации (Communication diagram)
  • Обзорная диаграмма взаимодействия (Interaction Overview diagram)
  • Диаграмма синхронизации (Timing diagram)

На рис. Иерархия типов диаграмм для UML 2 (часть 1 и 2) приведена диаграмма классов, отражающая взаимосвязь диаграмм в UML 2.

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

Но прежде чем перейти к следующему разделу, сделаем одно небольшое отступление относительно того, как стандарт требует оформлять диаграммы. Общий шаблон представления диаграммы приведен ниже.

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

Указанная сложная форма ярлычка поддерживается не всеми инструментами. Впрочем, это не обязательно, поскольку семантика первична, а нотация вторична. Далее мы везде используем в качестве ярлычка диаграммы прямоугольник, и это не должно вызывать недоразумений.

Возможные теги (типы) для диаграмм приведены в следующей таблице. Теги, предлагаемые стандартом, записаны во второй столбец. Однако, как показала практика, предлагаемые стандартом правила не всегда удобны и логически обоснованы, поэтому третий столбец таблицы содержит разумную на наш взгляд альтернативу.

Табл. Типы и теги диаграмм

Название диаграммы Тег (стандартный) Тег (предлагаемый)
Диаграмма использования use case или uc use case
Диаграмма классов class class
Диаграмма автомата state machine или stm state machine
Диаграмма деятельности activity или act activity
Диаграмма последовательности interaction или sd sd
Диаграмма коммуникации interaction или sd comm
Диаграмма компонентов component или cmp component
Диаграмма размещения не определен deployment
Диаграмма объектов не определен object
Диаграмма внутренней структуры class class или component
Обзорная диаграмма взаимодействия interaction или sd interaction
Диаграмма синхронизации interaction или sd timing
Диаграмма пакетов package или pkg package
Я думаю, каждый слышал в детстве такую поговорку как "Семь раз отмерь, один раз отрежь ". В программировании так же. Лучше всегда обдумать реализацию до того, как вы потратите время на её исполнение. Часто приходится при реализации создавать классы, придумывать их взаимодействие. И часто визуальное представление этого может помочь решить задачу наиболее правильным образом. В этом нам и помогает UML .

Что такое UML?

Если посмотреть картинки в поисковых системах, то станет понятно, что UML – это что-то про схемы, стрелочки и квадратики. Что важно, что UML переводится как Unified Modeling Language . Важно тут слово Unified. То есть наши картинки поймём не только мы, но и остальные, кто знает UML. Получается это такой международный язык рисования схем.

Как гласит Википедия

UML - это язык графического описания для объектного моделирования в области разработки программного обеспечения, моделирования бизнес-процессов, системного проектирования и отображения организационных структур.
Самое интересное, о чём не все задумываются или догадываются, UML имеет спецификации. Причём даже есть спецификация UML2. Подробнее со спецификацией можно ознакомиться на сайте Object Management Group . Собственно, эта группа и занимается разработкой спецификаций UML. Интересно и то, что UML не ограничивается описанием структуры классов. Существует множество типов UML диаграмм. Краткое описание типов UML диаграмм можно увидеть в той же Википедии: UML - диаграммы или в видео Тимура Батыршинова Обзор UML диаграмм . UML так же широко применяется при описании различных процессов, например здесь: Единый вход с использованием JWT . Возвращаясь к использованию UML диаграмм классов, стоит отметить книгу Head First: Паттерны проектирования , в которой паттерны иллюстрируются теми самыми UML диаграммами. Выходит, что UML действительно используется. И выходит, что знание и понимание его применения довольно полезный навык.

Применение

Разберём, как с этим самым UML можно работать из IDE. В качестве IDE возьмём IntelliJ Idea . Если использовать IntelliJ Idea Ultimate , то у нас "из коробки" будет установлен плагин "UML Support ". Он позволяет автоматически генерировать красивые диаграммы классов. Например, через Ctrl+N или пункт меню "Navigate" -> "Class" перейдём в класс ArrayList . Теперь, через контекстное меню по имени класса выберем "Diagram" -> "Show diagram popup". В результате мы получим красивую диаграмму:

Но что, если хочется самому нарисовать, да ещё и нет Ultimate версии Idea? Если мы используем IntelliJ Idea Community Edition, то у нас нет другого выбора. Для этого нужно понять, как такая UML схема устроена. Для начала нам понадобится установить Graphviz . Это набор утилит для визуализации графов. Его использует плагин, который мы будем применять. После установки необходимо добавить каталог bin из каталога установленного Graphviz в переменную среды окружения PATH . После этого в IntelliJ Idea в меню выбрать File -> Settings. В окне "Settings" выбрать категорию "Plugins", нажать кнопку "Browse repositories" и установить плагин PlantUML integration . Чем так хорош этот PlantUML ? Он использует для описания UML язык описания графов под названием "dot " и это позволяет ему быть более универсальным, т.к. данный язык используется не только PlantUML. Более того, всё что мы ниже сделаем мы можем выполнить не только в IDE, но и в онлайн сервисе planttext.com . После установки плагина PlantUML у нас появится возможность через "File" -> "New" создавать UML диаграммы. Давайте выполним создание диаграммы типа "UML class". В ходе этого автоматически генерируется шаблон с примером. Удалим его содержимое и создадим своё, вооружившись статьёй с Хабра: Отношения классов - от UML к коду . А чтобы понять, как это изобразить в тексте, возьмём мануал по PlantUML: plantuml class-diagram . В нём в самом начале представлена табличка с тем, как нужно описывать связи:

Про сами же связи можем ещё подсматривать сюда: "Отношения между классами в UML. Примеры ". На основе этих материалов приступим к созданию нашей UML диаграммы. Добавим следующее содержимое, описывающее два класса: @startuml class ArrayList { } class LinkedList { } @enduml Чтобы увидеть результат в Idea, выберем "View" -> "Tool Windows" -> "PlantUML". Мы получим просто два квадрата, обозначающие классы. Как мы знаем, оба эти класса реализуют интерфейс List. Данное отношение классов так и называют - реализация (realization). Для изображения такой связи используют стрелку с пунктирной линией. Изобразим её: interface List List < | . . ArrayList List < | . . LinkedList List - один из дочерних классов Collection . То есть он наследуется от Collection. Эта связь называется обобщением (generalization). Выглядит как стрелка с обычной непрерывной линией. Изобразим её: interface Collection Collection < | -- List Для следующего типа связи добавим в описание класса ArrayList запись о package private массиве элементов: ~ Object elementData Теперь мы хотим показать, что ArrayList содержит какие-то объекты. В данном случае будет тип связи - агрегация (aggregation). Агрегатом в данном случае является ArrayList , т.к. он содержит другие объекты. Агрегацию мы выбираем потому, что объекты в списке могут жить и без списка: они не являются его неотъемлемыми частями. Их время жизни не привязано к времени жизни списка. Агрегат с латинского переводится как "собранный", то есть что-то, составленное из чего-то. Например, в жизни, есть насосный агрегат, который состоит из насоса и двигателя. Сам агрегат можно разобрать, оставив что-то из его составных частей. Например, чтоб продать или поставить в другой агрегат. Так и в списке. И выражается это в виде пустого ромбика у агрегата и непрерывной линии. Изобразим это следующим образом: class Object { } ArrayList o- Object Теперь мы хотим показать, что в отличие от ArrayList , класс LinkedList содержит в себе Node - контейнеры, ссылающиеся на хранимые данные. В данном случае Node являются частью самого LinkedList и не могут жить отдельно. Node не является непосредственнохранимым содержимым, а только содержит ссылку на него. Например, когда мы добавляем в LinkedList какую-нибудь строку, мы добавляем новый Node , который содержит ссылку на эту строку, а также ссылку на предыдущий и следующий Node . Такой тип связи называется композицией (Composition). Для отображения у композита (того, кто состоит из частей) рисуется закрашенный робмик, к нему ведёт непрерывная линия. Запишем теперь это в виде текстового отображения связи: class Node { } LinkedList * -- Node И теперь необходимо научиться отображать ещё один важный тип связи - зависимость (dependency relationship). Он используется тогда, когда один класс использует другой, при этом класс не содержит в себе используемый класс и не является его наследником. Например, LinkedList и ArrayList умеют создавать ListIterator . Отобразим это в виде стрелок с пунктирной линией: class ListIterator ListIterator < . . . ArrayList : create ListIterator < . . . LinkedList : create Выглядеть после всего это будет следующим образом:

Детализировать можно настолько, насколько это необходимо. Все обозначения указаны тут: "PlantUML - Диаграмма классов ". Кроме того, в рисовании такой схемы нет ничего сверхъестественного, и при работе над своими задачами её можно быстро рисовать от руки. Это позволит развить навыки продумывания архитектуры приложения и поможет выявить недостатки структуры классов на раннем этапе, а не когда вы уже потратите день на реализацию неправильной модели. Мне кажется, это неплохая причина для того, чтобы попробовать?)

Автоматизация

Есть различные способы автоматической генерации PlantUML диаграмм. Например, в Idea есть плагин SketchIT , но рисует он их не совсем правильно. Скажем, неправильно рисуется имплементация интерфейсов (отображается как наследование). Также в интернете есть примеры того, как это встроить в жизненный цикл сборки вашего проекта. Допустим, для Maven есть пример использования uml-java-docklet . Для того, чтобы показать как это, воспользуемся Maven Archetype для быстрого создания Maven проекта. Выполним команду: mvn archetype:generate На вопросе выбора фильтра (Choose a number or apply filter ) оставляем default, просто нажав Enter. Это всегда будет "maven-archetype-quickstart ". Выбираем самую последнюю версию. Далее отвечаем на вопросы и завершаем создание проекта:

Так как Maven не является целью данной статьи, ответы на свои вопросы по Maven можно найти в Maven Users Centre . В сгенерированном проекте откроем на редактирование файл описания проекта, pom.xml . В него скопируем содержимое из описания uml-java-docklet installing . Используемый в описании артефакт не удалось найти в репозитории Maven Central. Но у меня заработало с этим: https://mvnrepository.com/artifact/com.chfourie/uml-java-doclet/1.0.0 . То есть надо в том описании просто заменить groupId с "info.leadinglight " на "com.chfourie " и поставить версию "1.0.0 ". После этого можем выполнить в каталоге, где находится файл pom.xml эти комманды: mvn clean install и mvn javadoc:javadoc . Теперь, если открыть сгенерированную документацию (explorer target\site\apidocs\index.html), мы увидим UML схемы. Кстати, имплементация тут уже отображается верно)

Заключение

Как видно, UML позволяет визуализировать структуру вашего приложения. Кроме того, UML не ограничивается только этим. При помощи UML можно описывать различные процессы внутри вашей компании или описывать бизнес-процесс, в рамках которого работает функция, которую вы пишите. На сколько UML полезен лично для вас - решать вам, но найти время и ознакомиться более подробным будет в любом случае полезно. #Viacheslav English version of this post: UML diagram Java on CodeGym