Un diagrama de Nassi-Shneiderman (NSD) en programación de computadoras es una representación de diseño gráfico 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 Stony Brook . [2] Estos diagramas también se denominan estructuragramas , [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 sólo quedan declaraciones simples y construcciones de flujo de control . Los diagramas de Nassi-Shneiderman reflejan esta descomposición de arriba hacia abajo de manera sencilla, utilizando cuadros anidados para representar subproblemas. De acuerdo con la filosofía de la programación estructurada, los diagramas de Nassi-Sneiderman no tienen representación para una declaración GOTO .
Los diagramas de Nassi-Sneiderman rara vez se utilizan para programación formal. Su nivel de abstracción se acerca al código de programa estructurado y las modificaciones requieren volver a dibujar todo el diagrama, pero los editores gráficos eliminaron esa limitación. Aclaran algoritmos y diseños de alto nivel, lo que los hace útiles en la enseñanza. Estaban incluidos 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 de Böttcher y Kneißl a C, [6] la introducción de Baeumle-Courth y Schmidt a C [7 ] y la introducción de Kirch a C#. [8]
Los diagramas de Nassi-Sneiderman también se pueden utilizar en 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 pasamos al siguiente bloque.
Bloques de ramificación: existen dos tipos de bloques de ramificación. El primero es el bloque de bifurcació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 bifurcación es un bloque de bifurcación múltiple. Este bloque se utiliza cuando se necesita un caso seleccionado en un programa. El bloque suele contener una pregunta o un caso seleccionado. El bloque proporciona al programa una variedad de opciones y, a menudo, se usa junto con bloques de subprocesos para ahorrar espacio.
Bucles de prueba: este bloque permite que el programa realice un bucle en uno o un conjunto de procesos hasta que se cumpla una condición particular. Los bloques de proceso cubiertos por cada bucle están subconjuntos con una barra lateral que se extiende desde la condición.
Hay dos tipos principales de bucles de prueba: el primer bloque de prueba y el último bloque de prueba. La única diferencia entre los dos es el orden en que se completan los pasos involucrados. En la primera situación de prueba, cuando el programa encuentra el bloque, prueba para ver si se cumple la condición, luego, si no, completa los bloques de proceso y luego retrocede. Se vuelve a realizar la prueba y, si aún no se cumple la condición, se vuelve a procesar. Si en algún momento se cumple la condición, el programa se salta los bloques del proceso y continúa con el siguiente bloque.
El último bloque de la prueba simplemente se invierte y los bloques del proceso se completan antes de realizar la prueba. El último ciclo 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í: