Как-то в одной статье я обосновал свой выбор Emacs в качестве основного текстового редактора. И один из полученных комментариев сподвиг меня написать эту статью. Его автор говорил о том, что суть программирования не сводится только к тексту и синтаксису кода  —  оно должно быть концептуальным. А такие текстовые редакторы, как Emacs и Vim, тормозят развитие разработчиков в этом направлении. 

Мне еще предстоит изучить систему визуального программирования (Smalltalk), рекомендованную автором комментария. Но его точка зрения заставила поразмышлять на заданную тему. По правде говоря, я всегда интуитивно разбивал процесс разработки на 2 этапа.

  1. Разработка графического дизайна функциональности, подлежащей реализации, со всеми техническими деталями. 
  2. Написание кода функциональности в соответствии с представленным образом (графическим дизайном). 

По опыту знаю, что по такому принципу действуют большинство разработчиков. Тем не менее считаю нужным поделиться одним инструментом, а точнее пакетом pgf-umlsd. Я сам на практике убедился в том, что он эффективен, быстр и легко экспортируется. 

Знакомство с pgf-umlsd

pgf-umlsd —  это пакет LaTeX для рисования UML-диаграмм последовательности.

Я обнаружил, что благодаря вышеупомянутому пакету LaTeX также прекрасно подходит для создания дизайна продукта и технического описания функциональности. Отсутствие опыта работы с LaTeX  —  не повод для беспокойства. Данное руководство восполнит этот пробел необходимыми базовыми знаниями и поможет создать вашу первую диаграмму последовательности с помощью pgf-umlsd.

Рассмотрим пример подобной диаграммы: 

Источник.

Как видим, диаграмма выглядит отлично, но при этом обладает вложенной и довольно сложной структурой. Однако, как только вы начнете проектировать реализацию функциональности на собственной диаграмме последовательности, она покажется вам самой понятной визуализацией, которую вы когда-либо создавали. 

Я не могу похвастаться глубокими знаниями о лучших практиках с диаграммами последовательности, но узнать о них можно из материалов Википедии и сопутствующих источников.

Диаграммы последовательности обычно применяются для особо точного наглядного представления задач между пользователями и сервером. Они также пригодны для разработки более высокоуровневых процессов и задач. 

Более того, LaTeX предлагает намного более быстрый способ создания диаграмм по сравнению с перемещением мышки и перетаскиванием компонентов. 

Применение пакета LaTeX

Во-первых, потребуется редактор LaTeX и желательно с компилятором, функционирующим в режиме реального времени. Он ускоряет процессы и удобен для тех, кто только начинает знакомство с этим ПО.

На данный момент я работаю с альфа-версией созданного мной онлайн-редактора LaTeX в реальном времени, который интегрирует технологию блокчейна для управления документами. Однако он еще не готов стать общедоступным. Поэтому рекомендую воспользоваться таким приложением, как Gummi, с компилятором в режиме реального времени. 

Во-вторых, считаю нужным объяснить ряд базовых понятий редактирования для тех, кто ранее не работал с LaTeX. Его можно рассматривать как своего рода язык разметки (хотя это и не он). Вы можете импортировать пакеты (по примеру pgf-umlsd, который мы приведем далее). Перед встраиваниями ставится обратная косая черта. 

Например, для добавления вертикального интервала в 200 пикселей выполняем \vspace{200px}. В число других важных понятий входят \begin и \end. Их можно рассматривать как начало элемента <div> в HTML с предопределенными классами. Так, создать маркированный список можно следующим образом: 

\begin{itemize}
\item first item
\item second item
\end{itemize}

Пакет pgf-umlsd в действии 

Сначала открываем редактор LaTeX, создаем новый документ и задействуем пакет pgf-umlsd, как показано ниже: 

\documentclass{article}
\usepackage{pgf-umlsd}
\usepackage{graphicx}
\usetikzlibrary{positioning,fit,calc}
\tikzset{block/.style={draw, thick, text width=3cm, minimum height=1.5cm, align=center},line/.style={-latex}}

\begin{document}
Hello World!
\end{document}

В результате в редакторе получаем документ Hello World!.

Рассмотрим принцип работы данного пакета, он довольно прост. 

  1. Начинаем диаграмму последовательности командой \begin{sequencediagram} и заканчиваем  —  \end{sequencediagram}.
  2. Добавляем новых агентов, присваивая каждому из них переменную и значение. Например, поток действий с server в качестве переменной и Server в качестве значения создается так: \newthread{server}{Server}. При желании можно использовать цвета: \newthread[red]{server}{Server}. Кроме того, доступна возможность создания экземпляра: \newinst{database}{Database}
  3. Начинаем вызовы между добавленными агентами. Основной синтаксис вызова следующий: 
    \begin{call}{client}{payload}{server}{response}\end{call}.

Напрямую вставьте данный пример в пустой редактор LaTeX и получите базовую диаграмму последовательности: 

\documentclass{article}

\title{ Test sequence diagram }
\date{June 9, 2022
\author{Your name}

\usepackage{pgf-umlsd}
\usepackage{graphicx}
\usetikzlibrary{positioning,fit,calc}
\tikzset{block/.style={draw, thick, text width=3cm, minimum height=1.5cm, align=center},line/.style={-latex}}

\begin{document}

\maketitle

\begin{sequencediagram}
    \newthread[blue]{client}{User}
    \newthread[red]{server}{Server1}
    \newinst{database}{Database}
    \begin{call}{client}{request}{server}{resource}
        \begin{call}{server}{query}{database}{raw}
        \end{call}
    \end{call}
\end{sequencediagram}
\end{document}

Примеры более сложных диаграмм представлены по ссылке

Еще два аргумента в пользу данного подхода

Помимо ранее обозначенных причин, я отдаю предпочтение диаграммам последовательности еще и потому, что они в большей степени акцентируют внимание на порядке событий, чем на их содержании. Более того, тот факт, что данный подход использует LaTeX, позволяет создавать прекрасные и профессиональные документы и проекты. 

Читайте также:

Читайте нас в TelegramVK и Дзен


Перевод статьи Tommaso De Ponti: How To Graphically Design Your App Before Coding It

Предыдущая статьяВведение в алгоритмы машинного обучения: линейная регрессия
Следующая статья3 приема для определения функций в Python