Форум Сообщества Аналитиков

×


КАк правильно нарисовать цикл в Activity? на UML 2.0(Прочитано 27543 раз)
Привет, Everyone!

Пусть имеется следующая задача: в магазине выбираем товар на 1000 руб. взяли один товар, другой, третий и т.д. каждый раз проверяем нам нужно подобрать так товар чтобы его сумма ровнялась именно на 1000 руб. Проблема в том что не могу найти четкого решения как отобразить цикл в Activity. В каждой книге по разному, а во многих про цикл не написано вообще! Всем ответившим, спасибо!



Что значит цикл в activity? Если имеется в виду диаграмма деятельности (activity diagram), то это обычная блок-схема, все элементы для организации цикла там есть.



это отображение цикла верно?



В принципе да, правильно.
«Сделай первый шаг, и ты поймешь, что не все так страшно.»
-- L. A. Seneca --



а мне сказали что каждое действие может иметь только один вход



В UML2 (в отличие от UML) есть специальный модельный элемент объединения (merge). Если маркер приходит на узел объединения по одному из входов, он немедленно копируется на выход.

Присоединять два входа к действию можно. Но действие не начинается, пока маркеры не поступили на все входы (например, при параллельных вычислениях), т.е. это похоже на join.

В UML1 поведение действия со множеством входов не описано. UML2 разрабатывался под MDA (преобразование в код требует формализма)!

Т.о., цикл, когда возврат идет непосредственно в действие, выполняться не будет, т.к. маркер никогда не выйдет из действия.

Merge обозначается ромбиком, как "разветвление", но инструменты, поддерживающие MDA. имеют отдельный элемент.

Если инструмент не поддерживает MDA, но хочется соблюсти правила UML2, рисуют decision на месте merge.

Ну, а можно рисовать вообще в стиле UML1 (картинка на Вас не обидится).

P.S.
Мне непонятны actors, соединенные с действиями пунктирными линиями с треугольными стрелками ("реализация"). В UML такого нет!
Л. Новиков
http://lnew.ucoz.ru
lnew@yandex.ru



Всем Большое спасибо за ответы! разобрался с помощью merge. Этими actors пользуюсь по просьбе заказчика... ну как без из пожелания обойтись?!  ;D



Но можно же это сделать правильно!
Создайте "дорожки" для actors и для "системы".
Поместите в них соответствующие действия.
Л. Новиков
http://lnew.ucoz.ru
lnew@yandex.ru



А как правильно детализировать активность? На отдельной диаграмме или внутри активности?
На первой диаграмме детализация активности "Инициализация модуля MSSP в микроконтроллере" находится в sub-diagram, а на второй она находится внутри активности.

PS интересно как показывать на диаграмме активности условную компиляцию
#if   (ID_DEVICE_TYPE==4)
handler_rf(INIT);
#else
handler_mifare(INIT);
#endif
« Последнее редактирование: 20 Июня 2011, 18:04:56 от RuZzz »



Любая диаграмма должна быть простой и понятной.

Если Вы решили часть деятельности выделить в поддиаграмму, ее обычно рисуют отдельно. Для этого вместо обычного действия (opaque action) на основную диаграмму устанавливают элемент структурного действия (например call bechavior action), который представляет поддеятельность.

Далее варианты:
- соответствующая "поддеятельность" с собственной диаграммой создается "под" основной деятельностью (если это просто детализация сложного процесса)
- в качестве детализации основной диаграммы используется деятельность абстрактного UC (расширения или включения).

В зависимости от инструмента. Например, в RSA на нужное место основной диаграммы перетаскивается мышкой нужная деятельность. На диаграмме создается call bechavior action. Двойной щелчок по значку открывает детализирующую диаграмму.

Рисование в виде поддиаграммы, показанной на основной диаграмме (как на рисунке) вообще не имеет смысла.

Условная компиляция показывается как любое другое условное поведение с использованием decision. 
Л. Новиков
http://lnew.ucoz.ru
lnew@yandex.ru



Рисование в виде поддиаграммы, показанной на основной диаграмме (как на рисунке) вообще не имеет смысла.

Я пришёл к такой диаграмме, взглянув на диаграмму по ссылке
http://www.vp-trainingcenter.com/summary/usingactivitydiagram.html

То есть вы этом случае рисуется активность, внутри которой рисуется детализация, но сама она ни куда не подключена, так?

В VP не нашёл элемент call bechavior action, из Action ни как не сделать поддиаграмму активности, а из активности можно сделать поддиаграмму активности.



UML один, а инструменты разные.

Как я делаю:
- диаграммы деятельности рисую как альтернативу "ручному" текстовому описанию UC или BUC (например, по Коберну). Соответственно, под каждым UC или BUC (в том числе абстрактными: IUC и EUC) создаю activity, под которой - диаграмму деятельности. (я написал шаблончик отчета, который генерит красивое текстовое описание процесса по диаграмме).
- RSA, в котором я работаю, позволяет перетаскивать любую activity на поле диаграммы деятельности как "детализированное" действие (в RSA - call bechavior; думаю, в других инструментах должно быть что-то подобное, если они поддерживают стандарт преобразования форматов UML2).
- если описывается сложный UC, не использующий IUC и/или EUC, некоторые действия которого нужно (полезно) детализировать, я создаю новую activity в пространстве основной activity и перетаскиваю ее на поле основной диаграммы.
- если основной UC использует абстрактные UC (это показывается на диаграмме UC), то я также перетаскиваю их activity на поле основной диаграммы в нужное место.

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

Думаю, в вашем инструменте можно делать что-то похожее. Нужно только поискать.

Если этот вопрос Вас интересует, и Вы в Москве, то сообщаю, что с 27 июня по 1-е июля я буду в Москве в УКЦ компании Интерфейс (ул. Бардина) читать курс. Вы можете приехать, и я покажу все эти приемы "вживую". Думаю, много времени это не займет.   
Л. Новиков
http://lnew.ucoz.ru
lnew@yandex.ru



К сожалению я нахожусь в Петербурге. У нас подобные мероприятия либо не проходят, либо я о них не знаю.

Но вы же будете показывать примеры на RSA, а RSA это коммерческий продукт, который не поддерживает генерацию PHP кода. Или можно это обойти?
« Последнее редактирование: 21 Июня 2011, 12:19:30 от RuZzz »



Я тоже живу в Питере.

Генерацию php базовый RSA не поддерживает. Плагины 3-их лиц мне неизвестны, хотя могут быть.
Л. Новиков
http://lnew.ucoz.ru
lnew@yandex.ru



К сожалению я нахожусь в Петербурге. У нас подобные мероприятия либо не проходят, либо я о них не знаю.

Но вы же будете показывать примеры на RSA, а RSA это коммерческий продукт, который не поддерживает генерацию PHP кода. Или можно это обойти?
В Вашем городе живут такие светлые головы Лев Новиков, Денис Иванов. Последний постоянно делает тренингив Career Lab, имеет сайты uml3.ru и т.п. Так что Москве только завидовать




 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19