DRAKON ( en ruso : Дружелюбный Русский Алгоритмический язык, Который Обеспечивает Наглядность , lit. 'lenguaje algorítmico ruso amigable que proporciona claridad') es un lenguaje de modelado y programación visual algorítmico de código abierto y gratuito desarrollado como parte del extinto programa espacial Buran de la Unión Soviética [2] en 1986 tras la necesidad de aumentar la productividad del desarrollo de software. El lenguaje visual proporciona una forma uniforme de representar procesos en diagramas de flujo .
Existen varias implementaciones de la especificación del lenguaje que se pueden utilizar para dibujar y exportar diagramas de flujo reales. Entre los ejemplos más destacados se incluye el editor gratuito y de código abierto DRAKON (septiembre de 2011).
El desarrollo de DRAKON comenzó en 1986 para abordar el riesgo emergente de malentendidos -y errores subsiguientes- entre usuarios de diferentes 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, ergonomía y estructuración no clásica de los diagramas de flujo descritos en la norma ISO 5807-85 y la norma rusa «Гост 19.701-90». [3] [4]
El objetivo era sustituir los lenguajes especializados utilizados en el proyecto Buran por un lenguaje de programación universal : PROL2 (ПРОЛ2), utilizado para desarrollar el software de los sistemas de vuelo para el sistema informático Biser-4 (Бисер-4), [5] DIPOL (ДИПОЛЬ), utilizado para desarrollar el software de los sistemas informáticos de mantenimiento en tierra [5] y LAKS (ЛАКС), utilizado para el modelado.
La obra finalizó en 1996 (3 años después del cierre oficial del proyecto Buran), cuando se desarrolló un sistema de programación CASE automatizado llamado "Grafit-Floks". [6]
Este CASE se utiliza desde 1996 en: un proyecto internacional Sea Launch , [ cita requerida ] la etapa superior de inserción en órbita rusa Fregat (en ruso: Фрегат, fragata) para sistemas de control y pruebas a bordo, [7] el vehículo de lanzamiento pesado mejorado (cohete portador) Proton-M . [ cita requerida ]
El nombre DRAKON es el acrónimo ruso de "Дружелюбный Русский Алгоритмический [язык], Который Обеспечивает Наглядность", que se traduce como "[lenguaje] algorítmico ruso amigable que ilustra (o proporciona claridad)". La palabra "наглядность" (pronunciada aproximadamente como "na-GLYA-dnost") se refiere a un concepto o idea que 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 la posibilidad de ampliarlo, si es necesario, mediante el uso de un lenguaje híbrido, que se puede ilustrar como "incrustar fragmentos de código del lenguaje de texto utilizado en la forma que DRAKON requiere". De esta manera, DRAKON siempre sigue siendo un lenguaje visual simple que se puede utilizar como complemento para un programador que esté interesado en hacer que el código de su propio proyecto sea más fácil de soportar o en otras necesidades a largo plazo, por ejemplo, mejorar la ergonomía del proceso de codificación o hacer que el código sea más fácil de revisar y comprender.
El lenguaje DRAKON se puede utilizar tanto como lenguaje de modelado/"marcado" (que se considera un programa "DRAKON puro" independiente) 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, agrega complejidad sintáctica permitiendo a los usuarios de diferentes lenguajes de programación comprender las contribuciones de los demás al proyecto general e incluso proporcionar comentarios si es necesario.
DRAKON ( en 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 idiomas en un solo proyecto puede generar 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 similitudes entre los diagramas de flujo de 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 macroiconos . Los macroiconos son las palabras gráficas del lenguaje DRAKON; consisten en iconos. Hay 27 iconos y 21 macroiconos en el lenguaje DRAKON.
Los gráficos Drakon se construyen a partir de íconos y macroiconos.
Las partes importantes de los macroicones son los puntos de valencia (representados en la ilustración como círculos negros). En estos puntos se pueden introducir iconos o microicones de forma sucesiva y organizarlos en columnas mediante el editor de drakon.
DRAKON fue creado como un lenguaje visual fácil de aprender para ayudar a la comprensión de programas de computadora escritos en diferentes lenguajes de programación con fines ilustrativos, de planificación y 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 íconos de DRAKON se les agregan fragmentos de código de un lenguaje de programación. La combinación de elementos visuales con código ayuda a la creación y el mantenimiento de diagramas de flujo legibles junto con el desarrollo del programa en cuestión.
Las reglas de DRAKON para crear diagramas están optimizadas cognitivamente para una fácil comprensión, lo que lo convierte en una herramienta para aumentar la inteligencia . [3] [8] [9] [10]
Los diagramas de Drakon de programas grandes y multipropósito pueden ser complejos y difíciles de comprender. Un conjunto de programas más pequeños, que juntos sirven para el mismo propósito, a menudo es más fácil de entender cuando se representan como diagramas de Drakon. Existe un problema similar en el mantenimiento del código de programas grandes. Este problema se conoce ocasionalmente como "regla de 30 [líneas de código]" entre los programadores.
Artículo de texto completo que contiene la descripción de la sintaxis visual del lenguaje DRAKON en inglés, 12 páginas, descarga gratuita en formato pdf. [11]
Ejemplo sencillo de un programa en el lenguaje DRAKON
Estos ejemplos son código real de una implementación del juego Tetris . Los ejemplos están en lenguaje DRAKON-JavaScript. Los íconos (primitivos visuales) del lenguaje DRAKON definen la estructura general de los algoritmos. Los fragmentos de código dentro de los íconos (primitivos) están en JavaScript.
La función advanceStep implementa la lógica central del juego. advanceStep es una máquina de estados representada como un árbol de decisiones . [12] El motor del juego llama periódicamente a advanceStep . Esta máquina de estados tiene tres estados "jugando", "soltando" y "terminado". El juego realiza diferentes acciones según el estado actual. Por ejemplo, en el estado "jugando", cuando hay un proyectil cayendo y el proyectil puede moverse hacia abajo, se lo mueve un paso hacia abajo.
Con DRAKON, el lector del algoritmo puede rastrear visualmente todos los caminos posibles en el árbol de decisiones.
La función noProjectile se encarga de la situación específica en la que no cae ningún proyectil. Si hay una fila llena, esa fila se elimina de la cuadrícula. De lo contrario, el juego intenta insertar un nuevo proyectil. Si no hay espacio para el proyectil, se pierde el juego.
La función clearRow escanea todas las filas de abajo a arriba hasta que llega a una fila sin espacios vacíos. En ese caso, la fila se elimina de la cuadrícula, se aumenta la puntuación y el ritmo del juego aumenta.
La siguiente imagen ilustra la ejecución del algoritmo de silueta DRAKON. La ejecución del algoritmo se anima resaltando los elementos del diagrama en el orden de ejecución.
La silueta 'Pesca' está formada por cuatro árboles:
El camino principal de cada árbol se muestra resaltando una línea vertical gruesa llamada pincho.
El gráfico de flujo siempre tiene una ruta desde el ícono del encabezado hasta cada vértice (nodo) del gráfico de flujo de control. En consecuencia, una silueta no puede tener código inalcanzable en ninguna condició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, donde la automatización es importante debido a la distancia máxima a la estación terrestre y el proceso necesita una ejecución automática rápida.
Se utilizó el software DRAKON Editor para programar gráficamente los diagramas de flujo, que fueron especialmente revisados. Se generó código C a partir de los diagramas de Drakon, por ejemplo, para la representación en Drakon del código de detección de lanzamiento. [13]
El lenguaje DRAKON puede utilizarse como lenguaje para modelar y visualizar procesos de negocio. “El lenguaje DRAKON se ha utilizado como lenguaje básico para la construcción de modelos de procesos de negocio, lo que permite obtener un prototipo de máquina de estados finitos al construir modelos de procesos de negocio. La visualización de procesos de negocio en el espacio de estados permite al responsable de la toma de decisiones mejorar la eficiencia de la toma de decisiones”. [14]
Si bien DRAKON está diseñado principalmente como una herramienta para comprender programas de computadora, los diagramas drakon también se pueden utilizar para ilustrar procesos en campos no relacionados con la informática.
En el editor DRAKON se pueden añadir imágenes a los iconos de DRAKON. Esta función se utiliza en algunos campos para crear fácilmente infografías "similares a diagramas de flujo" . En Rusia, el editor DRAKON es conocido por su uso en el campo médico como herramienta para crear gráficos "instructivos" para pacientes o personal médico. [ cita requerida ] [15]