DRAKON.SU https://forum.drakon.su/ |
|
Предложение по силуэту для разработки конечных автоматов https://forum.drakon.su/viewtopic.php?f=142&t=4069 |
Страница 1 из 1 |
Автор: | MaximGB [ Вторник, 04 Сентябрь, 2012 01:02 ] |
Заголовок сообщения: | Предложение по силуэту для разработки конечных автоматов |
Здравствуйте, занимаясь разработкой "клиентских" приложений для всяких Web 2.0 часто приходится писать компоненты-контроллеры (С в шаблоне MVC), которые выполняют последовательные, но асинхронные действия, и во время ожидая завершения асинхронной операции дергать их за методы, изменяющие их состояние не желательно (можно конечно, но это сильно усложняет компонент). Хорошей абстракцией для таких контроллеров является детерминированный конечный автомат, и в Драконе, с помощью силуэта, хорошо изображать диаграмму переходов такого автомата, правда с асинхронностью проблемы, но если сразу принять что все события асинхронны, то жить можно. Одна проблема - если в автомате больше 5-7 состояний то его диаграмма превращается в этакую ленту (малая высота, большая ширина), с которой не удобно работать. Я проанализировал свои контроллеры и заметил что часто встречаются состояния, переход в которые происходит только из одного предшествующего состояния, по сути были бы переходы синхронными это было бы одно состояние. Такие состояния я называю "вспомогательными". Например, в браузере достаточно сложно, иногда невозможно, сделать настоящий модальный диалог (если мы хотим чтобы приложение было одинаково совместимо со всеми браузерами), и допустим у нас выполняется некий асинхронный XHR (XmlHttpRequest) запрос к серверу, во время запроса, наш вид (V в MVC) мирно показывает индикатор выполнения запроса, и вдруг сервер "отвалился" (у пользователя кратковременно пропала связь с сетью), в таком случае контроллер, у меня, показывает модальное сообщение: "дескать нет соединения с сервером, не желает ли пользователь запрос повторить?". Пользователь в свою очередь может либо нажать кнопку "Повторить", либо "Отменить" операцию. При успешном завершении или отмене операции вид переключается в изначальное состояние, показывает какую нибудь форму ввода данных вместо индикатора выполнения запроса. Здесь - ожидание выполнения запроса сервером, и показывание предупреждения пользователю - два разных состояния контроллера. Пример диаграммы для контроллера формы сброса пароля пользователя дан ниже. Вложение: Тут простым состоянием является (Prompting for retry). Запрос на сброс пароля достаточно простой, сервер может вернуть 3 класса ответов:
Мое предложение - изображать такие вспомогательные состояния в той же ветке силуэта что и состояние из которого совершается переход во вспомогательное так, как показано ниже, см. ветку (Requesting): Вложение: В таком случае диаграмма может принять вид более близкий к листу или области просмотра / редактирования редактора диаграмм.Если присмотреться, то в диаграммах выше есть ещё одно вспомогательное состояние - (Prompting for email), если также вынести его предложенным способом, то получается вот такая диаграмма: Вложение: Предложенным способом мы сохраняем асинхронную природу диаграммы и автомата, но прячем вспомогательные состояния на более низкий уровень, тем самым снижая уровень шума, привносимый ими в диаграмму, ну или просто более равномерно используем ограниченное горизонтальное и вертикальное пространство. Прошу высказываться Спасибо. |
Автор: | MaximGB [ Вторник, 04 Сентябрь, 2012 21:14 ] |
Заголовок сообщения: | Re: Предложение по силуэту для разработки КА |
Степан, спасибо за Ваш ответ Степан Митькин писал(а): Вы показали отличный пример изображения конечного автомата в ДРАКОНе. Спасибо Степан Митькин писал(а): Но есть небольшое замечание. Я категорически против помещения пары икон "Конец ветки" ("Адрес") и "Начало ветки" в середину ветки. Задача иконы "Конец ветки" -- показать, что это конец. Всё. Ниже ничего уже нет. Глаз прочно связывает форму иконы и её смысл. Это один из секретов удобства ДРАКОНа. Если поставить икону "Конец ветки" в середину, то читатель будет думать: "это конец или ещё нет?". Читатель будет напряжённо думать о схеме, а не об алгоритме. Возможно, но мне всё-таки кажется, что размещение сразу под иконкой "адрес" иконки "имя ветки" и соединение их линей такой же толщины что и основа силуета решает эту проблему. Степан Митькин писал(а): Кроме того, на вашей диаграмме нарушается важное правило ДРАКОНа о том, что внутрь ветки есть только один вход -- через её начало. Такое нарушение есть, например, во вспомогательной ветке "Prompting for retry". Да, тут согласен, но это легко исправляется, см. пример ниже. Вложение: Степан Митькин писал(а): Тем не менее, ваша идея о вспомогательных состояниях -- отличная вещь. Спасибо ещё раз. Степан Митькин писал(а): Предлагаю небольшое косметическое улучшение ваших диаграмм. Вместо пары "Конец"-"Начало" можно поставить икону-комментарий. Тогда и волки сыты (идея подсостояния наглядно выражена). И овцы целы (принципы ДРАКОНа не нарушаются). С вашем предложением не согласен. Во-первых, иконка комментария в Драконе мне не очень нравится, я предпочитаю использовать UML'ый вариант начертания, но это субъективно, во-вторых, да это способ обозначить вспомогательное состояние, но таким же образом, комментариями, можно обозначать вообще что угодно, также мы теряем аналогию с обозначением других "основных" состояний автомата. Могу предложить аналогичный способ - ввести дополнительную иконку, "короткое замыкание": Вложение: addressSc.png [ 6.48 КБ | Просмотров: 12833 ] так как контур этой иконки должен быть такой же толщины что и линия силуэта, то, визуально получается как-бы силуэт в силуэте, это сразу позволит выявить на диаграмме вспомогательные состояния, а также чётко обозначит такую иконку как короткозамкнутый силуэтный переход . Единственное что не очень хорошо, так это что вводится новая иконка, по мне так комбинация из иконок и соединительной линии предложенная в первом сообщении также достаточно неплоха. |
Автор: | Владислав Жаринов [ Среда, 05 Сентябрь, 2012 10:41 ] |
Заголовок сообщения: | Re: Предложение по силуэту для разработки КА |
В общем, тоже элементы "примитивизации" силуэта, если о форме?.. Содержательно - тут вроде как вопрос декомпозиции сложного автомата?.. |
Автор: | MaximGB [ Среда, 05 Сентябрь, 2012 15:03 ] |
Заголовок сообщения: | Re: Предложение по силуэту для разработки КА |
Здравствуйте, Владислав Жаринов писал(а): В общем, тоже элементы "примитивизации" силуэта, если о форме?.. Скорее перекомпоновкиВладислав Жаринов писал(а): Содержательно - тут вроде как вопрос декомпозиции сложного автомата?.. Да, для не примитивных КА "ленточные" силуэты получаются почти всегда, и сделать их (КА) примитивными либо не всегда понятно как, либо получаем "муку" из классов вместо "кирпичей" (строительных блоков). В общем, я пытаюсь найти баланс между количеством классов и размером диаграмм путём добавления вертикальных уровней в силуэт.
|
Автор: | Владислав Жаринов [ Среда, 05 Сентябрь, 2012 19:08 ] |
Заголовок сообщения: | Re: Предложение по силуэту для разработки КА |
Так нужно ли искать баланс между формой и содержанием?.. Или у Вас предполагается, что реализация каждой ветки - один класс?.. |
Автор: | MaximGB [ Среда, 05 Сентябрь, 2012 19:50 ] |
Заголовок сообщения: | Re: Предложение по силуэту для разработки КА |
Владислав Жаринов писал(а): Так нужно ли искать баланс между формой и содержанием?.. Или у Вас предполагается, что реализация каждой ветки - один класс?.. Нет у меня предполагается что одна диаграмма это один класс, проблема в том что при наличии, скажем 5-10 состояний, в каждое из которых может приходить 1-5 событий, диаграмма становится очень похожей на ленту, с которой очень неудобно работать в редакторе диаграмм, я пользуюсь yEd, но думаю что в специализированных Дракон-редакторах проблема будет такая же, до тех пор пока не будут решены соответствующие проблемы usability: удобная навигация, переход от общего вида к частному, фокусировка на ветке - ветках, в общем большинство из тех предложений для усовершенствования редакторов, что обсуждаются в разделе "Инструменты ДРАКОН-схем". |
Автор: | Владимир Паронджанов [ Четверг, 06 Сентябрь, 2012 08:44 ] |
Заголовок сообщения: | Re: Предложение по силуэту для разработки КА |
Уважаемый Максим, у меня два вопроса: 1. Я всегда считал (правда, я ни разу об этом не писал), что ленточный силуэт можно и нужно разделить на части (ленточки) и располагать ленточки друг под другом. Например, если удобно разделить силуэт на две ленточки, то на одном листе бумаги (на одном экране) можно разместить 2 ленточки друг под другом. Для этого я ввел в графический алфавит ДРАКОНа икону "соединитель" (кружок). Она описана в книгах 2010 и 2012 года. Преимущество в том, что площадь листа (экрана) используется более рационально. Как Вы к этому относитесь? 2. Если не трудно, покажите Вашу икону "комментарий". Как она выглядит? |
Автор: | Степан Митькин [ Четверг, 06 Сентябрь, 2012 11:09 ] |
Заголовок сообщения: | Re: Предложение по силуэту для разработки КА |
MaximGB писал(а): ...до тех пор пока не будут решены соответствующие проблемы usability: удобная навигация, переход от общего вида к частному, фокусировка на ветке - ветках DRAKON Editor уже может кое-что из этого: - Просмотр сразу всей диаграммы. Главное меню / View / See all. По этой команде вся диаграмма целиком показывается на экране. - Переход к началу диаграммы. Правая кнопка мыши / Home. - Быстрый выбор масштаба 100%. Правая кнопка мыши / Zoom 100%. Зум делается в ту точку, где пользователь щёлкнул правой кнопкой мыши. |
Автор: | MaximGB [ Четверг, 06 Сентябрь, 2012 14:37 ] |
Заголовок сообщения: | Re: Предложение по силуэту для разработки КА |
Уважаемый, Владимир Даниелович, спасибо за подсказку: Владимир Паронджанов писал(а): Уважаемый Максим, у меня два вопроса: 1. Я всегда считал (правда, я ни разу об этом не писал), что ленточный силуэт можно и нужно разделить на части (ленточки) и располагать ленточки друг под другом. Например, если удобно разделить силуэт на две ленточки, то на одном листе бумаги (на одном экране) можно разместить 2 ленточки друг под другом. Для этого я ввел в графический алфавит ДРАКОНа икону "соединитель" (кружок). Она описана в книгах 2010 и 2012 года. Преимущество в том, что площадь листа (экрана) используется более рационально. Как Вы к этому относитесь? Своё отношение я пока не сформировал, в данный момент я работаю над диаграммой КА которая как-раз получается ленточной, пока я её перекомпоновал мною предложенным способом, думаю я разрежу её так, как предлагаете Вы, и посмотрю что получится, результаты могу разместить в этой теме для сравнения и обсуждения. Владимир Паронджанов писал(а): 2. Если не трудно, покажите Вашу икону "комментарий". Как она выглядит? Икона "комментарий" в UML выглядит как прямоугольник с одним загнутым углом: Вложение: comment.png [ 1.4 КБ | Просмотров: 12727 ] |
Автор: | Alexey_Donskoy [ Четверг, 06 Сентябрь, 2012 23:19 ] |
Заголовок сообщения: | Re: Предложение по силуэту для разработки КА |
MaximGB писал(а): Икона "комментарий" в UML выглядит как прямоугольник с одним загнутым углом:... мне она кажется визуально более привлекательной чем та, что сейчас введена в Дракон. Совершенно согласен!
|
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |