# Programmastructuur-diagram

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. 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:
* Probleemstelling
* Analyse
* Schematische oplossing
* Het schrijven van de broncode
* Compileren

## Basisstructuren

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:

### Sequentie

Bij de opeenvolging of sequentie volgen alle stappen van het algoritme elkaar een voor een op.
* --Titel--
* Var1=LEES(“De gebruiker moet iets invullen”)
* Var2=LEES(“De gebruiker moet iets invullen”)
* Var3=Var1 & Var2
* 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.
* Code::Blocks is een open-source IDE voor C en C++ die dankzij een plug-in Nassi-Shneiderman-diagrammen kan genereren uit programmacode.
* struktor is een open source Java-applet waarmee men structogrammen kan bewerken en uitvoeren.
* Nessi is een open source editor voor Nassi-Shneiderman-diagrammen in Java.
* Moritz is een open-source uitbreiding voor Doxygen die Nassi–Shneiderman-diagramman kan genereren uit functies in C of C++.
* Struktogramme.dot is een gratis template voor Microsoft Word waarmee men structogrammen kan maken en bewerken.
* Nassi-Shneiderman-Diagramm (Word Vorlage): een template voor Microsoft Word voor Nassi-Shneiderman-diagrammen.
* struktex is een LaTeX-pakket voor Nassi-Shneiderman-diagrammen.
* nassflow is een LaTeX-pakket voor Nassi-Shneiderman-diagrammen.
* PyNassi is een open source editor en debugger voor Nassi-Shneiderman-diagrammen in Python 2.3.
* Struktogrammeditor is een gratis editor voor structogrammen in Java.
* 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.
* StruktoGraaf is een commerciële editor voor structogrammen.
* SmartDraw is een programma om allerlei soorten diagrammen te tekenen.
* EasyCODE is een commerciële programmeeromgeving voor o.a. C/C++, Java en COBOL waarin men ook Nassi-Shneiderman-diagrammen kan aanmaken
* 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.
* Edraw Flowchart is een editor voor allerlei soorten diagrammen, waaronder ook Nassi-Shneiderman-diagrammen.

## Gebruik

In Duitsland werden Nassi–Shneiderman-diagrammen in 1985 gestandaardiseerd als DIN 66261. De diagrammen worden nog steeds gebruikt in Duitse introducties tot softwareontwikkeling, bijvoorbeeld de introductie in C van Böttcher en Kneißl, introductie in C van Baeumle-Courth en Schmidt en de inleiding tot C# van Kirch.
Nassi–Shneiderman-diagrammen kunnen ook in technische documentatie gebruikt worden.