Здравствуйте, Кирилл. Приветствую Вас на этом форуме и надеюсь на продуктивное общение.
Я долго перерабатывал Ваши ответы, пришлось подумать. Давайте по порядку отвечу:
Кирилл Богатов писал(а):
1. «На основании чего сделано неожиданное разветвление перед блоками 02А и 02В? По смыслу задачи параллельного исполнения быть не может».
В чат-ботах и голосовых помощниках на одно и то же сообщение можно ответить несколькими способами, каждый из которых приведет к разному исходу. Например, на вопрос «Хотите перевести деньги себе или другому пользователю» можно выбрать один из этих вариантов или назвать имя получателя.
В этом случае можно было бы использовать икону «Выбор» с вопросом «Что ответил пользователь?», но это привело бы к созданию ряда одинаковых икон и визуальному усложнению схемы. Поэтому мы решили обойтись без них. Это также соответствует тому, как мы ведем разработку ботов, т.к. для реализации подобной логики не используются условные операторы.
Возможно, что имеет смысл создать какую-нибудь небольшую икону для таких случаев, чтобы отличать подобные ситуации от параллельного исполнения, но мы с такими случаями пока не сталкивались.
То есть такое разветвление реализует оператор ИЛИ. В таком случае вопросов нет. Тем более условные обозначения реплик и действий дают это понять. Можно кстати отметить, что вы идёте по обратному пути создания гибридного языка программирования - от реализации к проектированию. Это ни хорошо, ни плохо. Это по-другому и наверное правильно, если вы хотите приручить ДРАКОН под себя.
По поводу обозначения этого разветвления иконой сомневаюсь. Но дело в том, что такое разветвление можно встретить в конструкции Гибридный цикл в ДРАКОНе. Хотя, добросовестные чертёжники укажут в точке слияния стрелку влево от идущей слева линии, встречаются варианты, в которых этого нет. Я к тому, что точку разветвления можно обозначить каким-то
простым символом, незаурядным. Например, маленький ромбик ... оранжевый.
Кирилл Богатов писал(а):
2. «ДРАКОН специально позволяет избежать дублирования с помощью веток, а тут перед нами два одинаковых Конца. Лучше её вывести в отдельную ветку.»
Здесь я солгасен, это могло бы улучшить схему. Спасибо за замечание.
Отмечу лишь, что в нашей сфере может быть «конца»: завершение сценария (пользователь в диалоге и может вызвать другой сценарий) и выход из диалога (бот закрыл окно чата).
Здесь, думаю, всё равно какая ситуация вызывает завершение диалога. Последняя ветка с иконой Конец может быть и не такой короткой. Вы можете туда поместить все операции, характеризующие окончание диалога - прощальные слова чат-бота, информацию рекомендательного характера. С другой стороны, если мы пойдём по пути лаконичности, то Вы сами писали простую вещь, что если путь где-то обрывается, значит дальше сценария нет и бот прекращает общение. То есть вообще икону "Конец" можно не использовать. И таким образом мы избавимся не только от одной иконы, но и от ветки и путей, ведущих к этой ветке.
Или компромиссный вариант такой: допустим перед завершением чат-бот обязательно должен что-то сказать, сделать, вывести. Тогда список всех действий, после которых следует конец диалога, помещаем в "контекст" карточки событий "Завершение диалога", а соответствующие действия станут "реакцией" на неё.
Кирилл Богатов писал(а):
3. «Мне хотелось бы увидеть описание этой модификации и её отличия от оригинального ДРАКОНа в любых деталях.»
Основные отличия:
- Добавили икону «Карточка ситуации». Она находится за пределами схемы и нужна для описания реакций бота на ошибки и одношаговые действия, доступные из нескольких мест сценария.
- Используем цветовое выделение икон «Имя ветки» и «Адрес», чтобы упростить навигацию.
- Иногда позволяем себе поднимать некоторые иконы «Адрес», если связанные с ними ветки получаются слишком короткими. Сделали для удобства, т.к. во время работы часто приходится приближать схему и совершать лишние движения, чтобы добраться до её низа.
Значит, список отличий невелик и на отдельную публикацию, конечно, не наберётся. Хорошо, что Вы этим поделились здесь. Ещё мне кажется, особенность Ваших схем в уникальности абсолютно всех элементов. Всё равно в некоторых алгоритмах встречается повторяющаяся операция, которую ну никак не выделить в отдельную ветку или как-то ещё упростить. У Вас в схемах это достигается за счёт большого количество ветвей и за счёт использования карточек событий. И вот карточки событий, на которые я раньше большого внимания не обратил, наверное, являются самым любопытным элементом в концепции. Да, они экономят место в схеме и сами по себе компактно представлены, но ведь это текстовое представление алгоритма причём разной сложности. Я попробовал представить карточки ситуаций из Вашего доклада на Хабре в виде Дракон-схем. Последние две я вообще объединил в одну. В голубых прямоугольниках реплики бота, в серых - действия пользователя. Конечно, это вопрос удобства и привычки, но я вижу ситуационный подход к моделированию именно в атрибуте "контекст" карточек событий. Это по сути икона Вставка, которая явно в дракон-схеме не присутствует, чтобы не затруднять просмотр.
Вложение:
20230328231852.png [ 40.18 КБ | Просмотров: 442 ]
Вложение:
20230328232132.png [ 40.63 КБ | Просмотров: 442 ]
Вложение:
20230328232701.png [ 81.87 КБ | Просмотров: 442 ]
Кирилл Богатов писал(а):
Общий вид схемы можно посмотреть в Miro:
https://miro.com/app/board/uXjVOhk_fs0=/Возник вопрос по одной схеме. Поясните, пожалуйста, момент, изображённый на рисунке. Видимо, это случайная ошибка, и тут имелся ввиду переключатель.
Вложение:
вопрос.PNG [ 32.73 КБ | Просмотров: 442 ]
Но по итогу могу сказать, что мне было интересно порассуждать на эту тему, посмотреть как с ДРАКОНом обращаются сегодня и прямо параллельно со мной. Спасибо Вам, Кирилл за доклад и обратную связь на форуме.