для чего используются диаграммы последовательности
Для чего используются диаграммы последовательности
Обычно диаграмма последовательности используется для иллюстрации реализации вариантов использования (см. Рабочий продукт: Реализации вариантов использования), т.е. отражения взаимодействия объектов, соответствующего части или всему варианту использования. Взаимодействие объектов, воплощающее вариант использования, иллюстрируется одной или несколькими диаграммами последовательности. Обычно используется одна диаграмма для отражения основного потока событий и по одной для каждого отдельного подпотока варианта использования.
Диаграммы последовательности, в частности, важны при проектировании, т.к. они помогают уяснить роли объектов в потоке и, следовательно, предоставляют начальные данные для определения интерфейсов и назначений классов.
В отличие от диаграммы связей, диаграмма последовательности включает в себя хронологические последовательности, но не включает в себя информацию о взаимосвязи объектов. Диаграммы последовательности и диаграммы связей несут в себе аналогичную информацию, но представляют ее различными способами. Диаграммы последовательности показывают явные последовательности сообщений и хорошо подходят для наглядного представления хронологического порядка сообщений. Если вас интересуют структурные отношения между взаимодействующими экземплярами, используйте диаграммы связей. См. Метод: Диаграмма связей.
Содержание диаграммы последовательности
В диаграмме последовательности показываются экземпляры объектов и субъектов, а также сообщения, описывающие их взаимодействие. Диаграмма описывает происходящее в объектах-участниках (в форме активаций) и взаимодействие объектов посредством обмена сообщениями. Для каждой версии потока событий варианта использования можно сделать отдельную диаграмму.
Диаграмма последовательности, описывающая часть потока событий варианта использования Обслуживание местного звонка для телефонного коммутатора.
Объекты
Объект изображается в виде вертикального штрихового пунктира («генеральная линия»). Генеральная линия указывает на существование объекта в определенное время. Символ объекта рисуется в начале генеральной линии. Имя объекта и его класс выделяются подчеркиванием и разделяются двоеточием:
В диаграмме последовательности объекты можно использовать следующим образом:
Субъекты
Обычно экземпляр субъекта представляется первой (самой левой) генеральной линией диаграммы последовательности, как вызывающий взаимодействие. Если в диаграмме имеется несколько субъектов, размещайте их все ближе к краю (либо левому, либо правому).
Сообщения
Сообщение является способом связи между объектами, которые передают информацию, ожидая, что после последует действие. В диаграммах последовательности сообщение показывается как сплошная горизонтальная стрелка от генеральной линии одного объекта к генеральной линии другого. В случае посылки объектом сообщения самому себе, стрелка может начинаться и заканчиваться на одной и той же генеральной линии. Стрелка помечается названием сообщения и значениями его аргументов. Для отражения последовательности сообщений во взаимодействии в целом стрелка также может помечаться порядковым номером. На диаграммах последовательности, для которых положение стрелок показывает их последовательность относительно друг друга, порядковые номера часто опускаются
Сообщение может быть свободным, т.е. иметь в качестве имени общее описание сообщения и не соответствовать какой-либо конкретной операции объекта, принимающего сообщение. Поставить в соответствие такому сообщению операцию целевого объекта можно позже. Соответственно, имя сообщения станет равным имени операции.
Сценарии
Сценарий содержит текстуальное описание потока событий.
Размещайте сценарии слева от генеральных линий, так, чтобы можно было анализировать весь поток сверху вниз (см. рисунок выше). Сценарии можно прикреплять к сообщениям, что в случае перемещения сообщения также приведет к перемещению сценария.
Распределение управляющего потока в диаграмме последовательности
Централизованное управление потоком событий или его частью означает, что поток контролируется несколькими объектами путем посылки командных и получения ответных сообщений от остальных объектов. Контролирующие объекты определяют порядок активации других объектов в варианте использования. При этом взаимодействие остальных объектов сведено к минимуму или вообще отсутствует.
В варианте использования системы утилизации, Печать ежедневного отчета, отслеживается, среди прочего, число и тип возвращаемых объектов, а затем фиксируется итоговая информация. Контролирующий объект Генератор отчетов определяет порядок, в котором будут извлекаться и записываться суммы.
Поведение варианта использования Печать ежедневного отчета сосредоточено в объекте Генератор отчетов.
Это пример централизованного управления. В данном случае используется такая структура прежде всего из-за того, что различные фазы потока событий взаимонезависимы. Главным преимуществом такого подхода является то, что объекты не должны следить за итогами следующего объекта. Для изменения порядка фаз необходимо сделать соответствующие изменения только в управляющем объекте. Кроме того, аналогичным образом можно добавить новую фазу, например, при появлении нового типа возвращаемого объекта. Другим преимуществом централизованной структуры является простота повторного использования фаз в других вариантах использования, т.к. логика сортировки не встроена в сами объекты.
Децентрализованное управление означает, что объекты-участники обмениваются сообщениями между собой непосредственно, без участия контролирующих объектов.
Вариант использования Отправка письма отражает посылку письма в другую страну через почтовое отделение. Сначала письмо посылается в страну адресата. В ней оно направляется в указанный город. В городе, в свою очередь, оно доставляется домой адресату.
Поведение варианта использования Отправка письма децентрализованное.
Подходящий тип поведения зависит от приложения. Вообще, следует стремиться создавать независимые объекты, т.е. передавать различные задачи объектам, наиболее подходящим для их выполнения.
Потоку событий с централизованным управлением соответствует «вилообразная» диаграмма последовательности, тогда как прямолинейная диаграмма последовательности свидетельствует о децентрализованном управлении.
Потоку событий с централизованным управлением соответствует «вилообразная» диаграмма последовательности. Потоку событий с децентрализованным управлением соответствует прямолинейная диаграмма последовательности.
Поведенческая структура реализации варианта использования чаще всего является смесью централизованной и децентрализованной.
Децентрализованная структура подходит для следующих случаев:
Централизованная структура подходит для следующих случаев:
© Copyright IBM Corp. 1987, 2006. Все права защищены..
Диаграмма последовательности UML
Диаграмма последовательности UML
Для чего используется метод проектирования
Изобразить участвующие во взаимодействии объекты и последовательность сообщений, которыми они обмениваются.
План действий
В разделе «Описание» изучите основной набор символов диаграммы последовательности, необходимый для того, чтобы уметь читать диаграммы.
После ознакомления с другими разделами («Пример», «Применение») вы можете попробовать свои силы в самостоятельном составлении диаграмм последовательности.
Замечания (описание)
Здесь представлен основной набор символов диаграммы последовательности, необходимый для того, чтобы суметь прочитать диаграмму. После ознакомления с другими разделами («Пример», «Применение») вы сможете составлять диаграммы последовательности самостоятельно!
| Термин | Изображение | Описание |
|---|---|---|
| Найденное сообщение | У первого сообщения нет участника, пославшего его, поскольку оно приходит из неизвестного источника. Оно называется найденным сообщением (found message). | |
| Сообщение | Команда, отправляемая другому участнику. Может содержать только передаваемые данные. | |
| Линия жизни | Каждая линия жизни имеет полосу активности, которая показывает интервал активности участника при взаимодействии. Она соответству ет времени нахождения в стеке одного из методов участника. В языке UML полосы активности не обязательны, но я считаю их исключительно удобными при пояснении поведения. | |
| Участник | В большинстве случаев можно считать участников диаграммы взаимодействия объектами, как это и было в действительности в UML 1. Но в UML 2 их роль значительно сложнее. Поэтому здесь употребляется термин участники (participants), который формально не входит в спецификацию UML. | |
| Самовызов | Участник отправляет сообщение (команду) самому себе. | |
| Возврат | Передача управления обратно участнику, который до этого инициировал сообщение. | |
| Активация | На изображении это — белый вертикальный прямоугольник. Момент, когда участник начинает действовать в ответ на принятое сообщение. | |
| Создание | В случае создания участника надо нарисовать стрелку сообщения, на правленную к прямоугольнику участника. Если применяется конст руктор, то имя сообщения не обязательно, но можно маркировать его словом «new» в любом случае. Если участник выполняет что- нибудь непосредственно после создания, например команду запроса, то надо начать активацию сразу после прямоугольника участника. | |
| Самоудаление | Удаление участника обозначается большим крестом (X). X в конце линии жизни показывает, что участник удаля ет сам себя. | |
| Удаление из другого объекта | Удаление участника обозначается большим крестом (X). Стрелка сооб щения, идущая в X, означает, что один участник явным образом уда ляет другого. | |
| Фреймы взаимодействия |
Как применять технику креативности
Диаграммы последовательности следует применять тогда, когда требуется посмотреть на поведение нескольких объектов в рамках одного прецедента. Диаграммы последовательности хороши для представления взаимодействия объектов, но не очень подходят для точного определения поведения.
Если вы хотите посмотреть на поведение одного объекта в нескольких прецедентах, то примените диаграмму состояния. Если же надо изучить поведение нескольких объектов в нескольких прецедентах или потоках, не забудьте о диаграмме деятельности.
Если требуется быстро исследовать несколько вариантов взаимодействия, лучше использовать CRC-карточки, поскольку это позволяет избежать непрерывного рисования и стирания. Часто бывает удобно поработать с CRC-карточками для просмотра вариантов взаимодействия, а затем с помощью диаграмм взаимодействий фиксировать те взаимодействия, которые будут применяться позже.
Другим полезным видом диаграмм взаимодействий являются коммуникационные диаграммы, которые показывают соединения, и временные диаграммы, показывающие временные интервалы.
CRC-карточки
Одним из наиболее полезных приемов, соответствующих хорошему стилю ООП, является исследование взаимодействия объектов, поскольку его цель состоит в том, чтобы исследовать работу программы, а не данные. CRC-диаграммы (Class-Responsibility-Collaboration, класс-обязанность-кооперация), придуманные Уордом Каннингемом (Ward Cunningham) в конце 80-х годов, выдержали проверку временем и стали высокоэффективным инструментом решения этой задачи (рис. 4.6). И хотя они не входят в состав UML, все же являются очень популярными среди высококвалифицированных разработчиков в области объектных технологий.
Для использования CRC-карточек вы и ваши коллеги должны собраться за столом. Возьмите различные сценарии и проиграйте их с помощью карточек, поднимая их над столом, в то время когда они активны, и передавая их по кругу в предположении, что они посылают сообщение. Эту технологию почти невозможно описать в книге, но легко продемонстрировать; лучший способ научиться этому состоит в том, чтобы попросить кого-нибудь, кто имеет такой опыт, показать вам это
Важным моментом в CRC-методике является определение ответственностей. Ответственность (responsibility) – это краткое описание того, что объект должен делать: операция, которую выполняет объект, некоторый объем знаний, который объект поддерживает, или какие-либо важные решения, принимаемые объектом. Идея состоит в том, чтобы вы могли взять любой класс и сформулировать его разумно ограниченные обязанности. Такой образ действия поможет вам яснее представить себе архитектуру классов.
Вторая буква «С» (в CRC) означает взаимодействие (collaboration): другие классы, с которыми должен работать рассматриваемый класс. Это дает вам некоторое представление о связях между классами, но все еще на высоком уровне.
Одно из главных преимуществ CRC-карточек состоит в том, что они способствуют живому обсуждению проектов в среде разработчиков. Если в процессе работы над шаблоном поведения вы хотите посмотреть, как классы его реализуют, то вычерчивание диаграмм взаимодействия, описанных в этой главе, может занять слишком много времени. Обычно требуется просмотреть варианты, а рисование и стирание вариантов на диаграммах может быть очень утомительным. С помощью CRC-карточек разработчики моделируют взаимодействие, поднимая карточки и передавая их по кругу. Это позволяет быстро просчитать варианты.
В процессе работы вы создаете представление об ответственностях и записываете их на карточки. Размышления об ответственностях важны, поскольку рассеивают представление о классах как о бессловесных хранителях данных и помогают членам команды лучше понять поведение каждого класса на высшем уровне. Ответственность может соответствовать операции, атрибуту или, что более точно, неограниченной группе атрибутов и операций.
Опыт показывает, что распространенной ошибкой разработчиков является создание ими длинных списков низкоуровневых ответственностей. Это приводит к непониманию сути. Ответственности должны свободно помещаться на одной карточке. Спросите себя, следует ли разделить класс или лучше отрегулировать ответственности, переместив их на более высокий уровень операторов.
Многие разработчики подчеркивают важность ролевой игры, когда каждый член команды играет роль одного или нескольких классов.
Как научиться
Здесь мы попытались предоставить как можно более простой способ изучения диаграммы последовательности языка UML.
Как и многие другие языки он использует для описания набор знаков. Смысл этих знаков вы найдете в таблице в разделе «Замечания (описание)». Каждый знак имеет свое наименование (термин) и написание. Также каждый термин снабжен кратким пояснением, чтобы быстро уяснить его основную суть.
Далее мы бы рекомендовали перейти в раздел «Пример», чтобы попробовать свои силы в чтении разных диаграмм. Затем стоит изучить раздел «Применение», так как, хотя и количество типов диаграмм в UML невелико, максимум преимуществ от их использования вы сможете получить только если будете применять нужные диаграммы по назначению.
Пример использования
Для того чтобы начать обсуждение метода «Диаграмма последовательности» UML (ЮМЛ), рассмотрим простой сценарий.
Предположим, что у нас есть заказ, и мы собираемся вызвать команду для определения его стоимости. При этом объекту заказа (Order) необ ходимо просмотреть все позиции заказа (Line Items) и определить их цены, основанные на правилах построения цены продукции в строке заказа (Order Line). Проделав это для всех позиций заказа, объект за каза должен вычислить общую скидку, которая определяется индиви дуально для каждого клиента.
На рис. 4.1 приведена диаграмма, представляющая реализацию дан ного сценария. Диаграммы последовательности показывают взаимо действие, представляя каждого участника вместе с его линией жизни (lifeline), которая идет вертикально вниз и упорядочивает сообщения на странице; сообщения также следует читать сверху вниз.
Одно из преимуществ диаграммы последовательности заключается в том, что почти не придется объяснять ее нотацию. Можно видеть, что экземпляр заказа посылает строке заказа сообщения getQuantity и getProduct. Можно также видеть, как заказ применяет метод к самому себе и как этот метод посылает сообщение getDiscountInfo экземпляру клиента.
Однако диаграмма не все показывает так хорошо. Последовательность сообщений getQuantity, getProduct, getPricingDetails и calculateBasePrice должна быть реализована для каждой строки заказа, тогда как метод calculateDiscounts вызывается лишь однажды.
На приведенной диаграмме именовали участников, используя стиль anOrder. В большинстве случаев это вполне приемлемо. Вот более полный синтаксис: имя : Класс, где и имя, и класс не обязательны, но если класс используется, то двоеточие должно присутствовать.
Каждая линия жизни имеет полосу активности, которая показывает интервал активности участника при взаимодействии. Она соответствует времени нахождения в стеке одного из методов участника. В языке UML полосы активности не обязательны.
У первого сообщения нет участника, пославшего его, поскольку оно приходит из неизвестного источника. Оно называется найденным со общением (found message).
Создание и удаление участников
В диаграммах последовательности для создания и удаления участников применяются некоторые дополнительные обозначения (рис. 4.3).
Удаление участника обозначается большим крестом (X). Стрелка сообщения, идущая в X, означает, что один участник явным образом удаляет другого; X в конце линии жизни показывает, что участник удаляет сам себя.
Диаграмма последовательности: циклы, условия и тому подобное
Общая проблема диаграмм последовательности заключается в том, как отображать циклы и условные конструкции. Прежде всего надо усвоить, что диаграммы последовательности для этого не предназначены. Подобные управляющие структуры лучше показывать с помощью диаграммы деятельности или собственно кода. Диаграммы последовательности применяются для визуализации процесса взаимодействия объектов, а не как средство моделирования алгоритма управления.
В основном фреймы состоят из некоторой области диаграммы последовательности, разделенной на несколько фрагментов. Каждый фрейм имеет оператор, а каждый фрагмент может иметь защиту. (В табл. 4.1 перечислены общепринятые операторы для фреймов взаимодействия.)
Для отображения цикла применяется оператор loop с единственным фрагментом, а тело итерации помещается в защиту. Для условной логики можно использовать оператор alt и помещать условие в каждый фрагмент. Будет выполнен только тот фрагмент, защита которого имеет истинное значение. Для единственной области существует оператор opt.
Подписывайтесь на новости сайта, форму подписки вы можете найти в правой колонке сайта.
Если вы хотите научиться работать на фрилансе профессионально, приглашаем на курс «Как зарабатывать на фрилансе».
Основы UML. Диаграммы последовательности
Диаграммы последовательности ( sequence diagram ) являются видом диаграмм взаимодействия языка UML, которые описывают отношения объектов в различных условиях. Условия взаимодействия задаются сценарием, полученным на этапе разработки диаграмм вариантов использования [1]. Существуют различные взгляды на применение этого вида диаграмм:
Рассмотрим этот вид диаграмм на примере главной последовательности сценария добавления ученика в систему:

По приведенной диаграмме можно проследить следующие правила построения:
Кроме того, на ней показаны три основных вида стрелок (сообщений):
При построении диаграммы последовательности обязанности распределяются между объектами (и классами), например мы решили, что база данных будет выступать в роли модели и уведомлять своих подписчиков об изменениях, однако эту же роль мог выполнить объект экрана добавления студента. Внести изменения в диаграмму значительно проще, чем в исходный код. Буч строит этот вид диаграмм сразу после описания вариантов использования, при этом он решает сразу две задачи — выделяет объекты и распределяет между ними ответственность, однако в процессе ICONIX к диаграммам последовательности переходят после построения диаграмм пригодности, т.е. уже выделены объекты, необходимые для реализации прецедента. Процесс построения при этом сводится к четырем шагам:
В нашем случае на диаграмме был оставлен контроллер, т.е. введен новый управляющий объект отображения уведомления о том, что студент был добавлен в базу. Мы, конечно, могли бы добавить этот функционал в виджет главного меню (наиболее простое решение), введение дополнительного объекта не только является более гибким решением, но и позволит снять с меню лишние обязанности, т.е. сделать код более чистым с точки зрения принципа единой обязанности — SRP [6].
Видно, что приведенная диаграмма очень хорошо отражает взаимодействие объектов, однако прецеденты могут содержать предусловия (требования, которые должны быть выполнены для начала выполнения действий прецедента) — они могут быть показаны при помощи механизма использования взаимодействий. Этот механизм позволяет указать что повторно используется какое-либо взаимодействие, определенное в другом месте, изображается с помощью метки ref. Так, можно показать, что до выполнения прецедента учитель должен войти в систему (выполнить прецедент login) и открыть окно главного меню:

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

Существуют также фреймы для изображения условных конструкций (alt, opt), циклов (loop) и критических секций (critical). Ветвление при этом использовать не рекомендуется, т.к. для изображения деталей алгоритмов в языке UML есть диаграммы деятельности, а Фаулер в таких случаях даже считает также обоснованным использование псевдокода.
Фаулер рекомендует строить диаграммы последовательностей не только при проектировании, но и на этапе рефакторинга если требуется заменить централизованную обработку децентрализованной (более гибкой), т.к. этот вид диаграмм является лучшим способом распределения обязанностей. Также, они часто используются при объяснении каких-либо деталей проекта другим участникам, т.к. этот вид диаграмм быстро строится с нужной степенью детализации на маркерной доске. На следующем примере показан фрейм взаимодействия loop:

На приведенной диаграмме показано взаимодействие процессов — главный процесс (go) после запуска создает дочерний (loop), затем в цикле посылает ему свой идентификатор (self())и некоторое сообщение (Msg). Дочерний процесс отправляет назад сообщение, но уже со своим идентификатором. Внутри части фрейма loop подписывается условие выхода из цикла — в данном случае пересылка сообщений продолжается до тех пор, пока Msg не станет равно «stop». После цикла главный процесс отправляет дочернему сообщение stop, которое является сигналом завершения процесса.
Последний пример показывает, что диаграммы последовательностей удобно использовать не только при проектировании архитектуры приложений, но и для описания взаимодействия процессов/потоков. Визуальное представление в таких случаях гораздо проще воспринимается, чем текстовое описание.
Таким образом, диаграммы вариантов использования могут очень широко применяться при разработке программного обеспечения:




