diff --git a/lab1/report/.gitignore b/lab1/report/.gitignore index 38a3719..cbce687 100644 --- a/lab1/report/.gitignore +++ b/lab1/report/.gitignore @@ -2,4 +2,5 @@ !.gitignore !report.tex !img -!img/** \ No newline at end of file +!img/** +!*.dot \ No newline at end of file diff --git a/lab1/report/graph.dot b/lab1/report/graph.dot new file mode 100644 index 0000000..ed45167 --- /dev/null +++ b/lab1/report/graph.dot @@ -0,0 +1,69 @@ +digraph MushroomHikeApp { + rankdir=LR; + fontsize=10; + node [shape=rectangle, style=rounded, fontsize=10]; + + // --- Основные состояния участников похода (a–m) --- + a [label="a) Начальное состояние\n(главный экран)"]; + b [label="b) Планирование похода\n(маршрут, точки, погода, офлайн-карты)"]; + c [label="c) Управление участниками\n(приглашения, роли, доверенные контакты)"]; + d [label="d) Чек-лист снаряжения\n(шаблон, распределение, контроль сборов)"]; + e [label="e) Активная навигация\n(карта, GPS, режимы отображения)"]; + f [label="f) Фиксация находки\n(фото, координаты, заметки)"]; + g [label="g) Семейная корзина\n(все находки группы)"]; + h [label="h) Семейный чат\n(сообщения, фото, геолокация)"]; + i [label="i) Справочник грибов\n(виды, съедобность, двойники)"]; + k [label="k) Панель организатора\n(мониторинг, управление маршрутом)"]; + l [label="l) Архив походов\n(список завершённых походов)"]; + m [label="m) Детальный просмотр похода\n(трек, события, статистика)"]; + + + // --- SOS (красный, отдельный) --- + j [label="j) Экстренный режим (SOS)", color="red", fontcolor="red", style="rounded,bold", penwidth=2]; + + // --- Технические невидимые точки для "стрелок из ниоткуда" --- + fromAnywhereToA [shape=point, width=0, height=0, style=invis]; + fromAnywhereToSOS [shape=point, width=0, height=0, style=invis]; + + // Стрелки "из ниоткуда" + fromAnywhereToA -> a [label="25. Переход\nна главный экран", style=dashed]; + fromAnywhereToSOS -> j [label="24. SOS\n(из любого состояния)", style=dashed, color="red", fontcolor="red"]; + + // --- Переходы (кроме SOS и возврата на главный) --- + + a -> b [label="1. Создать поход"]; + + a -> e [label="2. Присоединиться (день похода)"]; + a -> d [label="3. Присоединиться (подготовка)"]; + + b -> c [label="4. Управление\nучастниками"]; + + c -> d [label="5. Чек-лист"]; + b -> d [label="6. Чек-лист"]; + + d -> e [label="7. Начать поход"]; + b -> e [label="8. Начать поход"]; + + e -> f [label="9. Фиксировать\nнаходку"]; + f -> e [label="10. Сохранить\nи вернуться"]; + + e -> g [label="11. Открыть корзину"]; + g -> e [label="12. Назад к\nнавигации"]; + + e -> h [label="13. Открыть чат"]; + h -> e [label="14. Назад к\nнавигации"]; + + f -> i [label="15. Открыть\nсправочник"]; + g -> i [label="16. Открыть\nсправочник"]; + i -> f [label="17. Назад\nк фиксации"]; + i -> g [label="18. Назад\nк корзине"]; + + e -> k [label="19. Панель\nорганизатора"]; + k -> e [label="20. Назад к\nнавигации"]; + + e -> l [label="21. Завершить\nпоход"]; + + a -> l [label="22. Открыть\nархив"]; + l -> m [label="23. Открыть\nпоход"]; + +} diff --git a/lab1/report/report.tex b/lab1/report/report.tex index 3c6f641..01d1f01 100644 --- a/lab1/report/report.tex +++ b/lab1/report/report.tex @@ -458,16 +458,113 @@ \end{itemize} \section{Описание структуры диалога и его обоснование} - Диалоговая модель основана на мастер-пошаговом подходе: сначала пользователь формирует маршрут, затем подтверждает состав группы и включает режим навигации. Такой порядок минимизирует когнитивную нагрузку и уменьшает вероятность пропуска ключевых шагов. Линейность важна для пожилых пользователей, поэтому избегаются глубокие вложенные меню и скрытые жесты. - \section{Описание структуры команд пользователей} - Основные команды расположены на нижней панели: \textit{Маршрут}, \textit{Группа}, \textit{Корзина}, \textit{SOS}. Дополнительные действия скрыты за контекстным меню карты. Команды формулируются глаголами действия ("Скачать карту", "Отметить точку", "Отправить сигнал"), что снижает неоднозначность и помогает пользователям с разным опытом. + Структура диалога приложения организована в виде графа состояний, отражающего полный цикл взаимодействия пользователя с системой: от первоначальной авторизации до завершения похода и анализа результатов. Граф учитывает различные роли пользователей (организатор, участник, дистанционный наблюдатель, доверенный волонтёр) и обеспечивает быстрый доступ к критически важным функциям безопасности из любого состояния. - \section{Физическая реализация команд пользователей} - Команды выполняются через крупные кнопки и свайпы. В режиме «Проводник» используются физические кнопки громкости как горячие клавиши: двойное нажатие --- отправка геометки, долгое удержание --- SOS. Такой подход учитывает перчатки, мокрые экраны и минимизирует вероятность промаха. + \textbf{Приложение может находиться в следующих состояниях:} + + \begin{itemize} + \item[a)] \textbf{Начальное состояние.} Главный экран с выбором основных действий: создание нового похода, присоединение к существующему по приглашению, просмотр архива прошлых походов. + + \item[b)] \textbf{Планирование похода.} Конструктор маршрута с размещением контрольных точек на карте, выбором даты и времени, просмотром прогноза погоды, загрузкой офлайн-карт региона. + + \item[c)] \textbf{Управление участниками.} Формирование группы похода: отправка приглашений членам семьи и друзьям, просмотр подтверждений участия, назначение ролей (организатор, участник), добавление доверенных контактов для экстренных ситуаций. + + \item[d)] \textbf{Чек-лист снаряжения.} Совместная подготовка к походу: выбор шаблона снаряжения, распределение ответственности за предметы между участниками, отслеживание выполнения сборов. + + \item[e)] \textbf{Режим активной навигации.} Основное состояние во время похода: отображение карты с местоположением всех участников, навигация к контрольным точкам, мониторинг расстояний и времени, контроль заряда батарей устройств. Доступны адаптивные режимы: полная карта, упрощённый "Проводник" для пожилых, компасный режим при слабом GPS. + + \item[f)] \textbf{Фиксация находки.} Фотографирование найденного гриба с автоматическим сохранением GPS-координат, времени и погодных условий. Возможность добавления текстовых или голосовых комментариев, выбора вида гриба из справочника. + + \item[g)] \textbf{Семейная корзина.} Просмотр всех зафиксированных находок группы в реальном времени с указанием авторов, местоположений на карте, фотографиями. Возможность добавления реакций, комментариев, экспертных оценок от опытных грибников. + + \item[h)] \textbf{Семейный чат.} Обмен текстовыми и голосовыми сообщениями между участниками похода, отправка фотографий, быстрые реакции, автоматическое прикрепление геолокации к сообщениям. + + \item[i)] \textbf{Справочник грибов.} Просмотр базы знаний о распространённых видах грибов с эталонными фотографиями, описаниями съедобности, сезонов плодоношения, предупреждениями о ядовитых двойниках. Поиск и сравнение найденных грибов с базой. + + \item[j)] \textbf{Экстренный режим (SOS).} Активация тревожного сигнала с обратным отсчётом для предотвращения случайных нажатий. Автоматическая отправка координат, состава группы и медицинской информации доверенным контактам и службам спасения. + + \item[k)] \textbf{Панель организатора.} Расширенный режим мониторинга для ответственного лица: отслеживание всех участников, контроль соблюдения графика, управление маршрутом, корректировка контрольных точек, принудительное оповещение группы. + + \item[l)] \textbf{Архив походов.} Просмотр списка завершённых походов с краткой статистикой: дата, маршрут, участники, количество найденных грибов, пройденное расстояние. + + \item[m)] \textbf{Детальный просмотр похода.} Анализ конкретного похода из архива: GPS-трек на карте, временная шкала событий, фотографии всех находок с геометками, статистика по участникам, экспорт отчёта в PDF. + \end{itemize} + + \textbf{Переходы между состояниями происходят по следующим действиям:} + + \begin{enumerate} + \item \textbf{Создание нового похода.} Переход из начального состояния (a) в планирование похода (b). Инициируется организатором для подготовки нового маршрута. + + \item \textbf{Присоединение к походу по приглашению (день похода).} Переход из начального состояния (a) в режим активной навигации (e) для участников, принявших приглашение и готовых начать поход. + + \item \textbf{Присоединение к походу по приглашению (подготовка).} Переход из начального состояния (a) в чек-лист снаряжения (d) на этапе подготовки к походу. + + \item \textbf{Переход к управлению участниками.} Из планирования похода (b) в управление участниками (c) для формирования группы и отправки приглашений. + + \item \textbf{Переход к чек-листу снаряжения.} Из управления участниками (c) в чек-лист снаряжения (d) для подготовки необходимых предметов. + + \item \textbf{Переход к чек-листу снаряжения.} Из планирования похода (b) в чек-лист снаряжения (d) напрямую. + + \item \textbf{Начало похода.} Переход из чек-листа (d) в режим активной навигации (e). Активирует GPS-отслеживание и синхронизацию местоположений всех участников. + + \item \textbf{Начало похода.} Переход из планирования похода (b) в режим активной навигации (e) напрямую. + + \item \textbf{Фотографирование находки.} Из режима навигации (e) в фиксацию находки (f). Доступно любому участнику при обнаружении гриба. + + \item \textbf{Сохранение находки и возврат к навигации.} Из фиксации находки (f) обратно в режим навигации (e) с автоматическим добавлением записи в семейную корзину (g). + + \item \textbf{Открытие семейной корзины.} Из режима навигации (e) в просмотр семейной корзины (g) для анализа всех находок группы. + + \item \textbf{Возврат к навигации из корзины.} Из семейной корзины (g) обратно в режим навигации (e). + + \item \textbf{Открытие семейного чата.} Из режима навигации (e) в семейный чат (h) для координации и обмена сообщениями. + + \item \textbf{Возврат к навигации из чата.} Из семейного чата (h) обратно в режим навигации (e). + + \item \textbf{Открытие справочника грибов.} Из фиксации находки (f) в справочник грибов (i) для уточнения вида и съедобности. + + \item \textbf{Открытие справочника грибов.} Из семейной корзины (g) в справочник грибов (i) для проверки информации о найденных грибах. + + \item \textbf{Возврат к фиксации находки.} Из справочника грибов (i) обратно в фиксацию находки (f). + + \item \textbf{Возврат к семейной корзине.} Из справочника грибов (i) обратно в семейную корзину (g). + + \item \textbf{Переход в панель организатора.} Из режима навигации (e) в панель организатора (k) для расширенного контроля группы. Доступно только ответственному лицу. + + \item \textbf{Возврат к навигации из панели организатора.} Из панели организатора (k) обратно в режим навигации (e). + + \item \textbf{Завершение похода.} Из режима навигации (e) в архив походов (l) с автоматическим сохранением всех данных: трека, находок, статистики. + + \item \textbf{Просмотр архива.} Из начального состояния (a) в архив походов (l) для анализа прошлых маршрутов. + + \item \textbf{Открытие конкретного похода.} Из архива (l) в детальный просмотр похода (m) с полной статистикой и картой. + + \item \textbf{Активация SOS.} Из любого состояния в экстренный режим (j) при нажатии тревожной кнопки. Критически важный переход, доступный с любого экрана. + + \item \textbf{Возврат на главный экран.} Из любого состояния (кроме активной навигации e и экстренного режима j) в начальное состояние (a). Из навигации возврат возможен только через завершение похода для предотвращения случайного выхода. + \end{enumerate} + + \textbf{Обоснование структуры диалога:} + + Предложенная структура диалога основана на трёх ключевых принципах. Во-первых, обеспечение безопасности: переход в экстренный режим (SOS) доступен из любого состояния одним действием, что критически важно в опасных ситуациях. Во-вторых, минимизация когнитивной нагрузки: для пожилых пользователей предусмотрен линейный переход по основным состояниям (начало → навигация → фиксация находки → возврат к навигации) без необходимости глубокой навигации по меню. В-третьих, гибкость для опытных пользователей: организатор и участники с высокой цифровой грамотностью могут быстро переключаться между параллельными состояниями (навигация, чат, корзина, панель организатора) для эффективной многозадачности. + + \addtocounter{figure}{1} + \includepdf[pages={1}, fitpaper, pagecommand={ + \thispagestyle{empty} + \begin{tikzpicture}[remember picture, overlay] + \node at (current page.south) [anchor=north, yshift=35pt] {\large{Рис 1. Граф состояний приложения}}; + \end{tikzpicture} + }]{pdf/graph.pdf} + + % \section{Описание структуры команд пользователей} + + + % \section{Физическая реализация команд пользователей} + % Команды выполняются через крупные кнопки и свайпы. В режиме «Проводник» используются физические кнопки громкости как горячие клавиши: двойное нажатие --- отправка геометки, долгое удержание --- SOS. Такой подход учитывает перчатки, мокрые экраны и минимизирует вероятность промаха. \section{Технология ввода данных} - Используются касания, свайпы и голосовой ввод для заметок и поиска грибов. Формы содержат минимальное число обязательных полей, геоданные и фотографии подставляются автоматически. Для детей ввод действий требует подтверждения родителей через push-уведомление. + \section{Описание ошибок пользователей} Возможные ошибки: случайное нажатие SOS, неверный выбор контрольной точки, закрытие навигации из-за слабого интернета, дублирование отметок грибов, опоздание на контрольное время, неверное указание координаты при плохом GPS.