Un diagrama de Nassi-Shneiderman (NSD) en programación informática es una representación gráfica de diseño para programación estructurada . [1] Este tipo de diagrama fue desarrollado en 1972 por Isaac Nassi y Ben Shneiderman , ambos estudiantes de posgrado en la Universidad de Stony Brook . [2] Estos diagramas también se denominan estructogramas , [3] ya que muestran las estructuras de un programa.
Siguiendo un diseño de arriba hacia abajo , el problema en cuestión se reduce a subproblemas cada vez más pequeños, hasta que solo quedan enunciados simples y construcciones de flujo de control . Los diagramas de Nassi-Shneiderman reflejan esta descomposición de arriba hacia abajo de una manera sencilla, utilizando cajas anidadas para representar subproblemas. En consonancia con la filosofía de la programación estructurada, los diagramas de Nassi-Shneiderman no tienen representación para una instrucción GOTO .
Los diagramas de Nassi-Shneiderman se utilizan muy pocas veces en la programación formal. Su nivel de abstracción es cercano al del código de un programa estructurado y las modificaciones requieren volver a dibujar todo el diagrama, pero los editores gráficos eliminaron esa limitación. Estos diagramas aclaran los algoritmos y los diseños de alto nivel, lo que los hace útiles en la enseñanza. Se incluyeron en Microsoft Visio y en docenas de otras herramientas de software, como el alemán EasyCODE. [4]
En Alemania, los diagramas de Nassi-Shneiderman se estandarizaron en 1985 como DIN 66261. [5] Todavía se utilizan en las introducciones alemanas a la programación, por ejemplo, la introducción a C de Böttcher y Kneißl, [6] la introducción a C de Baeumle-Courth y Schmidt [7] y la introducción a C# de Kirch. [8]
Los diagramas de Nassi-Shneiderman también se pueden utilizar en la redacción técnica . [9]
Bloques de proceso: el bloque de proceso representa el paso más simple y no requiere análisis. Cuando se encuentra un bloque de proceso, se realiza la acción dentro del bloque y se pasa al siguiente bloque.
Bloques de ramificación: existen dos tipos de bloques de ramificación. El primero es el bloque de ramificación simple Verdadero/Falso o Sí/No, que ofrece al programa dos caminos a seguir dependiendo de si se ha cumplido o no una condición. Estos bloques se pueden utilizar como un procedimiento de bucle que impide que el programa continúe hasta que se cumpla una condición.
El segundo tipo de bloque de ramificación es un bloque de ramificación múltiple. Este bloque se utiliza cuando se necesita un caso de selección en un programa. El bloque suele contener una pregunta o un caso de selección. El bloque proporciona al programa una serie de opciones y suele utilizarse junto con bloques de subprocesos para ahorrar espacio.
Bucles de prueba: este bloque permite que el programa ejecute en bucle uno o varios procesos hasta que se cumpla una condición determinada. Los bloques de proceso cubiertos por cada bucle son subconjuntos con una barra lateral que se extiende desde la condición.
Existen dos tipos principales de bucles de prueba: los bloques de prueba primero y de prueba último. La única diferencia entre ambos es el orden en el que se completan los pasos involucrados. En la situación de prueba primero, cuando el programa encuentra el bloque, prueba si se cumple la condición y, si no es así, completa los bloques de proceso y luego vuelve al bucle anterior. La prueba se realiza nuevamente y, si la condición aún no se cumple, se procesa nuevamente. Si en cualquier etapa se cumple la condición, el programa omite los bloques de proceso y continúa con el siguiente bloque.
El último bloque de prueba simplemente se invierte, los bloques de proceso se completan antes de que se realice la prueba. El último bucle de prueba permite que los bloques de proceso se realicen al menos una vez antes de la primera prueba.
La ejecución paralela se puede dibujar así: