Для чего нужны диаграммы последовательностей
Для чего нужны диаграммы последовательностей
Обычно диаграмма последовательности используется для иллюстрации реализации вариантов использования (см. Рабочий продукт: Реализации вариантов использования), т.е. отражения взаимодействия объектов, соответствующего части или всему варианту использования. Взаимодействие объектов, воплощающее вариант использования, иллюстрируется одной или несколькими диаграммами последовательности. Обычно используется одна диаграмма для отражения основного потока событий и по одной для каждого отдельного подпотока варианта использования.
Диаграммы последовательности, в частности, важны при проектировании, т.к. они помогают уяснить роли объектов в потоке и, следовательно, предоставляют начальные данные для определения интерфейсов и назначений классов.
В отличие от диаграммы связей, диаграмма последовательности включает в себя хронологические последовательности, но не включает в себя информацию о взаимосвязи объектов. Диаграммы последовательности и диаграммы связей несут в себе аналогичную информацию, но представляют ее различными способами. Диаграммы последовательности показывают явные последовательности сообщений и хорошо подходят для наглядного представления хронологического порядка сообщений. Если вас интересуют структурные отношения между взаимодействующими экземплярами, используйте диаграммы связей. См. Метод: Диаграмма связей.
Содержание диаграммы последовательности
В диаграмме последовательности показываются экземпляры объектов и субъектов, а также сообщения, описывающие их взаимодействие. Диаграмма описывает происходящее в объектах-участниках (в форме активаций) и взаимодействие объектов посредством обмена сообщениями. Для каждой версии потока событий варианта использования можно сделать отдельную диаграмму.
Диаграмма последовательности, описывающая часть потока событий варианта использования Обслуживание местного звонка для телефонного коммутатора.
Объекты
Объект изображается в виде вертикального штрихового пунктира («генеральная линия»). Генеральная линия указывает на существование объекта в определенное время. Символ объекта рисуется в начале генеральной линии. Имя объекта и его класс выделяются подчеркиванием и разделяются двоеточием:
В диаграмме последовательности объекты можно использовать следующим образом:
Субъекты
Обычно экземпляр субъекта представляется первой (самой левой) генеральной линией диаграммы последовательности, как вызывающий взаимодействие. Если в диаграмме имеется несколько субъектов, размещайте их все ближе к краю (либо левому, либо правому).
Сообщения
Сообщение является способом связи между объектами, которые передают информацию, ожидая, что после последует действие. В диаграммах последовательности сообщение показывается как сплошная горизонтальная стрелка от генеральной линии одного объекта к генеральной линии другого. В случае посылки объектом сообщения самому себе, стрелка может начинаться и заканчиваться на одной и той же генеральной линии. Стрелка помечается названием сообщения и значениями его аргументов. Для отражения последовательности сообщений во взаимодействии в целом стрелка также может помечаться порядковым номером. На диаграммах последовательности, для которых положение стрелок показывает их последовательность относительно друг друга, порядковые номера часто опускаются
Сообщение может быть свободным, т.е. иметь в качестве имени общее описание сообщения и не соответствовать какой-либо конкретной операции объекта, принимающего сообщение. Поставить в соответствие такому сообщению операцию целевого объекта можно позже. Соответственно, имя сообщения станет равным имени операции.
Сценарии
Сценарий содержит текстуальное описание потока событий.
Размещайте сценарии слева от генеральных линий, так, чтобы можно было анализировать весь поток сверху вниз (см. рисунок выше). Сценарии можно прикреплять к сообщениям, что в случае перемещения сообщения также приведет к перемещению сценария.
Распределение управляющего потока в диаграмме последовательности
Централизованное управление потоком событий или его частью означает, что поток контролируется несколькими объектами путем посылки командных и получения ответных сообщений от остальных объектов. Контролирующие объекты определяют порядок активации других объектов в варианте использования. При этом взаимодействие остальных объектов сведено к минимуму или вообще отсутствует.
В варианте использования системы утилизации, Печать ежедневного отчета, отслеживается, среди прочего, число и тип возвращаемых объектов, а затем фиксируется итоговая информация. Контролирующий объект Генератор отчетов определяет порядок, в котором будут извлекаться и записываться суммы.
Поведение варианта использования Печать ежедневного отчета сосредоточено в объекте Генератор отчетов.
Это пример централизованного управления. В данном случае используется такая структура прежде всего из-за того, что различные фазы потока событий взаимонезависимы. Главным преимуществом такого подхода является то, что объекты не должны следить за итогами следующего объекта. Для изменения порядка фаз необходимо сделать соответствующие изменения только в управляющем объекте. Кроме того, аналогичным образом можно добавить новую фазу, например, при появлении нового типа возвращаемого объекта. Другим преимуществом централизованной структуры является простота повторного использования фаз в других вариантах использования, т.к. логика сортировки не встроена в сами объекты.
Децентрализованное управление означает, что объекты-участники обмениваются сообщениями между собой непосредственно, без участия контролирующих объектов.
Вариант использования Отправка письма отражает посылку письма в другую страну через почтовое отделение. Сначала письмо посылается в страну адресата. В ней оно направляется в указанный город. В городе, в свою очередь, оно доставляется домой адресату.
Поведение варианта использования Отправка письма децентрализованное.
Подходящий тип поведения зависит от приложения. Вообще, следует стремиться создавать независимые объекты, т.е. передавать различные задачи объектам, наиболее подходящим для их выполнения.
Потоку событий с централизованным управлением соответствует «вилообразная» диаграмма последовательности, тогда как прямолинейная диаграмма последовательности свидетельствует о децентрализованном управлении.
Потоку событий с централизованным управлением соответствует «вилообразная» диаграмма последовательности. Потоку событий с децентрализованным управлением соответствует прямолинейная диаграмма последовательности.
Поведенческая структура реализации варианта использования чаще всего является смесью централизованной и децентрализованной.
Децентрализованная структура подходит для следующих случаев:
Централизованная структура подходит для следующих случаев:
© Copyright IBM Corp. 1987, 2006. Все права защищены..
Виды диаграмм UML
Диаграмма последовательностей (sequence diagram)
Только что мы познакомились с диаграммой объектов, которая показывает отношения между объектами в некоторый момент времени, т. е. предоставляет нам снимок состояния системы, являясь статической. Диаграмма же последовательностей отображает взаимодействие объектов в динамике. Что значит «в динамике»? Как раз с этим нам и предстоит разобраться.
В UML взаимодействие объектов понимается как обмен информацией между ними. При этом информация принимает вид сообщений. Кроме того, что сообщение несет какую-то информацию, оно некоторым образом также влияет на получателя. Как видим, в этом плане UML полностью соответствует основным принципам ООП, в соответствии с которыми информационное взаимодействие между объектами сводится к отправке и приему сообщений.
Диаграмма последовательностей относится к диаграммам взаимодействия UML, описывающим поведенческие аспекты системы, но рассматривает взаимодействие объектов во времени. Другими словами, диаграмма последовательностей отображает временные особенности передачи и приема сообщений объектами.
Поскольку текст предыдущего абзаца, может быть, не слишком хорошо воспринимается на слух, да и лучше, как известно, «один раз увидеть, чем сто раз услышать», приведем пример диаграммы последовательностей (рис. 2.12):
А вот что описывает следующая диаграмма (рис. 2.13), попробуйте догадаться самостоятельно. Только, чур, не подсматривать в нижеследующий текст лекции!
Узнаете свой мобильный?
Диаграмма взаимодействия (кооперации, collaboration diagram)
Но давайте же, наконец, перейдем к примерам (рис. 2.15):
Как видите, эта диаграмма описывает (очень грубо) работу персонала библиотеки по обслуживанию клиентов: библиотекарь получает заказ от клиента, поручает сотруднику найти информацию по нужной клиенту книге, а после получения данных поручает еще одному сотруднику выдать книгу клиенту. Разобрались? Тогда еще пример (рис. 2.16):
Надеемся, что и эта диаграмма не смогла поставить вас в тупик. Скорее всего, она описывает процесс управления учебными курсами (очевидно, путем создания их из готовых модулей) для некоего учебного центра. Как видите, все просто!
И, наконец, еще один пример (рис. 2.17), который должен вызвать легкое «дежавю» у внимательного читателя.
Основы UML. Диаграммы последовательности
Диаграммы последовательности ( sequence diagram ) являются видом диаграмм взаимодействия языка UML, которые описывают отношения объектов в различных условиях. Условия взаимодействия задаются сценарием, полученным на этапе разработки диаграмм вариантов использования [1]. Существуют различные взгляды на применение этого вида диаграмм:
Рассмотрим этот вид диаграмм на примере главной последовательности сценария добавления ученика в систему:
Пример: диаграмма последовательности сценария добавления ученика в систему тестирования
По приведенной диаграмме можно проследить следующие правила построения:
Кроме того, на ней показаны три основных вида стрелок (сообщений):
При построении диаграммы последовательности обязанности распределяются между объектами (и классами), например мы решили, что база данных будет выступать в роли модели и уведомлять своих подписчиков об изменениях, однако эту же роль мог выполнить объект экрана добавления студента. Внести изменения в диаграмму значительно проще, чем в исходный код. Буч строит этот вид диаграмм сразу после описания вариантов использования, при этом он решает сразу две задачи — выделяет объекты и распределяет между ними ответственность, однако в процессе ICONIX к диаграммам последовательности переходят после построения диаграмм пригодности, т.е. уже выделены объекты, необходимые для реализации прецедента. Процесс построения при этом сводится к четырем шагам:
В нашем случае на диаграмме был оставлен контроллер, т.е. введен новый управляющий объект отображения уведомления о том, что студент был добавлен в базу. Мы, конечно, могли бы добавить этот функционал в виджет главного меню (наиболее простое решение), введение дополнительного объекта не только является более гибким решением, но и позволит снять с меню лишние обязанности, т.е. сделать код более чистым с точки зрения принципа единой обязанности — SRP [6].
Видно, что приведенная диаграмма очень хорошо отражает взаимодействие объектов, однако прецеденты могут содержать предусловия (требования, которые должны быть выполнены для начала выполнения действий прецедента) — они могут быть показаны при помощи механизма использования взаимодействий. Этот механизм позволяет указать что повторно используется какое-либо взаимодействие, определенное в другом месте, изображается с помощью метки ref. Так, можно показать, что до выполнения прецедента учитель должен войти в систему (выполнить прецедент login) и открыть окно главного меню:
Механизм использования взаимодействий диаграмм последовательности (метка ref)
Фреймы взаимодействия могут использоваться для изображения параллельных секций, при этом часть сообщений рисуются внутри фрейма par, так например, мы могли бы показать, что база данных уведомляет параллельно всех трех подписчиков и все они параллельно и независимо друг от друга начинают работать:
Пример использования фрейма взаимодействия par
Существуют также фреймы для изображения условных конструкций (alt, opt), циклов (loop) и критических секций (critical). Ветвление при этом использовать не рекомендуется, т.к. для изображения деталей алгоритмов в языке UML есть диаграммы деятельности, а Фаулер в таких случаях даже считает также обоснованным использование псевдокода.
Фаулер рекомендует строить диаграммы последовательностей не только при проектировании, но и на этапе рефакторинга если требуется заменить централизованную обработку децентрализованной (более гибкой), т.к. этот вид диаграмм является лучшим способом распределения обязанностей. Также, они часто используются при объяснении каких-либо деталей проекта другим участникам, т.к. этот вид диаграмм быстро строится с нужной степенью детализации на маркерной доске. На следующем примере показан фрейм взаимодействия loop:
Пример использования фрейма loop
На приведенной диаграмме показано взаимодействие процессов — главный процесс (go) после запуска создает дочерний (loop), затем в цикле посылает ему свой идентификатор (self())и некоторое сообщение (Msg). Дочерний процесс отправляет назад сообщение, но уже со своим идентификатором. Внутри части фрейма loop подписывается условие выхода из цикла — в данном случае пересылка сообщений продолжается до тех пор, пока Msg не станет равно «stop». После цикла главный процесс отправляет дочернему сообщение stop, которое является сигналом завершения процесса.
Последний пример показывает, что диаграммы последовательностей удобно использовать не только при проектировании архитектуры приложений, но и для описания взаимодействия процессов/потоков. Визуальное представление в таких случаях гораздо проще воспринимается, чем текстовое описание.
Таким образом, диаграммы вариантов использования могут очень широко применяться при разработке программного обеспечения:
Учебное пособие по диаграммам последовательностей: полное руководство с примерами
Updated on: 22 January 2021
Данное учебное пособие поможет Вам лучше понять диаграммы последовательностей; объяснит все, что Вам необходимо знать, от того, как нарисовать диаграмму последовательностей до распространенных ошибок, которых следует избегать при рисовании одной из них.
Существует 3 типа диаграмм взаимодействия: диаграммы последовательности, диаграммы связи и диаграммы времени. Эти диаграммы используются для иллюстрации взаимодействия между частями системы. Среди трех, диаграммы последовательности предпочтительны как для разработчиков, так и для читателей из-за их простоты.
В этом учебном пособии по последовательной диаграмме вы узнаете об этом;
Что такое диаграмма последовательности?
Диаграммы последовательностей, обычно используемые разработчиками, моделируют взаимодействия между объектами в едином сценарии использования. Они иллюстрируют, как различные части системы взаимодействуют друг с другом для выполнения функции, а также порядок, в котором происходит взаимодействие при выполнении конкретного случая использования.
Проще говоря, диаграмма последовательности показывает различные части работы системы в “последовательности”, чтобы что-то сделать.
Обозначения диаграмм последовательности
Схема последовательности построена таким образом, что она представляет собой временную шкалу, которая начинается сверху и постепенно опускается, чтобы отметить последовательность взаимодействий. Каждый объект имеет колонку, а сообщения, которыми обмениваются между собой, представлены стрелками.
Краткий обзор различных частей диаграммы последовательности
Нотация линии жизни последовательность состоит из нескольких таких обозначений линии жизнеобеспечения, которые должны быть расположены горизонтально в верхней части диаграммы. Никакие две нотации страховочной линии не должны перекрывать друг друга. Они представляют собой различные объекты или части, которые взаимодействуют друг с другом в системе во время последовательности.
Нотация жизненной линии с символом элемента агента используется в том случае, если конкретная диаграмма последовательности принадлежит случаю использования.
Линия жизни с элементом-субъектом представляет системные данные. Например, в приложении “Обслуживание клиентов” организация-заказчик будет управлять всеми данными, относящимися к клиенту.
Линия жизни с пограничным элементом обозначает системную границу/программный элемент в системе; например, экраны пользовательского интерфейса, шлюзы базы данных или меню, с которыми взаимодействуют пользователи, являются границами.
И линия жизни с элементом контроля указывает на контролирующую организацию или менеджера. Он организует и составляет график взаимодействия между границами и субъектами и выступает в качестве посредника между ними.
Бары активации
Активационная планка – это коробка, расположенная на страховочной линии. Используется для указания на то, что объект активен (или инстанцирован) во время взаимодействия между двумя объектами. Длина прямоугольника указывает на продолжительность пребывания объектов в активном состоянии.
На диаграмме последовательности взаимодействие между двумя объектами происходит, когда один объект посылает сообщение другому. Использование строки активации на спасательных линиях вызывающего сообщения (объекта, отправляющего сообщение) и получателя сообщения (объекта, принимающего сообщение) указывает на то, что оба они активны/осуществляются во время обмена сообщением.
Стрелки сообщений
Стрелка от Звонящего до Получателя сообщения указывает сообщение на схеме последовательности. Сообщение может идти в любом направлении: слева направо, справа налево или обратно к самому вызывающему сообщение абоненту. В то время как вы можете описать сообщение, отправляемое с одного объекта на другой, на стрелке, с разными заголовками стрелок, вы можете указать тип отправляемого или получаемого сообщения.
Стрелка сообщения содержит описание, известное как подпись сообщения. Формат подписи этого сообщения приведен ниже. Все части, кроме имени_сообщения, являются необязательными.
Атрибут = имя_сообщения (аргументы): return_type
Как показано в примере полосок активации, синхронное сообщение используется, когда отправитель ждет, пока приемник обработает сообщение и вернется, прежде чем продолжить с другим сообщением. Заголовок стрелки, используемый для обозначения этого типа сообщения, является сплошным, как показано ниже.
Асинхронное сообщение используется, когда вызывающая сторона не ждет, пока приемник обработает сообщение и вернется, прежде чем отправить другие сообщения другим объектам в системе. Заголовок стрелки, используемый для отображения этого типа сообщения, представляет собой стрелку в виде строки, как показано в примере ниже.
Возвращаемое сообщение используется для указания на то, что приемник сообщения закончил обработку сообщения и возвращает управление вызывающему абоненту. Возвращаемые сообщения являются необязательными элементами нотации, так как строка активации, вызываемая синхронным сообщением, всегда подразумевает возвратное сообщение.
Совет: Вы можете избежать загромождения диаграмм, минимизируя использование возвратных сообщений, так как возвращаемое значение может быть указано в самой стрелке исходного сообщения.
Объекты не обязательно живут в течение всей последовательности событий. Объекты или участники могут быть созданы в соответствии с отправляемым сообщением.
Удаленную нотацию ящика участника можно использовать, когда нужно показать, что конкретного участника не существовало до тех пор, пока не был отправлен вызов на создание. Если созданный участник делает что-то сразу после создания, необходимо добавить окно активации прямо под окном участника.
Аналогичным образом, участники, которые больше не нужны, могут быть удалены из схемы последовательности. Это делается путем добавления буквы “Х” в конце спасательной линии указанного участника.
Когда объект посылает сообщение самому себе, он называется рефлексивным сообщением. Она обозначается стрелкой сообщения, которая начинается и заканчивается на одной и той же спасательной линии, как показано в примере ниже.
Комментарий
UML-диаграммы допускают аннотацию комментариев во всех типах UML-диаграммы. Объект-комментарий представляет собой прямоугольник со сложенным углом, как показано ниже. Комментарий можно связать со связанным объектом с помощью пунктирной линии.
Примечание: Просмотрите “Лучшие методы работы с диаграммой последовательностей”, чтобы узнать о фрагментах последовательностей.
Диаграмма последовательностей Лучшие практики
Фрагмент последовательности представлен в виде рамки, обрамляющей участок взаимодействия между объектами (как показано в примерах ниже) на диаграмме последовательности.
Он используется для более структурированного отображения сложных взаимодействий, таких как альтернативные потоки и циклы. В верхнем левом углу фрагмента расположен оператор. Этот оператор – оператор фрагмента – указывает, что это за фрагмент.
Фрагмент альтернативной комбинации используется, когда необходимо сделать выбор между двумя или более последовательностями сообщений. Он моделирует логику “если, то еще”.
Альтернативный фрагмент представляет собой большой прямоугольник или кадр, который задается упоминанием ‘alt’ в окошке с названием кадра (так называемый оператор фрагмента).
Чтобы показать две или более альтернативы, больший прямоугольник затем делится на то, что называется операндов взаимодействия, используя пунктирную линию, как показано на примере диаграммы последовательности выше. Каждый операнд имеет защитное ограждение, которое проверяется и размещается в верхнем левом углу операндов.
Фрагмент комбинации опций используется для указания последовательности, которая будет происходить только при определенном условии, в противном случае последовательность не будет происходить. Оно моделирует утверждение “если тогда”.
Как и альтернативный фрагмент, фрагмент опции также представлен прямоугольной рамкой, в которой в окошке с названием помещается ‘opt’.
В отличие от альтернативного фрагмента, фрагмент опции не делится на два или более операндов. Вариант защиты расположен в верхнем левом углу.
(Найдите пример диаграммы последовательности с фрагментом опции в разделе Шаблоны и примеры последовательностей).
Loop фрагмент используется для представления повторяющейся последовательности. Поместите слова “петля” в поле с названием и состояние защиты в верхнем левом углу рамы.
В дополнение к Булеву тесту, защитный кожух в фрагменте петли может иметь два других специальных условия, с которыми он тестируется. Это минимальные (записанные как minint = [число] и максимальные (записанные как maxint = [число])).
Если это защита от минимальных итераций, то шлейф должен выполняться не меньше указанного числа, а если это защита от максимальных итераций, то шлейф не должен выполняться больше указанного числа.
(Пример фрагмента цикла приведен ниже в шаблонах последовательных диаграмм и разделе с примерами)
Вы можете использовать фрагмент ссылки для управления размером больших последовательных диаграмм. Это позволяет повторно использовать часть одной диаграммы последовательностей в другой, или, другими словами, можно ссылаться на часть диаграммы в другой диаграмме, используя фрагмент рефрагмента.
Для указания ссылочного фрагмента необходимо в окошке с названием кадра указать ‘ref’, а внутри кадра – название диаграммы последовательности, на которую делается ссылка.
Для получения дополнительных фрагментов последовательностей обратитесь к Основам диаграмм последовательностей: Часть 1, Часть 2 и Часть 3.
Вместо того, чтобы загромождать диаграмму последовательности несколькими объектами и группами сообщений, которые запутают читателя, нарисуйте несколько более мелких диаграмм последовательности, которые точно объяснят, что делает ваша система. Убедитесь, что диаграмма помещается на одной странице и оставляет место и для пояснительных примечаний.
Также вместо того, чтобы рисовать десятки последовательностей диаграмм, выясните, что является общим среди сценариев и сосредоточьтесь на этом. А если код выразителен и может стоять сам по себе, то в первую очередь нет необходимости рисовать диаграмму последовательностей.
Как нарисовать схему последовательности
Диаграмма последовательности представляет сценарий или поток событий в одном единственном случае использования. Поток сообщений диаграммы последовательностей основан на описании конкретного случая использования.
Затем, прежде чем начать рисовать диаграмму последовательностей или решить, какие взаимодействия должны быть включены в нее, необходимо нарисовать диаграмму сценария использования и подготовить полное описание того, что делает конкретный сценарий использования.
Из вышеприведенного примера схемы использования ‘Создать новую учетную запись онлайн-библиотеки’, мы сконцентрируемся на примере схемы использования под названием ‘Создать новую учетную запись пользователя’.
Перед рисованием диаграммы последовательности необходимо определить объекты или агенты, которые будут участвовать в создании новой учетной записи пользователя. Это было бы;
После того, как вы идентифицировали объекты, важно написать подробное описание того, что делает случай использования. Из этого описания можно легко вычислить взаимодействия (которые должны идти на диаграмме последовательности), которые будут происходить между объектами, указанными выше, после того, как будет выполнен сценарий использования.
Вот шаги, которые происходят в случае использования под названием “Создать новую учетную запись пользователя библиотеки”.
На каждом из этих этапов можно легко указать, какие сообщения должны обмениваться между объектами на схеме последовательности. Как только все станет ясно, можно приступать к построению диаграммы последовательности.
Приведенная ниже схема последовательности показывает, как объекты в системе управления онлайн-библиотекой взаимодействуют друг с другом для выполнения функции “Создать новую учетную запись пользователя библиотеки”.
Распространенные ошибки в диаграммах последовательностей
При рисовании схем последовательности дизайнеры склонны допускать такие распространенные ошибки. Избегая этих ошибок, вы можете гарантировать качество вашей диаграммы.
См. подробное объяснение этих распространенных ошибок в Руководстве по последовательным диаграммам: Обычные ошибки, которых следует избегать при рисовании диаграмм последовательностей.
Примеры и шаблоны схем последовательностей
Ниже приведены несколько примеров схем последовательностей и шаблонов, которые нарисованы с использованием Creately. Создавайте диаграммы последовательности онлайн с помощью онлайн-инструмента Creately. Щелкните по шаблону, чтобы открыть его в редакторе.
Система онлайн-экзаменов – Схема последовательности
Щелкните по изображению, чтобы отредактировать его в режиме онлайн
Схема последовательности Пример системы управления школой
Пример фрагмента комбинации опций
Пример последовательности циклов
Вот еще несколько шаблонов и примеров диаграмм последовательности, которые вы можете редактировать прямо сейчас.
Учебное пособие по диаграммам последовательности – презентация SlideShare
Обратная связь по учебному пособию “Схема последовательности”
Данное учебное пособие по последовательным схемам охватывает все, что необходимо знать на последовательных схемах и их построении. Если у Вас есть какие-либо предложения или вопросы касательно учебного пособия “Схема последовательности”, Вы можете оставить свой комментарий.