На этом шаге рассмотрим прямое и обратное проектирование диаграмм деятельности в UML.
Прямое проектирование (создание кода из модели) возможно для диаграммы деятельности, особенно если ее контекстом является операция. Например, используя диаграмму, представленную на рис. 1 из шага 166, инструментальное средство может сгенерировать следующий код операции intersection на C++:
Point Line::intersection (Line : line) { if (slope == line.slope) return Point(0,0); int x = (line.delta – delta) / (slope – line.slope); int y = (slope * x) + delta; return Point(x, y); }
Здесь применена некоторая хитрость, связанная с инициализацией локальных переменных. Менее "интеллектуальный" инструмент, вероятно, сначала объявил бы переменные, а потом присвоил им значения.
Обратное проектирование (создание модели из кода) также возможно для диаграмм деятельности, особенно если контекст кода – тело операции. Диаграмма, которую мы только что упоминали, могла быть сгенерирована на основе реализации класса Line.
Более интересной по сравнению с обратным проектированием модели из кода может оказаться анимация модели по работающей системе. Скажем, имея в распоряжении все ту же диаграмму (рис. 1 шаг 166), инструмент мог бы анимировать состояния действий на ней по мере их выполнения в работающей системе. Еще лучше было бы с этим инструментом, находящимся под управлением отладчика, контролировать скорость выполнения, возможно, устанавливая точки прерывания для приостановки процесса в нужные моменты, с тем чтобы проверить значение атрибутов конкретных объектов.
Когда вы создаете диаграммы деятельности в UML, помните, что это лишь проекции одной и той же модели динамических аспектов системы. Ни одна отдельная диаграмма деятельности не может охватить все эти аспекты в совокупности. Поэтому для моделирования динамических аспектов потока работ или операции понадобится использовать множество диаграмм.
Хорошо структурированная диаграмма деятельности должна обладать следующими свойствами:
Когда создается диаграмма деятельности, необходимо:
На следующем шаге рассмотрим понятие события в UML.