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

×


EA (activity diagram) алгоритмы(Прочитано 6972 раз)
EA (activity diagram) алгоритмы : 01 Февраля 2019, 10:42:05
Суть проблемы:
В диаграммах деятельности были созданы алгоритмы срабатывания определенной логики. Логика подразумевает некие вычисления, которые прописаны  в окне effect в action. Поскольку алгоритмы могут быть очень большие возникает необходимость в большом количестве переменных. Есть мысль сделать библиотечные элементы, которые будут получать значения полученные в предыдущем блоке через action in/out pin, вроде EA это позволяет. Не могу разобраться, как это правильно сделать-передать результат вычислений между двумя блоками действия через action pin, используя связь object flow
 



Re: EA (activity diagram) алгоритмы Ответ #1 : 01 Февраля 2019, 23:52:55
Прикол Datastore в том, что он копит всё, что в него приходит (даже в разные запуски Вашей activity) и всякий раз, когда на другом конце каждого исходящего потока готовы принять, он отдаёт [всё] накопленное (при этом отданное не удаляется, т. к. Datastore хозяйственный). Поэтому на исходящие потоки вешают select, и считают Datastore чем-то вроде БД.
Сами создатели EA считают синонимом переменной Central Buffer. Вообще говоря, это не по стандарту, т. к. сам стандарт разъясняет, что взять значение из этой "переменной" можно только по одному из исходящих потоков. Т. е. если из ЦБ кто-то что-то считал, то он это забрал и больше никто это не получит.
В стандарте завели специальные variable action для работы с переменными. Как я догадываюсь их нет в EA (и скорее всего нет нигде кроме IBM RSA). Но в EA я ни ухом, ни рылом, скорее всего ошибаюсь.
Выглядят variable action примерно так:

На картинке зашифровано y:= x / (x + 1).
Так вот. По идее в Activity добавляется variable X. Всякий раз, когда нужно её значение, используется read variable value action (см. внизу слева на картинке).
Можно видеть, как авторы стандарта сэкономили на read variable value action-ах, считав единожды и форкнув / размножив считанное значение.
Как обычно, ответ/совет вряд ли поясняет, а скорее усложняет. Таков доставшийся нам UML, увы.
 
[...и улетело НЛО.]



Re: EA (activity diagram) алгоритмы Ответ #2 : 03 Февраля 2019, 15:35:48
Если не рассматривать datastore.
Описание ActionPin с сайта Sparxsystems.
An Action Pin is used to define the data values passed out of and into an Action. An Input Pin provides values to the Action, whereas an Output Pin contains the results from that Action

Вот пример. В action1 я через поле effect произвожу сравнение значение некой переменной (sim.SP1) с уставкой. Если sim.SP1 больше уставки, то значение A равно 50, если меньше то А равно 60.
Дальше создаются два Пина (у Activity1 и Activity2) со связью Objectflow. Если я правильно понимаю описание, можно используя actionpin передавать только значение А, то есть 50 (или 60 в зависимости от выполнения условия). В Activity2, через ActionPin значение 50 (или 60) уже присваивается переменной B.
Моя проблема-не получается выполнить передачу значения переменной через связь между двумя ActionPin, которые принадлежат разным Активностям. При запуске Симуляции алгоритма, консоль выдает что переменная В не определена.



Re: EA (activity diagram) алгоритмы Ответ #3 : 03 Февраля 2019, 16:16:39
Создатели EA выложили доку.
В доке есть ряд примеров по Вашему вопросу (ctrl+Fятся по pin, object flow). Разумно попытаться воспроизвести примеры из доки и проверить, работают ли они. Если они работают, а Ваш пример не работает, то найти между ними различия и решить затруднение.
Например, для ветвления может оказаться нужен Conditional Node.
[...и улетело НЛО.]



Re: EA (activity diagram) алгоритмы Ответ #4 : 03 Февраля 2019, 16:20:58
Завтра еще раз попробую собрать примеры и точнее описать свою проблему со скринами.



Re: EA (activity diagram) алгоритмы Ответ #5 : 03 Февраля 2019, 19:18:53
Я могу лишь догадываться, что дело в коде, который используется в симуляции. Который Вы не приводите.
На форуме Sparx даётся совет для борьбы с подобной ошибкой, заключающийся в выписывании полного имени переменной.
Вероятно вместо A надо писать что-то вроде this.A или даже sim.Action1.A. Как и вместо любой иной "переменной" действия или деятельности.
Сам по себе разбор ситуации выглядит гаданием на кофейной гуще.
С т. з. UMLя Вам достаточно соединить пины с помощью object flow.
[...и улетело НЛО.]



Re: EA (activity diagram) алгоритмы Ответ #6 : 04 Февраля 2019, 10:17:10
Пример алгоритма, где не работает передача "значения" через связь objectflow между actionpin'ами. Прошу помочь с реализацией.



Re: EA (activity diagram) алгоритмы Ответ #7 : 04 Февраля 2019, 17:00:21
Если Вы передаёте через глобальные переменные, то их полные имена -- sim.C. Если Вы заводите пин в Action3 с именем C (не sim.C!), то в коде Вы присваиваете ему значение так: sim.Action3.C или так: this.C.
Шняга, которую я вижу на картинке: С у Вас -- массив из от 0 до 100 элементов. Этот массив инициализируется суммой двух целых чисел. Дальше идёт суммирование массива с целым числом. На месте EA я бы тоже обиделось.
Есть предложение. Напишите псевдокодом или как-то ещё без картинки, что Вы хотите смоделировать. На основании этого можно будет составить примерный вид диаграммы.
[...и улетело НЛО.]



Re: EA (activity diagram) алгоритмы Ответ #8 : 04 Февраля 2019, 20:23:01
А интересная у вас тут дискуссия. Я даже не подозревал, что у ЕА такие способности глубокие:)



Re: EA (activity diagram) алгоритмы Ответ #9 : 05 Февраля 2019, 16:08:11
Немножко конструктива в тему.
Ориентиром служили доки EA. Диаграмма нарисована в другой среде. За неимением EA убедиться в том, что она симулируется нормально, нет возможности.
[...и улетело НЛО.]



Re: EA (activity diagram) алгоритмы Ответ #10 : 06 Февраля 2019, 15:33:13
Немножко конструктива в тему.
Ориентиром служили доки EA. Диаграмма нарисована в другой среде. За неимением EA убедиться в том, что она симулируется нормально, нет возможности.

Надо?



Re: EA (activity diagram) алгоритмы Ответ #11 : 06 Февраля 2019, 15:48:35
Спасибо за правильное направление. Все работает, чуть синтаксис изменяется.Сейчас пытаюсь реализовать библиотечные модули.
« Последнее редактирование: 07 Февраля 2019, 12:23:01 от DIABLO »




 

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