Найти в Дзене
Nuances of programming

Сначала графдизайн создать, потом код написать

Оглавление

Источник: Nuances of Programming

Как-то в одной статье я обосновал свой выбор 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, позволяет создавать прекрасные и профессиональные документы и проекты.

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

Читайте нас в Telegram, VK

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