2. Язык UML. Руководство пользователя. Буч_ Рамбо_ Якобсон (2-е издание) (2006) (1185732), страница 52
Текст из файла (страница 52)
Если нужно особенно точно показать расположение фокуса управления, оттените часть прямоугольника, обозначающего период времени, в течение которого на самом деле работаетметод объекта и управление не передается другому объекту. Правда,эта конструкция будет казаться довольно «утяжеленной».Основное содержимое диаграммы последовательности – сообщения.
Они изображаются стрелками, направленными от одной линии жизни к другой. Стрелка указывает на приемник сообщения.Если таковое асинхронно, то стрелка рисуется «уголком», а еслисинхронно (вызов), то закрашенным треугольником. Ответ на синхронное сообщение (возврат из вызова) показывается пунктирнойстрелкой «уголком». Сообщение возврата может быть опущено,поскольку каждый вызов неявно подразумевает возврат, но иногда удобно таким образом продемонстрировать возвращаемое значение.Упорядочение по времени вдоль единственной линии жизнивесьма важно. Обычно точное расстояние не имеет значения; линии жизни показывают лишь относительные последовательности,поэтому не обеспечивают масштабного отображения времени.
Кроме того, позиции сообщений на отдельных парах линий жизни, какправило, не влияют на хронологию передачи информации; сообщения могут поступать в любом порядке. Полные наборы сообщенийна отдельных линиях жизни формируют частичное упорядочение.Серии сообщений, однако, устанавливают цепь причинных связей,поэтому любая точка на другой линии жизни в конце цепи должнавсегда следовать за точкой начала цепи на исходной линии.Структурированное управлениена диаграммах последовательностиПоследовательность сообщений прекрасно подходит для отображения отдельных линейных последовательностей, но часто возникает необходимость показать условные операторы и циклы.
Иногданужно отобразить параллельное выполнение множества последовательностей. Эти разновидности высокоуровневого управления могут быть показаны на диаграммах последовательности с помощьюоператоров структурированного управления.268Диаграммы взаимодействияОператор управления (control operator) изображается на диаграмме последовательности в виде прямоугольной области. Он сопровождается тегом – текстовой меткой, заключенной в маленькийпятиугольник, в верхнем левом углу.
Она показывает, какой этооператор управления. Оператор применяется к линиям жизни, которые его пересекают. Эта часть называется телом оператора. Еслилиния жизни не затрагивается оператором, она может быть прервана в его начале (вверху) и продолжена в конце (внизу). Чаще всегоприменяются следующие виды управления: необязательное выполнение (тег opt). Тело этого управляющего оператора выполняется, если защитное условие истинно на его входе. Защитное условие – это булево выражение,которое указано в квадратных скобках в верхней части однойиз линий жизни внутри тела и может ссылаться на атрибутыобъекта; условное выполнение (тег alt).
Тело управляющего оператора разделяется на несколько подобластей горизонтальнымипунктирными линиями. Каждая подобласть представляетодну ветвь условия и снабжена своим защитным условием.Если защитное условие подобласти истинно, то она выполняется. Вместе с тем может выполниться не более однойподобласти. Если истинно несколько защитных условий,то выбор подобласти для выполнения не определен и можетварьироваться от запуска к запуску. Если ни одно из условийне истинно, то управление продолжается за пределами оператора.
Одна подобласть может иметь особое защитное условие [else]. Такая подобласть выполняется, если не истинныникакие другие защитные условия; параллельное выполнение (тег par). Тело управляющегооператора делится на несколько подобластей горизонтальными пунктирными линиями. Каждая подобласть представляет параллельный (конкурирующий) поток вычислений.При этом в большинстве случаев каждая подобласть включает разные линии жизни. Когда управление переходит к данному оператору, все его подобласти начинают выполняться параллельно.
Выполнение сообщений в каждой из нихпоследовательно, но относительный порядок сообщенийиз параллельных подобластей совершенно произволен. Этаконструкция не должна применяться, если разные вычисления взаимодействуют. Очень удобный оператор, так каксуществует очень много ситуаций из реального мира, в которых можно вычленить независимые параллельные потокидеятельности;Базовые понятия269 циклическое (итерационное) выполнение (тег loop).
Защитное условие появляется в вершине одной линии жизни внутритела. Тело оператора цикла выполняется неоднократно – до техпор, пока защитное условие истинно перед каждой итерацией. Когда же оно принимает значение false (ложь) в вершинетела, управление передается за пределы оператора.Существует также множество других операторов, но перечисленные используются наиболее часто.Для четкого обозначения границ диаграмма последовательности может заключаться в прямоугольник с тегом sd в верхнем левомуглу. За этим тегом может следовать имя диаграммы.На рис. 19.3 представлен упрощенный пример, который иллюстрирует использование некоторых управляющих операторов.
Пользователь инициирует последовательность. Первый оператор – операторsd withdrawalbank: ATMuser: Persontoop(1,3)[invalid password]enter (password)valid = verify (password))opt[valid password]parenter (account)enter (amount)deliver (cash)Рис. 19.3.
Операторы структурированного управления270Диаграммы взаимодействияцикла. Цифры в скобках (1, 3) означают минимальное и максимальное количество выполнений тела цикла. Поскольку минимальноечисло – единица, это тело выполнится как минимум один раз, прежде чем будет проверено защитное условие. В цикле пользовательвводит пароль, и система проверяет его. Цикл прерывается послетрех попыток, хотя может завершиться и раньше в случае ввода неправильного пароля.Следующий оператор необязательный.
Его тело выполняется,если введен правильный пароль; в противном случае остаток диаграммы последовательности пропускается. Тело необязательногооператора содержит в себе параллельный оператор. Операторы могут быть вложены, как показано на рис. 19.3.Параллельный оператор имеет две подобласти: одна разрешаетпользователю ввести номер счета, а другая – сумму. Поскольку онипараллельны, для этих двух элементов не предусматривается определенный порядок ввода. Это говорит о том, что параллельностьне всегда означает одновременное выполнение. На самом деле этоговорит о том, что два действия не скоординированы и могут совершаться в любом порядке.
Если они действительно независимы,то могут перекрывать друг друга; если же последовательны, то одноначинается по завершении другого в произвольной очередности.После того как оба действия выполнены, параллельный оператор завершен. Далее внутри необязательного оператора банк выдает наличные пользователю. Этим исчерпывается роль диаграммыпоследовательности.Вложенные диаграммы деятельностиСлишком большие диаграммы деятельности порой сложныдля понимания. Поэтому их структурированные разделы могутбыть организованы в виде подчиненных деятельностей – особенно в случаях, когда таковые выполняются не один раз в пределахглавной. При этом главная и подчиненные деятельности изображаются на отдельных диаграммах. Внутри главной диаграммыдеятельности подчиненная деятельность представлена в виде прямоугольника с тегом ref в левом верхнем углу.
Имя подчиненногоповедения указывается в центре рамки. Подчиненное поведениене ограничивается диаграммой деятельности; оно также можетбыть автоматом, диаграммой последовательности или другой поведенческой спецификацией. На рис. 19.4 показана диаграммас рис. 19.3, перерисованная таким образом, что две секции перемещены в отдельные диаграммы деятельности, а на главной указаныссылки на них.Базовые понятия271sd withdrawalbank: ATMuser: Personrefget passwordopt[valid password]refget cashРис.
19.4. Вложенная диаграмма деятельностиДиаграммы коммуникацииДиаграммы коммуникации описывают организацию объектов,участвующих во взаимодействии. Как показывает рис. 19.5, диаграмма коммуникации формируется начиная с размещения объектов, участвующих во взаимодействии, в вершинах графов. Далеев виде дуг графа изображаются ссылки, которые соединяют этиобъекты. Связям могут быть присвоены имена ролей, идентифицирующие их. И наконец, связи дополняются сообщениями, которыми обмениваются объекты.
Все это дает читателю четкое визуальное представление потока управления в контексте структурнойорганизации взаимодействующих объектов.На заметку. В отличие от диаграммы последовательности,на диаграмме коммуникации не продемонстрированы явнолинии жизни объектов, хотя можно показать сообщения createи destroy. К тому же явно не отображается фокус управления,хотя последовательный номер каждого сообщения можетуказывать уровень вложенности.Диаграммы взаимодействия2721 : create()ограничение пути2 : setActions(a, d, o)3 : destroy()ссылкаt {local}proxy {global}p1 : ODBDProxyпорядковыйномерРис. 19.5. Диаграмма коммуникацииМожноиспользоватьрасширенную формупорядковыхномеров,чтобывыделитьпараллельные потокиуправления(см.главу 23).Стереотипыпутей обсуждаютсяв главе 18;сложноеветвлениеи итерациипроще специфицироватьна диаграммах деятельности,которыерассматриваютсяв главе 20.Диаграммы коммуникации обладают двумя признаками, которые отличают их от диаграмм последовательности.
ВоFпервых,здесь отмечен путь (path), который отображается соответственноассоциации. Впрочем, можно также показать его в соответствиис локальными переменными, параметрами, глобальными переменными и обращениями к самому себе. Путь представляет источникинформации для объекта.ВоFвторых, здесь имеется порядковый номер. Чтобы указатьпорядок сообщения во времени, вы предваряете его номером начиная с 1 и далее – в арифметической прогрессии для каждого нового сообщения в потоке управления (2, 3, ...).
Чтобы показать вложенность, применяется десятичная система классификации Дьюи(1 – первое сообщение, которое содержит в себе сообщения 1.1, 1.2и т.д.). Количество уровней вложения не ограничивается. Крометого, следует отметить, что на линии одной и той же ссылки можнопоказать множество сообщений (возможно, пересылаемых в разных направлениях), и каждое будет иметь уникальный порядковыйномер.Большую часть времени вам придется моделировать прямыепоследовательные потоки управления. Но существует и возможность моделирования более сложных потоков, включающих в себяитерации и ветвление.
Итерация (iteration) представляет собойповторяющуюся последовательность сообщений. Чтобы смоделировать ее, надо снабдить порядковый номер выражением итерациив формате *[i := 1..n] (или просто *, если нужно показать наличиеитерации, не вдаваясь в детали). Итерация говорит о том, что сообщение и все его вложения должны повториться в соответствиис заданным выражением. Аналогичным образом условие представляет сообщение, исполнение которого участвует в вычисленииБазовые понятия273булева выражения. Чтобы смоделировать условие, порядковыйномер предваряют условным выражением, таким как, например,[x > 0].
Альтернативный путь ветвления (branching) имеет тот жепорядковый номер, но каждый путь должен уникально отделятьсянеперекрывающимися условиями.Как для итераций, так и для ветвления UML не регламентирует формат выражения внутри скобок; вы можете использовать псевдокод либо синтаксис определенного языка программирования.На заметку.