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

Общий раздел => Примеры => Тема начата: dumper от 14 Февраля 2011, 11:13:02

Название: КАк правильно нарисовать цикл в Activity? на UML 2.0
Отправлено: dumper от 14 Февраля 2011, 11:13:02
Привет, Everyone!

Пусть имеется следующая задача: в магазине выбираем товар на 1000 руб. взяли один товар, другой, третий и т.д. каждый раз проверяем нам нужно подобрать так товар чтобы его сумма ровнялась именно на 1000 руб. Проблема в том что не могу найти четкого решения как отобразить цикл в Activity. В каждой книге по разному, а во многих про цикл не написано вообще! Всем ответившим, спасибо!
Название: Re: КАк правильно нарисовать цикл в Activity? на UML 2.0
Отправлено: Galogen от 14 Февраля 2011, 12:07:25
Что значит цикл в activity? Если имеется в виду диаграмма деятельности (activity diagram), то это обычная блок-схема, все элементы для организации цикла там есть.
Название: Re: КАк правильно нарисовать цикл в Activity? на UML 2.0
Отправлено: dumper от 14 Февраля 2011, 12:26:31
это отображение цикла верно?
Название: Re: КАк правильно нарисовать цикл в Activity? на UML 2.0
Отправлено: Thyestes от 14 Февраля 2011, 12:30:08
В принципе да, правильно.
Название: Re: КАк правильно нарисовать цикл в Activity? на UML 2.0
Отправлено: dumper от 14 Февраля 2011, 12:43:30
а мне сказали что каждое действие может иметь только один вход
Название: Re: КАк правильно нарисовать цикл в Activity? на UML 2.0
Отправлено: lnew от 14 Февраля 2011, 14:04:53
В UML2 (в отличие от UML) есть специальный модельный элемент объединения (merge). Если маркер приходит на узел объединения по одному из входов, он немедленно копируется на выход.

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

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

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

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

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

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

P.S.
Мне непонятны actors, соединенные с действиями пунктирными линиями с треугольными стрелками ("реализация"). В UML такого нет!
Название: Re: КАк правильно нарисовать цикл в Activity? на UML 2.0
Отправлено: dumper от 15 Февраля 2011, 10:16:44
Всем Большое спасибо за ответы! разобрался с помощью merge. Этими actors пользуюсь по просьбе заказчика... ну как без из пожелания обойтись?!  ;D
Название: Re: КАк правильно нарисовать цикл в Activity? на UML 2.0
Отправлено: lnew от 15 Февраля 2011, 11:07:59
Но можно же это сделать правильно!
Создайте "дорожки" для actors и для "системы".
Поместите в них соответствующие действия.
Название: Re: КАк правильно нарисовать цикл в Activity? на UML 2.0
Отправлено: RuZzz от 20 Июня 2011, 17:33:05
А как правильно детализировать активность? На отдельной диаграмме или внутри активности?
На первой диаграмме детализация активности "Инициализация модуля MSSP в микроконтроллере" находится в sub-diagram, а на второй она находится внутри активности.

PS интересно как показывать на диаграмме активности условную компиляцию
#if   (ID_DEVICE_TYPE==4)
handler_rf(INIT);
#else
handler_mifare(INIT);
#endif
Название: Re: КАк правильно нарисовать цикл в Activity? на UML 2.0
Отправлено: lnew от 20 Июня 2011, 19:26:45
Любая диаграмма должна быть простой и понятной.

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

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

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

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

Условная компиляция показывается как любое другое условное поведение с использованием decision. 
Название: Re: КАк правильно нарисовать цикл в Activity? на UML 2.0
Отправлено: RuZzz от 21 Июня 2011, 09:21:43
Рисование в виде поддиаграммы, показанной на основной диаграмме (как на рисунке) вообще не имеет смысла.

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

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

В VP не нашёл элемент call bechavior action, из Action ни как не сделать поддиаграмму активности, а из активности можно сделать поддиаграмму активности.
Название: Re: КАк правильно нарисовать цикл в Activity? на UML 2.0
Отправлено: lnew от 21 Июня 2011, 10:32:19
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-е июля я буду в Москве в УКЦ компании Интерфейс (ул. Бардина) читать курс. Вы можете приехать, и я покажу все эти приемы "вживую". Думаю, много времени это не займет.   
Название: Re: КАк правильно нарисовать цикл в Activity? на UML 2.0
Отправлено: RuZzz от 21 Июня 2011, 11:26:29
К сожалению я нахожусь в Петербурге. У нас подобные мероприятия либо не проходят, либо я о них не знаю.

Но вы же будете показывать примеры на RSA, а RSA это коммерческий продукт, который не поддерживает генерацию PHP кода. Или можно это обойти?
Название: Re: КАк правильно нарисовать цикл в Activity? на UML 2.0
Отправлено: lnew от 21 Июня 2011, 11:50:16
Я тоже живу в Питере.

Генерацию php базовый RSA не поддерживает. Плагины 3-их лиц мне неизвестны, хотя могут быть.
Название: Re: КАк правильно нарисовать цикл в Activity? на UML 2.0
Отправлено: Galogen от 21 Июня 2011, 16:33:03
К сожалению я нахожусь в Петербурге. У нас подобные мероприятия либо не проходят, либо я о них не знаю.

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