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

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

![](http://gameinstitute.ru/wp-content/uploads/media/3.-%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B-%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D0%B8/image1.png)

![](http://gameinstitute.ru/wp-content/uploads/media/3.-%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B-%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D0%B8/image3.png)

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

![](http://gameinstitute.ru/wp-content/uploads/media/3.-%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B-%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D0%B8/image4.png)

* Пройдемся по получившейся диаграмме:
* Мы получаем команду на расчет стоимости заказа (calculatePrice())
* Для этого нам необходимо выяснить количество (getQuantity()) и понять, какой продукт описан в данном пункте заказа (getProduct())
* Получить информацию о стоимости конкретного продукта мы можем через вызов aProduct::getPricingDetails()
* На данном этапе у нас есть вся информация для подсчета суммы заказа anOrder::calculateBasePrice()
* Начинаем считать скидку anOrder::calculateDiscounts()
* Для этого нам необходима персональная информация aCustomer::getDiscountInfo()

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

### Создание и удаление участников.

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

![](http://gameinstitute.ru/wp-content/uploads/media/3.-%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B-%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D0%B8/image5.png)

Если вы применили для этого конструктор, то вместо названия фабричного метода, можено использовать имя new.

Конец области жизнедеятельности участника обозначается большим **“X”**. Если от одного из участников в Х ведет стрелка, это значит, что один из классов удалил другой явным образом. Если в системе работает сборщик мусора и ручное удаление не требуется, тем не менее, лучше указать, что объект освобожден и готов к удалению.

![](http://gameinstitute.ru/wp-content/uploads/media/3.-%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B-%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D0%B8/image6.png)

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

### Когда используются диаграммы последовательности.

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