
La arquitectura de grafos de nodos es un diseño de software estructurado en torno al concepto de grafo de nodos . Tanto el código fuente como la interfaz de usuario están diseñados para la edición y composición (o vinculación) de unidades funcionales atómicas. Los grafos de nodos son un tipo de lenguaje de programación visual .
El código fuente de la aplicación de software se organiza en unidades funcionales atómicas llamadas nodos. Esto se suele hacer mediante clases derivadas de una clase base común a todos los nodos. Cada nodo puede tener entradas y salidas, que también se implementan normalmente mediante clases derivadas de clases base para todas las entradas y todas las salidas. Las entradas y salidas pueden hacer referencia entre sí, generalmente mediante punteros a instancias de otras entradas o salidas. Cuando un nodo ejecuta su funcionalidad, recupera sus entradas siguiendo los punteros almacenados en ellas para obtener los datos generados por otros nodos. A continuación, el nodo ejecuta su operación sobre estas entradas para producir sus propias salidas. La capacidad de vincular nodos de esta manera permite descomponer tareas o problemas complejos en unidades nodales atómicas más fáciles de comprender.
La interfaz de usuario de la aplicación suele mostrar visualmente el gráfico de nodos. Los nodos se suelen representar como rectángulos, y las conexiones entre ellos se dibujan con líneas o curvas.
El uso de la arquitectura de grafos de nodos comenzó en la década de 1960. Hoy en día, su uso se ha disparado. Los campos de los gráficos, los videojuegos y el aprendizaje automático son los principales usuarios de este diseño de software, y la mayoría de las herramientas utilizan la arquitectura de grafos de nodos.
Aún hoy, existe cierto debate sobre las ventajas de la programación visual y la arquitectura de grafos de nodos. Quienes la defienden destacan cómo la abstracción que proporcionan los grafos de nodos facilita su uso. Los críticos, por su parte, señalan que la programación visual es demasiado restrictiva y que deben recurrir a la modificación del código fuente o de scripts para realizar sus tareas.
Historia
Eric Hosick está trabajando en X para recopilar instantáneas de todas las interfaces de usuario de grafos de nodos en la mayoría de las aplicaciones de software . Este esfuerzo busca documentar la evolución y la proliferación de las interfaces de usuario de grafos de nodos desde sus orígenes. Esta historia visual se encuentra en una página de blog llamada Visual Programming Languages - Snapshots . El trabajo que condujo a las arquitecturas de grafos de nodos y la programación visual parece haber comenzado en la década de 1960, en el área conocida como "comunicación hombre-máquina".
En su tesis del MIT (1966), titulada "Especificación gráfica en línea de procedimientos", William Robert Sutherland describe y analiza temas relacionados con un lenguaje pictórico bidimensional. Esta fue una de las primeras investigaciones sobre flujos de trabajo o programas basados en flujo de datos . Desde entonces, su tesis se ha utilizado como " estado de la técnica " para evitar demandas judiciales sobre ideas de flujo de datos. Se suele considerar que su trabajo sentó las bases de lo que hoy se conoce como diseño asistido por computadora (CAD) .
- Un programa pictórico es una forma natural de expresar procesos paralelos. La naturaleza bidimensional del lenguaje ayuda a visualizar muchas cosas que suceden a la vez. [ 1 ]
- La facilidad para depurar programas, especialmente los paralelos, se verá mejorada por un lenguaje pictórico. Poder conectar sondas de datos y observar la ejecución de un programa permite comprender detalles difíciles de obtener de otra manera. [ 1 ]
- La ejecución de un programa no tiene por qué estar controlada por las convenciones habituales de flujo secuencial explícito. El movimiento de datos a través de un programa puede determinar su funcionamiento. Una convención de control de datos se corresponde estrechamente con nuestras ideas intuitivas sobre cómo debería funcionar un programa gráfico y, además, permite la programación paralela sin designaciones de flujo explícitas. [ 1 ]
En 1969, TO Ellis, JF Heafner y WL Sibley publicaron un artículo sobre un lenguaje de entrada gráfica (GRAIL) . Su trabajo estaba relacionado con la tableta RAND , que comenzó con la investigación sobre Sketchpad , un sistema donde los usuarios podían escribir comandos de computadora directamente en una tableta, llevada a cabo por Ivan Sutherland . El sistema GRAIL utilizaba un lenguaje de programación gráfica basado en diagramas de flujo y podía reconocer letras manuscritas y gestos. [ 2 ] Alan Kay ha realizado varias demostraciones del sistema GRAIL , sin embargo, no participó en su creación.
- Los conceptos organizativos importantes en el sistema GRAIL son el flujo de control secuencial, la jerarquía de subrutinas y el lenguaje (diagramas de flujo) para relacionar gráficamente la organización dentro de los conceptos de los dos primeros. [ 2 ]
- La naturaleza secuencial del control permite al hombre visualizar procesos aislados que se adaptan a funciones específicas, lo que, a su vez, permite al organizador pensar en el programa total en términos de subpartes manejables. [ 2 ]
- La jerarquía de subrutinas enfatiza aún más la noción de procesos aislados. [ 2 ]
- Los diagramas de flujo ayudan al hombre a visualizar sus opciones de control y la relación entre los procesos al expresar estas interrelaciones en dos dimensiones. [ 2 ]
Algunos de los usos más recientes de las arquitecturas de grafos de nodos comenzaron alrededor de 2005. En este período, los grafos de nodos empezaron a desarrollar paradigmas para abordar la complejidad. Esta complejidad surgió a medida que aumentaba el número de nodos y enlaces en el grafo. Una de las ideas principales para abordar la complejidad fue el concepto de nodo de grupo o paquete, que ocultaba los nodos en su interior, exponiendo únicamente las entradas y salidas del grupo.
- Katana, Fundición
- Houdini, SideFX
- Nuke, Fundición
- Mari, Fundición
- Maya, Autodesk
- Blender (software) § Nodos de geometría — Documentación oficial
- Saltamontes, McNeel y Asociados
- Dynamo, Autodesk
Abstracción y complejidad
En el artículo «Mundos pequeños jerárquicos en la arquitectura de software» [ 3 ], el autor Sergi Valverde argumenta que la mayoría de los grandes sistemas de software se construyen de forma modular y jerárquica, y que los grafos de nodos pueden utilizarse para analizarlos. Muchos otros artículos de análisis de software también utilizan grafos de nodos para analizar grandes sistemas, lo que sugiere que estos son buenos modelos de la estructura interna y el funcionamiento del software. [ 4 ]
Debate sobre programación visual
Los grafos de nodos son un subconjunto de la clase más amplia de lenguajes de programación visual . Permiten diseñar programas de forma visual y estructurada, en lugar de escribir código fuente . En las industrias del cine y los videojuegos, los grafos de nodos son sinónimo de programación visual. Actualmente existe cierto debate sobre el potencial, la abstracción y la necesidad de los grafos de nodos y los lenguajes de programación visual.
- Los defensores de la programación visual suelen destacar cómo simplifica la programación al abstraer muchos detalles y exponer únicamente los controles necesarios para su dominio. [ 5 ] Estos controles son los parámetros de los nodos que controlan su comportamiento y los enlaces entre ellos.
- Los críticos de la programación visual generalmente enfatizan que no ofrece suficiente control y que para tareas más complejas se hace necesario escribir código fuente . [ 6 ] Sin embargo, estas tareas más complejas a menudo quedan fuera del uso previsto o del dominio del grafo de nodos.
Este sigue siendo un tema de debate activo, con nuevas discusiones que se llevan a cabo en foros abiertos hasta el día de hoy. A continuación, se presentan algunas de las discusiones más importantes hasta la fecha.
- Discusión en Hacker News, 2014
- Debate en Hacker News, 2019
- Discusión en Reddit, 2019
Los estudios de investigación tienden a arrojar más detalles sobre estas discusiones y a resaltar más las ventajas y desventajas de los grafos de nodos. Indican que los grafos de nodos y la programación visual son fáciles de entender para los nuevos usuarios, pero a medida que los usuarios avanzan hacia tareas más complejas, a menudo necesitan recurrir a la autoría de código fuente textual . [ 7 ] Otra encuesta se centra en las creencias de las personas sobre los efectos cognitivos de la programación visual, en la que encontraron que los programadores profesionales son los más escépticos de la programación visual. [ 8 ] Otros estudios han demostrado en experimentos psicológicos que la programación visual puede tener efectos positivos significativos en el rendimiento en tareas cognitivas. [ 9 ]
Grafo de nodos

En el contexto de la arquitectura de software, un grafo de nodos se refiere a la organización de la funcionalidad del software en unidades atómicas llamadas nodos, los cuales se conectan entre sí mediante enlaces. La manipulación de nodos y enlaces en el grafo de nodos suele realizarse mediante una API programable o una interfaz visual con el ratón . En el diagrama anterior, el grafo de nodos se muestra en el lado derecho.
En el uso actual, el término "grafo de nodos" es una palabra compuesta abierta. Sin embargo, en software antiguo se le denominaba "nodegrafo", una palabra compuesta cerrada.
- Nodegraph, software de válvulas
- Nodegrafo, Notch
Nodo
Los nodos realizan algún tipo de cálculo. Encapsulan esta funcionalidad ejecutable y, a menudo, reciben entradas y producen salidas como resultado de la ejecución . Un ejemplo sencillo es un nodo que suma dos números. Las entradas son los dos números a sumar y la salida es la suma de ambos.
Los nodos son análogos a funciones matemáticas de la siguiente forma.
dóndees el cálculo del nodo,es un vector de los valores de entrada del nodo yes un vector de los valores de salida del nodo.
Visualmente, los nodos suelen representarse mediante rectángulos. Sin embargo, esta convención no se sigue en todas las aplicaciones. En el diagrama anterior, hay tres nodos etiquetados como "Vídeo", "Añadir estrella" y "Añadir círculo".
Parámetros del nodo
Los nodos suelen tener parámetros adicionales que definen su ejecución . Estos parámetros están respaldados por tipos de datos en el código fuente del nodo .
Matemáticamente, pueden considerarse valores de entrada adicionales para la función de cálculo del nodo. La única diferencia radica en que estos valores son controlados directamente por el usuario, en lugar de ser generados por otro nodo como resultado de su ejecución . Por ejemplo, en el ejemplo anterior sobre un nodo que suma dos números, podemos introducir un parámetro de sesgo para que el nodo pueda añadir un número fijo adicional a la suma.
Visualmente, los parámetros del nodo suelen mostrarse después de que el usuario haga clic en él. Esto ayuda a reducir la saturación visual del gráfico de nodos. En el diagrama anterior, vemos una ventana de parámetros que se abre junto al nodo "Agregar estrella".
Entradas y salidas de los nodos
Como se mencionó anteriormente, los nodos suelen tener entradas y salidas. Estas entradas y salidas están respaldadas por tipos de datos en el código fuente del nodo. Las entradas y salidas son cruciales para almacenar valores antes y después de la ejecución del nodo .
Matemáticamente, las entradas y salidas del nodo son análogas a los valores de entrada y salida de las funciones.
dóndees el cálculo del nodo,es un vector de los valores de entrada del nodo yes un vector de los valores de salida del nodo.
Visualmente, las entradas y salidas de los nodos suelen representarse con círculos.
Enlaces de nodos
Los enlaces transfieren los valores almacenados en tipos de datos entre diferentes nodos. Son análogos a la composición matemática. Por ejemplo, si el nodo A envía sus salidas al nodo B, esto se puede representar matemáticamente de la siguiente manera.
dóndeyson las operaciones realizadas por el nodo B y el nodo A,es un vector de los valores de entrada del nodo A yes un vector de los valores de salida del nodo B.
Tipos de nodos
El tipo de un nodo indica qué operación de cálculo realizará al ejecutarse . A menudo, existen muchos tipos de nodos diferentes que participan en el grafo de nodos. A continuación, se muestran algunos ejemplos:
- Nuke , un popular programa de composición de efectos visuales , incluye cientos de nodos. [ 10 ] cada uno de los cuales realiza tareas específicas relacionadas con la composición.
- Katana, un popular software de apariencia e iluminación, incluye cientos de nodos. [ 11 ] cada uno de los cuales realiza tareas específicas relacionadas con la iluminación de escenas de gráficos por computadora .
- Mari, un popular software de pintura 3D, incluye cientos de nodos. [ 12 ] cada uno de los cuales realiza tareas específicas relacionadas con la pintura 3D.
El tipo de nodo más importante para gestionar la complejidad es el nodo de grupo. Este nodo no ejecuta código de software como otros nodos. Simplemente agrupa un subconjunto de nodos conectados y gestiona las entradas y salidas del grupo. Esto oculta la complejidad dentro de los nodos de grupo y limita su acoplamiento con otros nodos externos. Esto da lugar a una jerarquía donde los grafos más pequeños se integran en los nodos de grupo. A continuación, se muestran ejemplos de nodos de grupo que se utilizan para agrupar un subconjunto de nodos conectados y simplificar el grafo.
Interfaz de usuario
Las aplicaciones de software que utilizan la arquitectura de grafo de nodos normalmente exponen el grafo de nodos de forma visual o gráfica al usuario, permitiéndole realizar cambios en él. Mediante el ratón , los usuarios normalmente podrán:
- crear nuevos nodos
- editar parámetros en los nodos
- conectar nodos entre sí
- evaluar el grafo hasta un nodo determinado
- ver los valores de salida actuales en los nodos
Con el creciente uso de grafos de nodos, actualmente se presta mayor atención a la creación de interfaces fáciles de usar. A menudo, estas nuevas interfaces son diseñadas por especialistas en interfaces de usuario y diseñadores gráficos. A continuación, se muestran algunas interfaces de usuario diseñadas por artistas y diseñadores.
- Gráficos de nodos en Dribbble
- Nodos en Dribbble
Grafos acíclicos dirigidos

Muchos resultados teóricos de la teoría de grafos se aplican a los grafos de nodos, especialmente en lo que respecta a la topología . Este campo, donde los nodos se enlazan para formar grafos, está ampliamente estudiado.
Un aspecto que genera especial preocupación durante la evaluación de grafos de nodos son los ciclos . Cuando existen ciclos en el grafo de nodos, la evaluación nunca termina, ya que los nodos se ejecutan continuamente siguiendo los enlaces. Para evitar estos problemas, muchas arquitecturas de grafos de nodos se limitan a un subconjunto de grafos conocidos como grafos dirigidos acíclicos .
Uso en gráficos por computadora

El uso de la arquitectura de grafos de nodos en el diseño de software es especialmente popular en las industrias del cine y los videojuegos . El diagrama anterior muestra una interfaz de usuario simplificada para una herramienta artística de edición y creación de vídeos. Los nodos se representan como rectángulos y se conectan entre sí mediante líneas curvas ( curvas de Bézier ). En el modelo operativo de este software, una secuencia de vídeo se transmite a través de las líneas al siguiente nodo, y cada nodo realiza modificaciones adicionales a la secuencia. En este ejemplo, un vídeo se traduce a 2D, otro se pixela y, finalmente, ambos se combinan.
A continuación se presentan algunos ejemplos de software que utiliza la arquitectura de grafo de nodos en las industrias del cine y los videojuegos .
- Katana, Fundición
- Houdini, SideFX
- Nuke, Fundición
- Mari, Fundición
- Maya, Autodesk
- Licuadora
Uso en aprendizaje automático

El uso de la arquitectura de grafos de nodos en el diseño de software se ha popularizado recientemente en aplicaciones de aprendizaje automático . El diagrama anterior muestra una red neuronal simple compuesta por tres capas: la capa de entrada, la capa oculta y la capa de salida. Los elementos de cada capa son pesos, conectados a los pesos de las demás capas. Durante la inferencia, el algoritmo de aprendizaje automático evalúa los pesos de la capa de salida mediante una secuencia de evaluaciones funcionales sobre los pesos de las capas anteriores. Durante el entrenamiento, el algoritmo utiliza la optimización para minimizar una función de pérdida , que depende de la diferencia entre los pesos de la capa de salida y los valores esperados. Los grafos de nodos se utilizan para visualizar, configurar y depurar estas capas de la red neuronal.
Los siguientes son ejemplos de software de aprendizaje automático que utiliza una arquitectura de grafo de nodos sin una interfaz gráfica para los grafos de nodos.
- PyTorch, GitHub, Facebook
- TensorFlow, GitHub, Google
A continuación se muestran algunos ejemplos de software de aprendizaje automático que utiliza la arquitectura de grafo de nodos .
- Libro de gráficos, Cerbrec
- PerceptiLabs, KDnuggets
- Cognición profunda, Cognición profunda Inc.
- Modelador de redes neuronales, IBM
- Consola de red neuronal, Sony
- Dígitos, nVIDIA
Véase también
Notas
- 1 2 3 Sutherland, William Robert (1966). La especificación gráfica en línea de procedimientos informáticos (Tesis). Instituto Tecnológico de Massachusetts. hdl : 1721.1/13474?show = full .
- 1 2 3 4 5 "GRAIL Lenguaje de entrada gráfica" (PDF) .
- ↑ Valverde, Sergi; Sole, Ricard V. (11 de julio de 2003). "Mundos pequeños jerárquicos en la arquitectura de software". arXiv : cond-mat/0307278 .
- ↑ "Representación y análisis de software". CiteSeerX 10.1.1.394.4865 .
{{cite journal}}: Para citar una revista se requiere|journal=( ayuda ) - ↑ "La programación visual no es mala" .
- ↑ "Programación visual: por qué es una mala idea" . Octubre de 2018.
- ↑ "Fortalezas y debilidades de un lenguaje de programación visual en un contexto de aprendizaje con niños" (PDF) .
- ↑ "Programación visual: perspectivas desde la academia y la industria". 1997. doi : 10.1145/266399.266415 . S2CID 18983760 .
{{cite journal}}: Para citar una revista se requiere|journal=( ayuda ) - ↑ Blackwell, AF (1996). «Teorías metacognitivas de la programación visual: ¿qué creemos que estamos haciendo?». Actas del Simposio IEEE de 1996 sobre Lenguajes Visuales . págs. 240–246 . doi : 10.1109/VL.1996.545293 . ISBN 0-8186-7508-X. S2CID 36822160 .
- ↑ "Guía de referencia de Nuke" . learn.foundry.com . Consultado el 21 de diciembre de 2020 .
- ↑ "Guía de referencia de la katana" . learn.foundry.com . Consultado el 21 de diciembre de 2020 .
- ↑ "Guía de referencia de Mari" . learn.foundry.com . Consultado el 21 de diciembre de 2020 .
- ↑ "Nuke: Agrupación de nodos con el nodo de grupo" . learn.foundry.com . Consultado el 21 de diciembre de 2020 .
- ↑ "Katana: Agrupación de nodos" . learn.foundry.com . Consultado el 21 de diciembre de 2020 .
Referencias
- Métricas de cambios en la arquitectura de software basadas en la distancia estructural
- Representación y análisis de software
- "Gramáticas de grafos y resolución de restricciones para estilos de arquitectura de software". 1998: 69–72 . CiteSeerX 10.1.1.108.9362 .
{{cite journal}}: Para citar una revista se requiere|journal=( ayuda ) - Palsingh, Rishi; Vandana, Vandana (2014). "Aplicación de la teoría de grafos en informática e ingeniería". Revista Internacional de Aplicaciones Informáticas . 104 (1): 1– 4. Bibcode : 2014IJCA..104a..10P . CiteSeerX 10.1.1.800.2735 . doi : 10.5120/18165-9025 .
- Thorat, Sushrut; Choudhari, Varad (2016). "Implementación de un diccionario inverso, basado en definiciones de palabras, utilizando una arquitectura de gráfico de nodos" (PDF) . arXiv : 1606.00025 .
{{cite journal}}: Para citar una revista se requiere|journal=( ayuda ) - "Representación y análisis de software". CiteSeerX 10.1.1.394.4865 .
{{cite journal}}: Para citar una revista se requiere|journal=( ayuda ) - Historia de la programación visual: desde Basic hasta Bubble
- Software Scratch
- Software Blockly
- ¿Qué es la programación visual?
- Arquitectura de software