Een programmastructuur-diagram (soms geschreven als: Programma Structuur Diagram), afgekort tot PSD, is een schematechniek ter voorbereiding op het programmeren van software. Een programmastructuur-diagram wordt ook wel een Nassi-Shneiderman-diagram genoemd.
Het PSD ontstond in 1972 en werd voor het eerst beschreven in 1973 door Isaac Nassi en Ben Shneiderman[1][2]. Een PSD is een schema dat de samenhang — de structuur — van instructies binnen een programma weergeeft. PSD’s bestaan uit:
Rechthoeken
Driehoeken
Tekst
Deze elementen worden benut ter voorbereiding op het coderen in een programmeertaal. Ze zijn programmeertaalonafhankelijk. Bovendien gelden er geen strenge taalregels; de probleemoplossing staat centraal. Voor het creëren en bewerken van programmastructuur-diagrammen bestaan zowel open-source programma's als commerciële producten.
Algoritme
We spreken in dit verband wel van een algoritme: een set regels in een bepaalde volgorde om een probleem op te lossen.
De algoritme om van een probleem tot een programma te komen, ziet er als volgt uit:
Bij PSD’s zijn er slechts drie basisstructuren. Als deze op de juiste manier worden gecombineerd, kan hiermee elk willekeurig computerprogramma worden beschreven. De basisstructuren zijn:
SCHRIJF(“De samenvoeging van de twee ingaven van de gebruiker is: “ & Var3)
“LEES”: gebruiker krijgt een vraag/opdracht, het resultaat is een variabele opgeslagen in het geheugen.
“SCHRIJF”: zet iets op het scherm van de gebruiker.
“Variabele”: geheugenplaats.
“=” is de toekenningsoperator of het toekenningsteken.
Iteratie
Iteratie of herhaling staat voor de mogelijkheid om via bijvoorbeeld een while-lus een aantal bewerkingen te herhalen tot aan de voorwaarde voor de lus niet meer voldaan wordt en het programma dus verdergaat.
Selectie
Selectie-structuren worden ook wel aangeduid met de term keuze. Bij de behandeling van deze structuren, moet een keuze gemaakt worden welke weg het programma uitgaat (keuze tussen verschillende bewerkingen of handelingen)
Ondersteuning
Verschillende softwareprogramma's bieden ondersteuning voor Nassi-Shneiderman-diagrammen:
STRUCTORIZER is een open-source programma in Java dat specifiek voor het maken en bewerken van Nassi-Shneiderman-diagrammen dient.[3]
Code::Blocks is een open-source IDE voor C en C++ die dankzij een plug-in Nassi-Shneiderman-diagrammen kan genereren uit programmacode.[4]
struktor is een open source Java-applet waarmee men structogrammen kan bewerken en uitvoeren.[5][6]
Nessi is een open source editor voor Nassi-Shneiderman-diagrammen in Java.[7]
Moritz is een open-source uitbreiding voor Doxygen die Nassi–Shneiderman-diagramman kan genereren uit functies in C of C++.[8]
Struktogramme.dot is een gratis template voor Microsoft Word waarmee men structogrammen kan maken en bewerken.[9]
Nassi-Shneiderman-Diagramm (Word Vorlage): een template voor Microsoft Word voor Nassi-Shneiderman-diagrammen.[10]
struktex is een LaTeX-pakket voor Nassi-Shneiderman-diagrammen.[11]
nassflow is een LaTeX-pakket voor Nassi-Shneiderman-diagrammen.[12]
PyNassi is een open source editor en debugger voor Nassi-Shneiderman-diagrammen in Python 2.3.[13][14]
Struktogrammeditor is een gratis editor voor structogrammen in Java.[15]
NSD-Editor is een open-source programma in Borland Delphi waarmee men Nassi-Shneiderman-diagrammen kan tekenen en dat hieruit programmacode in C en Pascal kan genereren.[16]
StruktoGraaf is een commerciële editor voor structogrammen.[17]
SmartDraw is een programma om allerlei soorten diagrammen te tekenen.[18]
EasyCODE is een commerciële programmeeromgeving voor o.a. C/C++, Java en COBOL waarin men ook Nassi-Shneiderman-diagrammen kan aanmaken[19]
Atego X32 is een commerciële programmeeromgeving voor o.a. C/C++, C#, Java en Pascal waarin men ook Nassi-Shneiderman-diagrammen (Duits: "Struktogramme") kan aanmaken.[20]
Edraw Flowchart is een editor voor allerlei soorten diagrammen, waaronder ook Nassi-Shneiderman-diagrammen.[21]
Gebruik
In Duitsland werden Nassi–Shneiderman-diagrammen in 1985 gestandaardiseerd als DIN 66261.[22] De diagrammen worden nog steeds gebruikt in Duitse introducties tot softwareontwikkeling, bijvoorbeeld de introductie in C van Böttcher en Kneißl[23], introductie in C van Baeumle-Courth en Schmidt[24] en de inleiding tot C# van Kirch[25].
↑(de) Böttcher, Axel; Kneißl, Franz: Informatik für Ingenieure: Grundlagen und Programmierung in C. 3de uitgave. München: Oldenbourg, 2012. ISBN 978-3-486-70527-0. Zie vooral hoofdstuk 10: "Kontrollstrukturen" (control flow).
↑(de) Baeumle-Courth, Peter; Schmidt, Torsten: Praktische Einführung in C. München: Oldenbourg, 2012. ISBN 978-3-486-70799-1. Zie vooral hoofdstuk 6: "Kontrollstrukturen" (control flow).
↑(de) Kirch, Ulla: C# lernen und professionell anwenden. Heidelberg: mitp, 2009. ISBN 978-3-8266-5915-7. Zie vooral hoofdstuk 5: "Schleifen und Verzweigungen" (lussen en vertakkingen).
↑(en) Weiss, Edmond H.: "Visualizing a Procedure with Nassi-Schneiderman Charts", Journal of Technical Writing and Communication, Vol. 20, Nr. 3 (1990): 237-54, DOI:10.2190/0UVT-TWMK-LN59-U.