Nassi-Shneiderman-Diagramm
![]() |
DIN 66261 |
---|---|
Bereich | Programmierung |
Titel | Informationsverarbeitung; Sinnbilder für Struktogramme nach Nassi-Shneiderman |
Kurzbeschreibung: | Struktogramme |
Letzte Ausgabe | 1985-11 |
ISO |
Ein Nassi-Shneiderman-Diagramm ist ein Diagrammtyp zur Darstellung von Programmentwürfen im Rahmen der Methode der strukturierten Programmierung. Es wurde 1972/73 von Isaac Nassi und Ben Shneiderman entwickelt und ist in der DIN 66261 genormt. Da Nassi-Shneiderman-Diagramme Programmstrukturen darstellen, werden sie auch als Struktogramme bezeichnet.
Die Methode zerlegt das Gesamtproblem, das man mit dem gewünschten Algorithmus lösen will, in immer kleinere Teilprobleme – bis schließlich nur noch elementare Grundstrukturen wie Sequenzen und Kontrollstrukturen zur Lösung des Problems übrig bleiben. Diese können dann durch ein Nassi-Shneiderman-Diagramm oder einen Programmablaufplan (PAP) visualisiert werden. Die Vorgehensweise entspricht der sogenannten Top-down-Programmierung, in der zunächst ein Gesamtkonzept entwickelt wird, das dann durch eine Verfeinerung der Strukturen des Gesamtkonzeptes aufgelöst wird.
Böhm und Jacopini hatten 1966 nachgewiesen, dass sich jeder beliebige Algorithmus ohne unbedingte Sprunganweisung (GOTO) formulieren lässt. Für Nassi-Shneiderman-Diagramme lassen sich trivial die Kontrollstrukturen moderner Programmiersprachen finden; für Programmablaufpläne kann dies wesentlich schwieriger sein.
Inhaltsverzeichnis
Sinnbilder nach Nassi-Shneiderman[Bearbeiten | Quelltext bearbeiten]
Die meisten der nachfolgenden Strukturblöcke[1] können ineinander geschachtelt werden. Das aus den unterschiedlichen Strukturblöcken zusammengesetzte Struktogramm ist im Ganzen rechteckig, also genauso breit wie sein breitester Strukturblock.
Process Symbol[Bearbeiten | Quelltext bearbeiten]
Jede Anweisung wird in einen rechteckigen Strukturblock geschrieben. Die Strukturblöcke werden nacheinander von oben nach unten durchlaufen. Leere Strukturblöcke sind nur in Verzweigungen zulässig. Alternative Begriffe: Folge, Linearer Ablauf, Sequenz. |
Decision Symbol[Bearbeiten | Quelltext bearbeiten]
Alternative Begriffe: Verzweigung, Alternative, Selektion.
1 möglicher Block[Bearbeiten | Quelltext bearbeiten]
Nur wenn die Bedingung zutreffend (wahr) ist, wird der Anweisungsblock 1 durchlaufen ( Alternative Begriffe: Bedingte Verarbeitung, Einfache Auswahl/Selektion, Einfache Verzweigung. |
2 mögliche Blöcke[Bearbeiten | Quelltext bearbeiten]
Wenn die Bedingung zutreffend (wahr) ist, wird der Anweisungsblock 1 durchlaufen; trifft die Bedingung nicht zu (falsch), wird der Anweisungsblock 2 durchlaufen ( Alternative Begriffe: Einfache Alternative, Zweifache Auswahl, Alternative Verzweigung/Verarbeitung. |
Beispiel für Verschachtelung[Bearbeiten | Quelltext bearbeiten]
Es folgt eine weitere Bedingung. Die Verschachtelung ist ebenso im Nein-Fall noch möglich. |
Case-Statement[Bearbeiten | Quelltext bearbeiten]
Schleifen[Bearbeiten | Quelltext bearbeiten]
Iteration Symbol[Bearbeiten | Quelltext bearbeiten]
Wiederholungsstruktur, bei der die Anzahl der Durchläufe festgelegt ist ( Alternative Begriffe: Zählergesteuerte Schleife. |
Begin-End Symbol[Bearbeiten | Quelltext bearbeiten]
![]() |
Hier handelt es sich um Schleifen, wie man sie in PL/I und ALGOL findet. Sie zeichnen sich durch zwei Bedingungen aus. Alternative Begriffe: Wiederholung mit Bedingungsprüfung, prüfende Schleife. |
Sonderfall: End=true[Bearbeiten | Quelltext bearbeiten]
Wiederholungsstruktur mit vorausgehender Bedingungsprüfung ( Alternative Begriffe: Wiederholung mit vorausgehender Bedingungsprüfung, Abweisende/vorprüfende/kopfgesteuerte Schleife. |
Sonderfall: Begin=true[Bearbeiten | Quelltext bearbeiten]
Wiederholungsstruktur mit nachfolgender Bedingungsprüfung für den Abbruch ( Alternative Begriffe: Wiederholung mit nachfolgender Bedingungsprüfung, Nicht abweisende/nachprüfende/fußgesteuerte Schleife. |
Sonderfall: Begin=End=true[Bearbeiten | Quelltext bearbeiten]
Wiederholungsstruktur, die allenfalls durch eine Abbruchanweisung ( Alternative Begriffe: Wiederholung ohne Bedingungsprüfung, Endlosschleife. |
Break[Bearbeiten | Quelltext bearbeiten]
Der Aussprung ( Alternative Begriffe: Abbruchanweisung, Aussprung. |
Blockaufruf[Bearbeiten | Quelltext bearbeiten]
Symbol für den Aufruf eines Unterprogramms bzw. einer Prozedur, Funktion oder Methode. Nach deren Durchlauf wird zu der aufrufenden Stelle zurückgesprungen und der nächstfolgende Strukturblock durchlaufen. Dieses Symbol ist nicht genormt. |
Parallel-Processing Symbol[Bearbeiten | Quelltext bearbeiten]
![]() |
Symbol für den nebenläufigen Ablauf von mehreren Blöcken. |
Füllregeln[Bearbeiten | Quelltext bearbeiten]
Allgemeingültigkeit[Bearbeiten | Quelltext bearbeiten]
Struktogramme sollten keine programmiersprachenspezifische Befehlssyntax enthalten. Sie müssen so programmiersprachenunabhängig formuliert werden, dass die dargestellte Logik einfach zu verstehen und als Codiervorschrift in jede beliebige Programmiersprache umzusetzen ist.
Deklaration[Bearbeiten | Quelltext bearbeiten]
Weil sie ursprünglich für prozedurale Programmiersprachen entwickelt wurden, bildete man in Struktogrammen nur die Prozedur und keine Deklarationsbereiche von Variablen und Konstanten ab (einfaches Struktogramm). Dadurch ist jedoch nicht sofort deutlich, welcher Datentyp einer Variablen zugeordnet werden muss. Die Deklaration von Variablen und Konstanten ist im ersten Anweisungsblock vorzunehmen. Diese Nassi-Shneiderman-Diagramme bezeichnet man dann als erweiterte Struktogramme.
Exklusivität[Bearbeiten | Quelltext bearbeiten]
Jede Anweisung erhält einen eigenen Strukturblock (Sinnbilder nach DIN 66261). Selbst mehrere Anweisungen gleicher oder ähnlicher Art dürfen nicht in einem Strukturblock zusammengefasst werden.
Jede Anweisung muss mindestens aus einer Zuweisung bestehen (beispielsweise Zielvariable ← Zielvariable * AndereVariable). Eine Zuweisung wird durch einen nach links gerichteten Pfeil dargestellt. Ältere Struktogramme benutzen alternativ aus alten Pascal-Zeiten als Zuweisungszeichen den Doppelpunkt gefolgt vom Gleichheitszeichen (Zielvariable := Zielvariable * AndereVariable). Das Ziel einer Anweisung steht immer links vom Zuweisungszeichen. Rechts davon steht die Quelle.
Über jedes Struktogramm gehört ein Name, um die Identifikation durch Ereignis- oder (Unter-)Programmaufrufe gewährleisten zu können.
Praxisrelevanz[Bearbeiten | Quelltext bearbeiten]
In der Softwareentwicklung werden Nassi-Shneiderman-Diagramme heute selten eingesetzt. Dort werden vorrangig erweiterte Programmablaufpläne (Aktivitätsdiagramme der UML) verwendet.
Im Informatik-Unterricht der Sekundarstufe II werden Struktogramme verwendet, damit Schüler den Aufbau logischer Abläufe, die für die Programmierung nötig sind, trainieren können. Die Erstellung von Struktogrammen aufgrund von Beschreibungen betrieblicher Problemstellungen, die wegen wiederkehrender gleicher Vorgehensweise automatisiert werden können, ist immer noch Bestandteil vieler schulischer Abschlussprüfungen.
In der Entwicklungsumgebung EasyCODE wird direkt anhand von Nassi-Shneiderman-Diagrammen der Programmfluss festgelegt.
Nassi-Shneiderman-Diagramme können auch in technischer Dokumentation eingesetzt werden.[2]
Beispieldiagramme[Bearbeiten | Quelltext bearbeiten]
Einfaches Struktogramm[Bearbeiten | Quelltext bearbeiten]
Das folgende Beispiel zeigt den Ablauf des euklidischen Algorithmus zur Berechnung des größten gemeinsamen Teilers zweier Zahlen.
als Nassi-Shneiderman-Diagramm … | … und in Python: |
---|---|
def GGT(a, b):
while a > 0 and b > 0:
if a > b:
a -= b
else:
b -= a
if b == 0:
return a
else:
return b
|
Erweitertes Struktogramm[Bearbeiten | Quelltext bearbeiten]
als Nassi-Shneiderman-Diagramm …
… und die Umsetzung in VBA:
Option Explicit
Private Sub btnZensur_Click()
Dim intZensur As Integer, strZensur As String
intZensur = InputBox("Geben Sie die Zensur als Zahl ein.")
Select Case intZensur
Case 1: strZensur = "sehr gut"
Case 2: strZensur = "gut"
Case 3: strZensur = "befriedigend"
Case 4: strZensur = "ausreichend"
Case 5: strZensur = "mangelhaft"
Case 6: strZensur = "ungenügend"
Case Else: strZensur = "ungültig"
End Select
MsgBox "Ihre eingegebene Zensur in Worten: " & strZensur
End Sub
Software[Bearbeiten | Quelltext bearbeiten]
- Struktogrammeditor – Struktogramme online erstellen und ablaufen lassen.
- Nassi-Shneiderman-Diagramm Word Vorlage – Vorlage mit Macros und Symbolleiste für MS-Word, Freeware.
- Struktogramme.dot - MS Word-Vorlage, Freeware.
- struktex – LaTeX-Paket zum Erzeugen von Nassi-Shneiderman-Diagrammen.
- nassflow – LaTeX-Paket zum Erzeugen von Nassi-Shneiderman-Diagrammen.
- PyNassi – Struktogramme für Python, die Freeware kann aus den Struktogrammen Python-Quelltext generieren. Siehe auch Ingo Linkweiler: PyNassi.
- Structorizer – Nassi-Shneiderman Diagramm-Editor für Linux, Mac OS X & Microsoft Windows (GPL).
- Vips – Visual Programming with Structograms – visueller Editor für Struktogramme für Windows und Linux, Freeware.
- Struktogrammeditor – einfacher grafischer Struktogrammeditor mit Drag & Drop Funktion (Java erforderlich, Freeware).
- Code::Blocks: quelloffene Entwicklungsumgebung für C, C++, D und Fortran; mit NassiShneiderman plugin um Struktogramme zu erstellen.
- struktor: a Nassi–Shneiderman diagram editor and executor in Java – quelloffenes Java-Applet um Struktogramme zu bearbeiten. Siehe auch Kim Neunert: learn2prog – Struktogramme zeichnen und ablaufen lassen.
- Nessi – quelloffener Editor für Nassi–Shneiderman-Diagrammen (in Java).
- NSD-Editor – quelloffener Editor in Borland Delphi; kann Nassi–Shneiderman-Diagramme aus Quellcode in C und Pascal generieren. Siehe auch: University of Fribourg (Switzerland) – Department of Informatics: NSD-Editor Nassi-Shneiderman Diagram-Editor: Student project of Marcel Kalt.
- EasyCODE – Nassi–Shneiderman-Entwicklungsumgebung, die mehrere Programmiersprachen unterstützt (C#, C++, C, Java, Cobol).
- Atego's BlueRiverX32 – Nassi–Shneiderman-Entwicklungsumgebung für C und C++.
- Moritz – quelloffenes „Addon“ für Doxygen, dass Nassi–Shneiderman-Diagramme für Funktionen in C/C++ generieren kann.
- StruktED – freier Struktogramm-Editor von Michael Bellinghausen.
Siehe auch[Bearbeiten | Quelltext bearbeiten]
Weblinks[Bearbeiten | Quelltext bearbeiten]
- Literatur zum Nassi-Shneiderman-Diagramm im Katalog der Deutschen Nationalbibliothek
- DIN 66261: Sinnbilder für Struktogramme nach Nassi-Shneiderman. FH Bielefeld. Archiviert vom Original am 28. September 2007. Abgerufen am 2. Juni 2016.
Belege[Bearbeiten | Quelltext bearbeiten]
- ↑ Nassi, I.; Shneiderman, B.: Flowchart Techniques for Structured Programming. SIGPLAN Notices XII. August 1973. Abgerufen am 3. Juni 2016.
- ↑ Weiss, Edmond H.: Visualizing a Procedure with Nassi-Schneiderman Charts. Journal of Technical Writing and Communication, Vol. 20, Nr. 3 (1990): 237–254.