# DRAKON

DRAKON (Ruso: Дружелюбный Русский Алгоритмический язык, Который Обеспечивает Наглядность, lit. 'Lenguaje Algorítmico Ruso Amigable que Aporta Claridad') es un lenguaje de programación algorítmico visual y lenguaje de modelado de código abierto, ideado para el proyecto espacial soviético del transbordador Buran en 1986, a raíz de la necesidad de aumentar la productividad en el desarrollo de software. El lenguaje visual proporciona una forma uniforme de representar procesos en diagramas de flujo.
Actualmente se usa en la industria aeroespacial alemana, y en aplicaciones de programación visual tales como Drakon.tech. Este último permite programar en Drakon y convertirlo a JavaScript, es decir, es posible programar páginas web en Drakon. Existen varias implementaciones de la especificación del lenguaje que pueden utilizarse para dibujar y exportar diagramas de flujo reales. Entre los ejemplos más destacados se encuentra DRAKON Editor, de código abierto (septiembre de 2011).

## Historia

El desarrollo de DRAKON comenzó en 1986 para hacer frente al riesgo emergente de malentendidos -y consiguientes errores- entre usuarios de distintos lenguajes de programación en el programa espacial ruso. Su desarrollo fue dirigido por Vladimir Parondzhanov con la participación de la Agencia Espacial Federal Rusa (Centro Académico Pilyugin, Moscú) y la Academia Rusa de Ciencias (Instituto Keldysh de Matemáticas Aplicadas).
El lenguaje se construyó mediante la formalización, ergonomización y estructuración no clásica de diagramas de flujo descritos en la norma ISO 5807-85 y la norma rusa «Гост 19.701-90».
El objetivo era sustituir los lenguajes especializados utilizados en el proyecto Buran por un lenguaje de programación universal. A saber, PROL2 (ПРОЛ2), utilizado para desarrollar el software de los sistemas de a bordo del sistema informático Biser-4 (Бисер-4),[5] DIPOL (ДИПОЛЬ), utilizado para desarrollar el software de los sistemas informáticos de mantenimiento en tierra) y LAKS (ЛАКС), utilizado para la modelización.
El trabajo finalizó en 1996 (3 años después del cierre oficial del proyecto Buran), cuando se desarrolló un sistema automatizado de programación CASE llamado "Grafit-Floks".
Este CASE se utiliza desde 1996 en: un proyecto internacional Sea Launch, etapa superior de inserción en órbita rusa Fregat (ruso: Фрегат, fragata) para sistemas de control a bordo y pruebas, vehículo de lanzamiento pesado mejorado (cohete portador) Proton-M.

## Visión general

El nombre DRAKON es el acrónimo ruso de «Дружелюбный Русский Алгоритмический [язык], Который Обеспечивает Наглядность", que se traduce como “Algoritmo ruso amistoso [lenguaje] que ilustra (o aporta claridad)”. La palabra «наглядность» (pronunciada aproximadamente como «naa-glya-dno-st-th») se refiere a que un concepto o idea es fácil de imaginar y comprender, y puede traducirse como «claridad».
A diferencia de la filosofía de UML, la filosofía del lenguaje de DRAKON se basa en ser aumentado si es necesario, mediante el uso de un lenguaje híbrido, lo que puede ilustrarse como «incrustar fragmentos de código del lenguaje de texto utilizado en la forma que DRAKON requiera». De este modo, DRAKON sigue siendo un lenguaje visual sencillo que puede utilizarse como complemento para un programador interesado en facilitar el soporte del código de su propio proyecto o para otras necesidades a largo plazo, como mejorar la ergonomía del proceso de codificación o facilitar la revisión y comprensión del código.
El lenguaje DRAKON puede utilizarse como lenguaje de modelado/«marcado» (que se considera un programa «DRAKON puro» independiente) y como lenguaje de programación (como parte de un lenguaje híbrido).
La integración de una variante más estricta, «académica», de un lenguaje de marcado en la programación, como la que ofrece DRAKON, añade azúcar sintáctico que permite a los usuarios de distintos lenguajes de programación comprender las aportaciones de los demás al proyecto global e incluso hacer comentarios si es necesario.

## Familia de lenguas DRAKON

DRAKON (Ruso: ДРАКОН; que significa «dragón» en español) está diseñado con la intención de permitir una fácil comprensión y legibilidad, ya que el uso de varios lenguajes en un mismo proyecto puede llevar a confusión.
DRAKON es una familia de lenguajes híbridos, como DRAKON-C, DRAKON-ASM, DRAKON-Java, etc. Todos los lenguajes de la familia DRAKON comparten una sintaxis gráfica uniforme basada en diagramas de flujo. La sintaxis gráfica estándar proporciona similitud de diagramas de flujo para diferentes lenguajes híbridos. El lenguaje de texto utiliza su propia sintaxis.
La base de la sintaxis gráfica es un alfabeto gráfico. Los elementos gráficos («letras») del alfabeto DRAKON se denominan iconos (no símbolos). DRAKON también tiene macro-iconos. Los macro-iconos son las palabras gráficas del lenguaje DRAKON; están formados por iconos. Hay 27 iconos y 21 macro-iconos en el lenguaje DRAKON.
Los gráficos Drakon se construyen a partir de iconos y macro-iconos.
Las partes importantes de los maсroiсons son los puntos de valencia. En estos puntos se pueden introducir sucesivamente iconos o micro-iconos que el editor drakon ordena en columnas.

## Diseño

DRAKON se creó como un lenguaje visual fácil de aprender para ayudar a la comprensión de programas informáticos escritos en distintos lenguajes de programación con fines ilustrativos, de planificación y de estrategia.
DRAKON utiliza drakon-chart, que es una formalización de los diagramas de flujo tradicionales para representar la estructura general del programa. A los iconos de DRAKON se añaden fragmentos de código de un lenguaje de programación. La combinación de elementos visuales con código ayuda a crear y mantener diagramas de flujo legibles a lo largo del desarrollo del programa en cuestión.
Las reglas de DRAKON para crear diagramas están optimizadas cognitivamente para facilitar su comprensión, lo que lo convierte en una herramienta para aumentar la inteligencia.
Los diagramas DRAKON de grandes programas multipropósito pueden ser complejos y difíciles de comprender. Un conjunto de programas más pequeños, que juntos sirven al mismo propósito, son a menudo más fáciles de entender cuando se representan como drakon-charts. Un problema similar existe en el mantenimiento del código de grandes programas. A veces, los programadores se refieren a este problema como la "regla de las 30 [líneas de código]".

## Uso actual
### DRAKON en el Centro Aeroespacial Alemán

El lenguaje DRAKON se utiliza en el Centro Aeroespacial Alemán para la implementación de algunas funciones críticas dictadas por las normas de seguridad de las pruebas de vuelo, en las que la automatización es importante debido a la distancia máxima a la estación de tierra y a que el proceso necesita una rápida ejecución automática.
Se utilizó el software DRAKON Editor para programar gráficamente diagramas de flujo que se comprobaron especialmente. Se generó código C a partir de los diagramas DRAKON, por ejemplo, para la representación DRAKON del código de detección de lanzamiento.

### Modelamiento de procesos de negocio

El lenguaje DRAKON puede utilizarse como lenguaje para modelar y visualizar procesos empresariales. "El lenguaje DRAKON se aplicó como lenguaje básico para construir modelos de procesos empresariales, lo que permite obtener un prototipo de máquina de estados finitos al construir modelos de procesos empresariales. La visualización de los procesos empresariales en el espacio de estados permite al decisor mejorar la eficacia de la toma de decisiones"

### Usos ajenos a la programación

Aunque DRAKON está diseñado principalmente como herramienta para comprender programas informáticos, los gráficos DRAKON también pueden utilizarse para ilustrar procesos en campos no relacionados con la informática.
En el editor de DRAKON se pueden añadir imágenes a los iconos de DRAKON. Esta capacidad se utiliza en algunos campos para crear fácilmente infografías "similares a diagramas de flujo". En Rusia el editor DRAKON es conocido por ser utilizado en el campo de la medicina como herramienta para hacer gráficos "instructivos" para pacientes o personal médico.