2. Язык UML. Руководство пользователя. Буч_ Рамбо_ Якобсон (2-е издание) (2006) (1185732), страница 45
Текст из файла (страница 45)
асинхронно. После отправки сигнала объект, который его отправил,продолжает свою деятельность.Базовые понятия231ПоследовательностиПроцессыи потокиобсуждаютсяв главе 23.Системыобсуждаютсяв главе 32.Когда один объект передает сообщение другому (по сути, делегируя ему некоторое действие), то принимающий объект может,в свою очередь, послать сообщение еще одному объекту, а тот – следующему, и т.д.
Этот поток сообщений формирует последовательность (sequencing). Всякая последовательность должна иметь начало; ее запуск выполняется определенным процессом или потоком.Более того, последовательность продолжается до тех пор, пока существует владеющий ею процесс или поток. Системы «нонFстоп»(работающие без остановки),которые, в частности, встречаютсяв приложениях управления реального времени, продолжают работать до тех пор, пока работает узел, на котором они запущены.Каждый процесс и поток в системе определяет отдельный поток управления, в каждом из которых сообщения упорядочены вовремени.
Чтобы лучше визуализировать последовательность сообщений, вы можете явно смоделировать их порядок относительноначала последовательности, снабдив сообщение префиксом, указывающим его номер с двоеточием в качестве разделителя.Диаграмма коммуникации отражает поток сообщений междуролями в пределах кооперации.
Поток сообщений передается черезсоединения, существующие в кооперациях, как показано на рис. 16.4.Чаще всего вы можете специфицировать процедурный или вложенный поток управления, изобразив его в виде сплошной закрашенной стрелки, как на рис. 16.4. В этом случае сообщение findAt(найтиВ) специфицируется как первое сообщение, вложенное во второе в последовательности (2.1).На заметку. Вы также можете определить операцию по классуили интерфейсу, в котором она объявлена. Например, вызовоперации register (зарегистрировать) на экземпляре Student(Студент) может полиморфно вызвать любую операцию с этимименем в иерархии классов Student; вызов Imember::register (Iучастник::зарегистрировать) вызывает операцию, специфицированную в интерфейсе Imember и реализованную неким соответствующим классом, также находящимся в иерархии Student.последовательный номеррольконнекторПолучая сообщение сигнала, целевой объект независимо принимает решение о том, что с ним нужно делать.
Обычно сигналыинициируют переход автомата целевого объекта в другое состояние.Инициализация такого перехода заставляет целевой объект выполнить некие действия и изменить свое состояние. В системах с асинхронной передачей событий взаимодействующие объекты исполняются параллельно и независимо. Они разделяют информациютолько посредством передачи сообщений, поэтому не возникаетопасности конфликта за разделяемую память.Рис. 16.4.
Процедурная последовательностьРеже, но всеFтаки приходится специфицировать плоский поток управления (он представлен в виде заостренной стрелки), чтобы смоделировать последовательность управления шаг за шагом(см. рис. 16.5). В этом случае сообщение assertCall (принятьЗвонок)указывается как второе в последовательности.Взаимодействия232плоский потокуправленияРис. 16.5. Плоская последовательностьНа заметку. Разница между асинхронными и процедурнымипоследовательностями важна в современном мире параллельных вычислений. Чтобы показать общее поведение системыпараллельных объектов, используйте асинхронную передачусообщений. Это самый общий случай.
Когда вызывающийобъект в состоянии выполнить запрос и дождаться ответа,вы можете использовать процедурный поток управления.Процедурный поток знаком вам из традиционных языков программирования, но надо иметь в виду, что серия вложенныхвызовов процедур приводит к появлению стека блокированных объектов, которые временно не в состоянии ничегоделать – а это не очень удобно, если речь идет о серверахили разделяемых ресурсах.Процессыи потокиобсуждаютсяв главе 23.Вы можетеспецифицироватьасинхронныйпотокуправления,изображаемый в видестрелочкис одной«веточкой»см.
ту жеглаву).При моделировании взаимодействий, которые включают множество потоков управления, особенно важно идентифицировать процесс или поток, который отправил конкретное сообщение. В UMLможно отличить один поток управления от другого, снабдив последовательный номер сообщения префиксом, в качестве котороговыступает имя процесса или потока, стоящего в начале последовательности. Например, выражениеD5 : ejectHatch(3)указывает, что операция ejectHatch (открытьЗатвор) отправляетсяс действительным аргументом 3 как пятое сообщение последовательности, запущенной в процессе или потоке с именем D.Вы можете показать не только действительные аргументы, переданные операции или сигналу в контексте взаимодействия, но и возвращаемые значения функции.
Как явствует из нижеследующего выражения,значение p, возвращаемое из операции find, отправляется с действительным параметром “Rachelle”. Это вложенная последовательность:операция выполняется в результате второго сообщения, вложенного в третье, которое, в свою очередь, вложено в первое сообщениеБазовые понятияИтерации,ветвлениеи защищенныесообщенияобсуждаются в главе 19,отметкивремени –в главе 24,стереотипыи ограничения – в главе 6.233последовательности. На той же диаграмме p можно использовать в качестве действительного параметра других сообщений.1.3.2 : p := find(“Rachelle”)На заметку.
В UML вы можете моделировать и более сложныеформы последовательностей, такие как итерации, ветвление,защищенные сообщения. Вдобавок для моделирования временных ограничений (например, в системах реального времени), с последовательностью можно ассоциировать отметкивремени. Другие, более экзотические формы сообщений,в частности отказы и таймQауты, можно смоделировать, определив соответствующие стереотипы сообщений.Создание, модификация и уничтожениеЛинии жизни обсуждаютсяв главе 19.Моделируемые вами объекты, участвующие во взаимодействиях,как правило, существуют в течение всего времени взаимодействия.Однако в некоторых взаимодействиях объекты могут создаваться(по сообщению create) и уничтожаться (по сообщению destroy). То жесамое касается и ссылок: связи между объектами могут возникатьи исчезать.
Чтобы указать, что объект или ссылка появляется и/илиисчезает в процессе взаимодействия, вы можете присоединить примечание к его/ее роли в диаграмме коммуникации.При взаимодействии объект обычно изменяет значения своихатрибутов, свое состояние или свои роли. Вы можете представитьмодификации объекта на диаграмме последовательности, указавсостояние или значения на линии жизни.Внутри диаграммы последовательности время жизни, созданиеи уничтожение объектов или ролей явно изображаются в виде вертикальных участков их линий жизни.
На диаграмме коммуникации создание и уничтожение должны обозначаться примечаниями.Используйте диаграммы последовательности, когда важно показатьвремя жизни объектов.ПредставлениеКогда вы моделируете взаимодействие, то обычно включаетев него как роли (каждая из которых представляет объекты, появляющиеся в экземпляре взаимодействия), так и сообщения (каждоеиз которых представляет коммуникацию между объектами вместес некоторым результирующим действием).Вы можете визуализировать эти роли и сообщения двумя способами: указывая временной порядок сообщений либо структурную организацию ролей, которые отправляют и принимают сообщения. В UML234Диаграммывзаимодействия обсуждаютсяв главе 19.Взаимодействияпервый тип представления называется диаграммой последовательности, а второй – диаграммой коммуникации.
И то и другое представляетсобой разновидность диаграмм взаимодействия. Помимо этого UMLпредусматривает и более специализированную разновидность диаграмм взаимодействия, называемую временной диаграммой, котораяпоказывает конкретное время передачи сообщений между ролями.Мы не рассматриваем данный тип диаграмм в настоящей книге.
Болееподробную информацию можно найти в книге «UML» (ее выходныеданные вы найдете во введении, в разделе «Цели»).Диаграммы последовательности и коммуникации похожи в томсмысле, что вы можете взять одну из них и преобразовать в другую,хотя часто они передают разную информацию, и тогда не слишкомцелесообразно переключаться между ними. Есть и некоторые визуальные отличия. Диаграммы последовательности позволяют ваммоделировать линию жизни объекта, которая описывает его существование в определенный период времени (возможно, включая создание и уничтожение объекта). Диаграммы коммуникации, в своюочередь, позволяют моделировать структурные ссылки, возникающие между объектами при их взаимодействии.Типичные приемы моделированияВы можетемоделировать динамическиеаспектысистемы,используяавтоматы(см.
главу22).Диаграммыпоследовательностиобсуждаются в главе 19.Типичные приемы моделирования235 Если модель описывает структурную организацию объектов, идентифицировать соединяющие их ссылки, которыеважны для осуществления коммуникаций при взаимодействии. Специфицировать природу этих ссылок, при необходимости используя стандартные стереотипы и ограничения UML. В соответствии с временной последовательностью указатьсообщения, передаваемые от объекта к объекту. При необходимости выделить разные виды сообщений; описать параметры и возвращаемые значения, чтобы в должной мередетализировать описание взаимодействия. Для более подробного изложения материала снабдить каждый объект, представленный в каждый момент времени, информацией о его состоянии и роли.В примере на рис.
16.6 показан набор ролей, взаимодействующихв контексте механизма публикации и подписки (экземпляр образца проектирования observer – «обозреватель»). Здесь представленытри роли: p (StockQuotePublisher – ИздательТаблицКотировокАкций),s1 и s2 (два экземпляра StockQuoteSubscriber – ПодписчикТаблицКотировокАкций). Это наглядный пример диаграммы последовательности, которая показывает временной порядок сообщений.Моделирование потока управленияВариантыиспользования обсуждаютсяв главе 17,образцыи каркасы –в главе 29,классы и операции – в главах 4 и 9,взаимодействия и интерфейсы –в главе 11,компоненты – в главе 15, узлы –в главе 27.Чаще всего взаимодействия используются для моделированияпотока управления, характеризующего поведение системы в целом(включая варианты использования, образцы, механизмы и каркасы), или же поведения класса либо отдельной операции.