Шаг 133.
Унифицированный язык моделирования UML.
Последовательности

    На этом шаге рассмотрим формирование последовательности сообщений между взаимодействующими объектами в UML.

    Когда один объект передает сообщение другому (делегируя ему некоторое действие), то принимающий объект может, в свою очередь, послать сообщение еще одному объекту, а тот – следующему, и т.д. Этот поток сообщений формирует последовательность (sequencing). Всякая последовательность должна иметь начало; ее запуск выполняется определенным процессом или потоком. Более того, последовательность продолжается до тех пор, пока существует владеющий ею процесс или поток. Системы "нон-стоп" (работающие без остановки),которые, в частности, встречаются в приложениях управления реального времени, продолжают работать до тех пор, пока работает узел, на котором они запущены.

    Каждый процесс и поток в системе определяет отдельный поток управления, в каждом из которых сообщения упорядочены во времени. Чтобы лучше визуализировать последовательность сообщений, вы можете явно смоделировать их порядок относительно начала последовательности, снабдив сообщение префиксом, указывающим его номер с двоеточием в качестве разделителя.

    Диаграмма коммуникации отражает поток сообщений между ролями в пределах кооперации. Поток сообщений передается через соединения, существующие в кооперациях, как показано на рис. 1.


Рис.1. Процедурная последовательность

    Чаще всего вы можете специфицировать процедурный или вложенный поток управления, изобразив его в виде сплошной закрашенной стрелки, как на рис. 1. В этом случае сообщение findAt (найтиВ) специфицируется как первое сообщение, вложенное во второе в последовательности (2.1).

    Реже, но все-таки приходится специфицировать плоский поток управления (он представлен в виде заостренной стрелки), чтобы смоделировать последовательность управления шаг за шагом (см. рис. 2). В этом случае сообщение assertCall (принятьЗвонок) указывается как второе в последовательности.


Рис.2. Плоская последовательность

    Разница между асинхронными и процедурными последовательностями важна в современном мире параллельных вычислений. Чтобы показать общее поведение системы параллельных объектов, используйте асинхронную передачу сообщений. Это самый общий случай. Когда вызывающий объект в состоянии выполнить запрос и дождаться ответа, вы можете использовать процедурный поток управления. Процедурный поток знаком вам из традиционных языков программирования, но надо иметь в виду, что серия вложенных вызовов процедур приводит к появлению стека блокированных объектов, которые временно не в состоянии ничего делать – а это не очень удобно, если речь идет о серверах или разделяемых ресурсах.

    При моделировании взаимодействий, которые включают множество потоков управления, особенно важно идентифицировать процесс или поток, который отправил конкретное сообщение. В UML можно отличить один поток управления от другого, снабдив последовательный номер сообщения префиксом, в качестве которого выступает имя процесса или потока, стоящего в начале последовательности. Например, выражение D5 : ejectHatch(3) указывает, что операция ejectHatch (открытьЗатвор) отправляется с действительным аргументом 3 как пятое сообщение последовательности, запущенной в процессе или потоке с именем D.

    Вы можете показать не только действительные аргументы, переданные операции или сигналу в контексте взаимодействия, но и возвращаемые значения функции. Как явствует из нижеследующего выражения, значение p, возвращаемое из операции find, отправляется с действительным параметром "Rachelle". Это вложенная по следовательность: операция выполняется в результате второго сообщения, вложенного в третье, которое, в свою очередь, вложено в первое сообщение последовательности. На той же диаграмме p можно использовать в качестве действительного параметра других сообщений.

1.3.2 : p := find("Rachelle")

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

    На следующем шаге рассмотрим некоторые варианты обозначений объектов, участвующими во взаимодействии.




Предыдущий шаг Содержание Следующий шаг