Цикл в диаграмме активности UML с использованием области

Вопрос:

Я моделирую цикл в диаграмме активности UML. Он хорошо работает с узлами простого состояния (диаграмма 1), но я ищу более выразительный способ подчеркнуть семантический цикл цикла.
Поэтому я пришел в “регионы” или “прерываемые регионы”, которые показаны здесь и там, но я не смог найти много действительно удовлетворяющих примеров.

Мой пример – это функция, которая обрабатывает сообщения определенного списка. Цикл прерывается, как только будет найдено первое правильное сообщение, тогда сообщение обрабатывается, и функция возвращает true. В противном случае он возвращает false (пожалуйста, никаких комментариев о смысле или глупости, это только для образца).

Диаграмма 1: использует старую условную условную схему node. По правде говоря, легче контролировать поток управления по стрелкам, но нет “ЛОП”, есть только “если”.

Диаграмма 2:

  • (положительное) условие выхода корректно, используя прерывистый край? Правда, он может быть частью секции [test] цикла вместе с итератором.
  • BTW: как итерационный символ для петли, наилучшим образом выраженный в UML?
  • Правильно ли выполняется действие final node внутри тела цикла (т.е. когда условное “сообщение действительное?” дает “нет” )? Как-то неправильно использовать конечный node здесь, но как еще я могу выразить поток управления одним циклом?

Функциональность обеих диаграмм должна быть эквивалентной:

loop with conditional node

loop with region


Изменить: еще одна диаграмма, которая реализует предложения от Steph:

  • Начальный и конечный node внутри тела цикла
  • “дальнейшая обработка” теперь находится внутри тела цикла. Ну… ОК здесь, но могут быть и другие циклы, где я бы предпочел бы это снаружи. Тогда я мог бы изменить дизайн в любом случае…
  • “Следующее сообщение” также можно рассматривать как сам объект итератора вместо действия “(предоставить) следующее сообщение” из исходной диаграммы.
  • Две стрелки потока объектов могут быть немного переполнены, но я думаю, что они верны.

enter image description here

Лучший ответ:

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

И есть также окончательный поток node, который представляет собой выход, а не завершение. Таким образом, вы можете использовать его для представления оператора “break” вместо используемого прерывания. В этом случае вам необходимо интегрировать “дальнейшую обработку сообщений node” в ветке “да”, как раз перед окончанием потока node.

Прерывающий край скорее для прерываний, поступающих извне текущей обработки. Область прерывается, и некоторые события (обычно отмеченные узлами приема) могут полностью прервать ее независимо от прогресса в содержании региона. Здесь это не так.

Что касается итерирующего персонажа, то, к сожалению, нет ничего очень визуального. Я обычно использую объект node поверх области, рядом с начальным node.

Оцените статью
TechArks.Ru
Добавить комментарий