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

by Larin

Интро

В своей первой статье “UML – это просто” я описывал диаграммы классов, хотя правильнее было бы начать с общего описыния языка, потом перейти на описание сущностей и собственно начать с диаграмм последовательностей. Но, мне просто хотелось вас заинтересовать. :) И я решил подать в доступной форме довольно сложный материал. Судя по комментариям, у меня это получилось. :)

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

Определения и вид

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

И сразу пример:

first_example.gif

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

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

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

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

Сообщения

Сообщения можно разделить на 2 вида: синхронные (synchronous message) – требующие возврата ответа и асинхронные (asynchronous message) – ответ не тебуется и вызывающий объект может продолжать работу. На диаграмме синхронные вызовы обозначаются закрашенными стрелочками. Асинхронные – незакрашенными или половинными стрелочками.

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

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

Если в сообщении требуется передать параметры, то они указываются в скобках через запятую, с указанием типа параметра (см. сообшение messageText(text : string) ).

Подведем итог знаний о сообщениях в виде небольшой картинки-памятки:

message.gif

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

Тут вообще все просто. На первом рисунке создание нового объекта – это сообщение create. Создаваемый объект находится всегда ниже объекта из которого он был создан. Если при создании применяется конструктор то имя сообщения не обязательно, но для ясности все же лучше писать new.

Удаление участника обохначается крестом. Стрелка сообщения идущая к такому кресту, означает, что один участник, явным образом удаляет другого участника. Если же крестик стоит в конце линии жизни участника, и к нему не идет никаких сообщений – это означает, что участник удаляет сам себя, т.е. срабатывает деконструктор.

Циклы, условия и другие :)

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

Разработчики UML все же нашли способ отображать на диаграмме циклы и условные операции. Для этого используются фреймы взаимодействий (interaction frames). Лично мне этот подход не нравится, фреймы взаимодействий очень сильно “захломляют” диаграмму и иногда она становится практически не читаемой, так что в этой статье я не буду описывать работу с ними. Так как, по моему мнению, они не вписываются в название статьи – “UML – это просто”. :)

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

Маркер итераций (iteration marker ) обозначается символом *, добавленным к имении сообщения. Для уточнения количества итераций, к маркеру можно добавить текст в квадратных скобках, например, маркер – * [для всех элементов массива], показывает, что сообщение, к которому он добавлен, должно быть применено ко всем элементам массива.

Защита (guard) – это условное выражение, которое записывается в квадратных скобках и означающее, что сообщение должно быть послано только когда защита принимает истинное значение.

Итог

Надеюсь мой рассказ был для вас понятен. И теперь вы тоже считаете, что UML – это просто. Конечно, в 2-х небольших статьях нельзя рассказать о всех тонкостях и возможностях данного языка, но я и не ставил перед собой такой цели. Я хотел показать, вам, что UML можно и нужно применять в повседневных разработках. Я хотел вас заинтересовать на дальнейшее изучение UML и проектирования приложений. Надеюсь у меня это получилось. =)