Das Stufendiagramm (Stufen-Ablaufplan)
Ein neuartiges, einfaches Flussdiagramm / Struktogramm
Inhalt: 1 Kurzbeschreibung 2 Beispiel 3 Aufbau eines Stufendiagramms: 3.1 Zeichenvorrat 3.2 Baugruppen 3.3 Zusammenfügen von Baugruppen 3.4 Zusätzliche Symbole 4 Bewertung: 4.1 Optischer Vergleich von 3 Diagrammarten 4.2 Nachteile von Flussdiagramm und Struktogramm 4.3 Vorteile des Stufendiagramms 5 Programm zur Ausgabe eines Stufendiagramms 6 Dynamische Darstellung des Programmablaufs 7 Stilarten eines Stufendiagramms
Ein Stufendiagramm ist eine neue Art von Flussdiagramm für Algorithmen
der Strukturierten Programmierung [Programme ohne GOTO-Befehle]. Bei ihm sind
grafische Darstellung und Programmtext nebeneinander angeordnet.
Deshalb wird der Programmtext nicht zerstückelt.
Das Diagramm ist leicht erfaßbar, platzsparend und sehr
leicht automatisierbar. Denn es wird aus ASCII-Zeichen zusammengesetzt,
deshalb ist kein Grafikprogramm nötig. Damit bietet ein Stufen-diagramm viele
Vorteile gegenüber einem üblichen Flussdiagramm oder Struktogramm.
Auch eine bewegte Darstellung des Programmablaufs im Stufendiagramm ist möglich,
was didaktisch günstig ist.
Ein einfaches Beispiel zeigt alle Elemente eines Stufendiagramms:
Das Hauptprogramm (senkrechte Linie ganz links) enthält eine Schleife;
(großes Rechteck), die selbst einen Verteiler (Pfeile) und eine innere Schleife
(kleines Rechteck) enthält. Der Programmablauf im Diagramm ist von oben nach unten
am rechten Rand entlang, in Schleifen im Uhrzeigersinn:
| PROGRAM Beispiel | Datei öffnen .. | |---o WHILE NOT EOF | | Satz (8 Felder) von Datei lesen .. | | summe=0 | | | | CASE feld(1) | |--> IS 1: | | feld(2)=0 | | feld(3)=0 | |--> IS 2: | | feld(2)=1 | |--> IS 3: | | feld(3)=1 | v ENDCASE | | | | | |---o FOR i=4 TO 8 | | | 'Felder summieren: | | | summe=summe + feld(i) | |--- NEXT i | | | | PRINT summe |--- WEND | | END
Obiges Beispielprogramm (teilweise in Pseudocode) tut Folgendes:
Zuerst wird eine Datei geöffnet.
Von dieser Datei werden in einer Schleife (WHILE - WEND) Sätze
gelesen und gedruckt. Diese äußere Schleife enthält 2 weitere
Kontrollstrukturen: Oben einen Verteiler (CASE - ENDCASE),
der je nach Inhalt von Feld 1 die Felder 2 und 3 des gerade
gelesenen Satzes manipuliert. Unten eine weitere Schleife
(FOR - NEXT), welche die hinteren Felder des Satzes aufsummiert.
Man sieht sofort: Der Programmtext ist nicht in die grafische
Darstellung integriert (wie bei Flussdiagramm und Struktogramm),
sondern steht rechts daneben: Jeder Programmzeile entspricht die
links davon stehende Diagrammzeile.
Die senkrechte Linie ganz links symbolisiert die oberste
Programmebene. Rechts an sie angefügt ist ein hohes schmales
Rechteck: Es symbolisiert die äußere Schleife. Sie enthält 2
weitere Kontrollstrukturen: Das kleine Rechteck symbolisiert die
innere Schleife, die Pfeile den Verteiler.
Geht man vom linken Rand des Diagramms, der Grundlinie, nach
rechts und zählt die überquerten Kontrollstrukturen (Schleife /
Auswahl), so erhält man die Tiefenschachtelung der Programmzeile.
Man kann den Programmablauf als Weg im Stufendiagramm nachvollziehen:
Man beginnt oben und geht nach unten. In einer Schleife bewegt
man sich im Uhrzeigersinn, nur an einem Kringel kann man zwischen
erneutem Durchlauf oder Verlassen der Schleife wählen. Bei einer
Auswahl werden v.o.n.u. alle Bedingungen (= Pfeile) geprüft.
Ist eine Bedingung erfüllt, wird das folgende Progammstück (bis zum
nächsten Pfeil) abgearbeitet, dann wird nach unten zum Ende des Verteilers gesprungen.
Das ganze Geschehen (außer dem Rücksprung in Schleifen) spielt sich also am rechten Rand des Stufendiagramms ab.
(Siehe Kapitel 6 "Dynamische Darstellung des Programmablaufs")
3 Der Aufbau eines Stufendiagramms
Zur Darstellung des Stufendiagramms auf einem Bildschirm oder Drucker benötigt man keinen Grafik-modus, sondern nur eine Schrift (optimal eine Festbreitenschrift) mit folgenden 6 Standard-Zeichen:
Leerzeichen | senkrechter Strich - Minuszeichen o Kleinbuchstabe "o" v Kleinbuchstabe "v" > "größer"-Zeichen
Man erzielt aber eine höhere Bildqualität (durchgehende Linien),
wenn auch grafische Sonderzeichen verfügbar sind wie
senkrechter Strich, waagrechter Strich, Ecken, Pfeil statt ->
(siehe Beispiel ganz rechts am Ende von Abschnitt 3.3)
Es gibt 3 Arten von Baugruppen: Grundlinie, Schleife, Auswahl.
Sie alle werden senkrecht gedehnt auf die Länge des zugehörigen
Programms bzw. Programmteils. Schleifen und Auswahlen gibt es in
mehreren Variationen:
| | Grundlinie des Programms oder Unterprogramms | ---o | | Schleife mit Test auf Verlassen am Anfang | | (Typ WHILE - WEND oder FOR - NEXT) | | --- --- Schleife mit Test auf Verlassen "mittendrin" | | (Typ DO -LOOP, Verlassen durch EXIT | o Anweisung; EXIT mehrfach möglich, | | auch in den anderen Schleifentypen) --- --- | | Schleife mit Test auf Verlassen am Ende | | (Typ REPEAT - UNTIL) | | ---o |--> | Auswahl Folge von Programmstücken (mindestens 1, | hier 3), von denen maximal 1 durchlaufen |--> wird. Jeder Pfeil markiert den Beginn | eines zur Wahl stehenden Programmstücks, |--> das v das Ende der Auswahl | v
Die Schleifendarstellungen zeigen nur die Position des Tests auf
Verlassen der Schleife, aber nicht den Typ des zugehörigen Programmbefehls:
Eine Schleife mit Test am Anfang kann eine Zähl- oder Bedingungsschleife
oder eine Kombination von beiden sein.
Auch die grafische Baugruppe "Auswahl" zeigt nur die Programmlogik,
aber nicht den Typ des zugehörigen Programmbefehls:
- Eine grafische Baugruppe "Auswahl" mit 1 Pfeil kann realisiert werden durch eine einfache IF - Anweisung (ohne ELSE), oder durch einen Verteiler mit nur einem Ausgang (ohne ELSE) - Eine Auswahl mit 2 Pfeilen ist als Programmtext eine zweiseitige IF - ELSE Anweisung oder ein Verteiler mit 2 Ausgängen (2 "normale", oder 1 "normaler" Ausgang und 1 ELSE - Ausgang) - Eine Auswahl mit 3 oder mehr Ausgängen ist als Programmtext ein Verteiler mit ebensovielen Ausgängen (ELSE mitgezählt, falls vorhanden)
3.3 Zusammenfügen von Baugruppen
| | | | |---o |--> | | | | | |--> |--- | | v | | Grundlinie + Schleife Grundlinie + Auswahl ---o ---o | | | | | | | |--> | |--- | | | | | | |--> | | | | | | |---o | v | | | | | | | | --- --- Schleife + Schleife Schleife + Auswahl
Benachbarte Schleifen kann man mit sich berührenden großen und kleinen Zahnrädern vergleichen: Schleifen weiter rechts drehen sich öfter, wie kleinere Zahnräder.
|--> |--> | | | | |--> |--> | --- | |--> | | | | | | | | | |--> | ---o | v | | |--> |--> v v Auswahl + Schleife Auswahl + Auswahl
Die Darstellungen von Schleife und Auswahl sind 5 Zeichen breit
(Auswahl-Pfeilen folgt rechts 1 Leerzeichen).
Jede Baugruppe überlappt die linke um 1 Zeichen.
Hier folgen noch 3 kompliziertere Beispiele eines Stufendiagramms: - Links: Stufendiagramm mit maximaler Tiefe von 5 Strukturen. Insgesamt enthält es 4 Schleifen und 3 Auswahlen. Die letzte "Auswahl" mit nur 1 Pfeil ist de facto eine einfache IF-Anweisung. - Mitte: Das Beispiel vom Artikelanfang, ergänzt um eine Schleife im ersten Zweig des Verteilers - Rechts: Dasselbe Diagramm in besserer Bildqualität (Grafik oder grafischer Zeichensatz)
| | |--- | | | |--- | | | | | | | |---o | | | | | | | | | |--- | | | | | | | | | | | | | | |--> | | | | | | ---o | | | | | | | | | | | | | | |--> | | | | | | | | | |--> | | | | v | | | --- | | | | | |--> | | | | | | | | | | | | | | | |--> | | | | | | | v | | v | | | | | | | | | | |---o | | | | | | |---o | | |
Ein Stufendiagramm zeigt die Struktur eines Programms, der Quellcode rechts daneben die Details. Es kann nützlich sein, zur besseren Übersicht größere Details (Unterprogrammaufruf, Dateizugriff) auch im Diagramm hervorzuheben. Das ist möglich durch Symbole links neben der Grundlinie:
| F | F markiert eine FILE-Operation | C | C markiert eine COMMON-Anweisung | + | + markiert einen UNTERPROGRAMM-Aufruf | |---o | | trotz nachgeordneter Kontrollstruktur: + | | Symbole liegen links der Grundlinie, |--- dann sind sie leicht zu finden |
Wenn man solche Symbole verwendet, ist eine weise Beschränkung nötig, um das Stufendiagramm
nicht unübersichtlich zu machen. Am Bildschirm sollten solche Symbole ausblendbar sein.
4.1 Optischer Vergleich von 3 Diagrammarten
Hier eine REPEAT - UNTIL Schleife als Flussdiagramm, Struktogramm und Stufendiagramm:
______________| | | | ----------- | | Anweisung | Flussdiagramm ^ ----------- | | | ___|___ |__________/ Ende? \ nein \_______/ | ja v _______________________ | | | | | Anweisung | Struktogramm | | | | ---------------------| | REPEAT UNTIL Ende | ----------------------- ___ REPEAT | | | | Anweisung Stufendiagramm | | ---o UNTIL Ende
Man sieht leicht: - Das Stufendiagramm ist optisch am einfachsten und somit am schnellsten erfassbar. - Nur beim Stufendiagramm ist der Programmtext außerhalb des Diagramms und nicht zerstückelt.
Das Sechseck im Flussdiagramm sollte eigentlich eine Raute sein, aber die lässt sich nicht
mit ASCII-Zeichen darstellen. Unmöglich ist das auch bei den langen Schräglinien der (hier nicht gezeigten)
IF- und CASE-Symbole eines Struktogramms, deren Neigungswinkel flach und variabel sind.
4.2 Nachteile von Flussdiagramm und Struktogramm
Der große Vorteil von Ablaufdiagrammen ist: Sie schaffen Übersicht.
Das erleichtert den Programm-entwurf, hilft Programmierfehler vermeiden
und verringert die Einarbeitungszeit in fremde oder alte Programme.
Aber die bekannten Flussdiagramme und Struktogramme haben viele Nachteile:
- Der Programmtext wird zerrissen
- Der grafische Aufwand ist hoch. Deshalb werden größere Diagramme unübersichtlich.
- Der Platzbedarf ist zu hoch: Die Diagramme werden schon bei einfachen Programmen sehr breit.
Deshalb werden die Kästchen für die Anweisungen zu schmal.
- Eine automatische Erstellung der Diagramme ist aufwendig (Programmlogik; Grafikmodus nötig).
Entsprechende Programme sind deshalb selten. Handgemalte Diagramme aber sind arbeits-
aufwendig, fehleranfällig, änderungsfeindlich und deshalb oft nicht auf dem neuesten Stand.
- Aus diesen Gründen ist eine gleichzeitige Anzeige von Diagramm und Programmcode unmöglich.
Diese Nachteile bewirken, dass Diagramme auf den unteren Stufen
des Programmentwurfs meist nicht eingesetzt werden.
4.3 Die Vorteile des Stufendiagramms
Ein Stufendiagramm weist keinen der oben erwähnten Nachteile auf:
Die lineare Folge der Programmbefehle bleibt erhalten. (Hierin
gleicht das Stufendiagramm den wenig bekannten Strukturierten Ablaufdiagrammen
von Schmitz und Hackstein [Zeitschrift ONLINE 10/1975],
denen er auch sonst etwas ähnelt).
Der grafische Aufwand ist gering: Das Beipiel am Anfang kann
in 8 Sekunden von Hand gezeichnet werden (Striche durchgezogen).
Die optische Erfaßbarkeit ist gut.
Der Platzbedarf ist gering: Während z.B. ein Verteiler mit 8 Ausgängen
ein Flussdiagramm oder Struktogramm sprengt, verbreitert er ein Stufendiagramm nur um 4 Zeichen.
Deshalb ist die parallele Anzeige von Stufendiagramm und Programmtext
nebeneinander auf einem Bildschirm oder DIN A5 - Blatt möglich.
Ein Stufendiagramm ist leicht automatisch darstellbar: Denn das
Programm dafür ist kurz (siehe Kap. 5), und kein technischer
Aufwand (Grafikmodus) ist nötig. Der Stufendiagramm selbst wird nicht
abgespeichert (wozu auch), sondern jedesmal neu aus dem
Programmtext erzeugt und ist somit garantiert immer aktuell.
Die sukzessive Darstellung eines Stufendiagramms parallel zur
Programmerfassung auf dem Bildschirm ist problemlos: Der
Textcursor steht zu Beginn der Programmeingabe etwa in Spalte 10.
Sobald eine Programmzeile eingetippt ist, wird links davon in
derselben Zeile die zugehörige "Grafik" ausgegeben. Enthielt die
Programmzeile Anfang (oder Ende) einer Kontrollstruktur, so steht
der Textcursor in der nächsten Zeile anfangs 4 Spalten weiter
rechts (oder links) als der Textanfang der Zeile darüber.
Auch das Ändern eines Stufendiagramms ist problemlos: Werden Programmzeilen gelöscht,
so entfallen einfach die zugehörigen Diagrammzeilen, das Stufendiagramm wird vertikal verkürzt.
Werden Programmzeilen hinzugefügt, so wird quasi das Diagramm
an dieser Stelle waagrecht aufgetrennt und ergänzt.
Weil Ändern problemlos ist, braucht man anfangs nur den Programmrahmen entwerfen:
Man gibt nur die Kontrollstrukturen und Kommentare ein. Später werden die
Kommentare durch echte Anweisungen ergänzt oder ersetzt.
Es ist beim Programmieren sehr vorteilhaft, die Programmstruktur ständig vor Augen zu haben.
Meiner Ansicht nach ist nur das Stufendiagramm voll praxistauglich.
Auch für die weiter unten beschriebene dynamische Darstellung
des Programmablaufs ist ein Stufendiagramm besser geeignet als ein Flussdiagramm
(Struktogramme sind hierfür völlig ungeeignet).
5 Programm zur Ausgabe eines Stufendiagramms
Es liest ein Programm von einer Datei und gibt den Programmtext
und das dazugehörige Stufendiagramm nebeneinander aus.
Das Programm ist in der Sprache des Anfangsbeispiels geschrieben.
(Die 3 Kommentare sind noch durch echte Anweisungen zu ersetzen).
Auch das zu listende Programm muss in dieser Sprache geschrieben
sein (sonst muss der Algorithmus entsprechend angepasst werden,
was aber meist einfach ist). In ihr beginnt und endet jede
Kontrollstruktur mit einem eigenen Schlüsselwort. Und in einer
Programmzeile beginnt oder endet höchstens 1 Kontrollstruktur.
Deshalb ist der Analyse-Algorithmus besonders einfach.(Es wird
unterstellt, dass das zu listende Programm syntaktisch richtig ist,
dass z.B. zu jedem REPEAT ein UNTIL existiert).
| PROGRAM Stufendiagramm | STRING Wort1 | GLOBAL INT k, STRING Graf(20), Grafzeile, Programmzeile | k = 0 | 'öffne Datei, die den Programmtext enthält | |---o WHILE NOT EOF | | 'lies Programmzeile von Datei | | 'Wort1 = erstes Wort dieser Zeile | | | | CASE Wort1 | |--> IS "WHILE", "FOR": | | k = k + 1 | | Graf(k) = " ---o"; Zeile_aus | | Graf(k) = "| |" | |--> IS "REPEAT", "DO": | | k = k + 1 | | Graf(k) = " --- "; Zeile_aus | | Graf(k) = "| |" | |--> IS "EXIT": | | Graf(k) = "| o"; Zeile_aus | | Graf(k) = "| |" | |--> IS "WEND", "NEXT", "LOOP": | | Graf(k) = " --- "; Zeile_aus | | k = k - 1 | |--> IS "UNTIL": | | Graf(k) = " ---o"; Zeile_aus | | k = k - 1 | |--> IS "CASE", "IF": | | k = k + 1 | | Graf(k) = "| "; Zeile_aus | |--> IS "IS", "THEN", "ELSE": | | Graf(k) = "|--> "; Zeile_aus | | Graf(k) = "| " | |--> IS "ENDCASE", "ENDIF": | | Graf(k) = "v "; Zeile_aus | | k = k - 1; | |--> ELSE: Zeile_aus | v ENDCASE | | |--- WEND | END
Das Unterprogramm "Zeile_aus" gibt eine Zeile aus: Zunächst linksbündig den Diagrammteil der Zeile, dann 8 Leerzeichen, dann den Programmtext dieser Zeile:
| SUB Zeile_aus | | Grafzeile_zusammensetzen | PRINT Grafzeile;" ";Programmzeile | | END SUB
Die Variable k gibt für die auszugebende Programmzeile die Anzahl der Kontrollstrukturen an. Deren grafische Darstellungen werden im String-Feld "Graf" gespeichert. Diese Grafikteile fügt das Unterprogramm "Grafzeile_zusammensetzen" zum String "Grafzeile" zusammen. Dabei überlappt jeder Grafikteil den linken um 1 Zeichen; aber ein Leerzeichen bleibt "durchsichtig", es verdeckt das darunterliegende Zeichen nicht.
| SUB Grafzeile_zusammensetzen | STRING Hilf '5 Zeichen lang | | Grafzeile = "|" | |---o FOR i = 1 TO k | | Hilf = Graf(i) | | | | IF Left$(Hilf) = " " | |--> THEN | | Grafzeile = Grafzeile + RIGHT$(Hilf,4) | |--> ELSE | | L = LEN(Grafzeile) - 1 | | Grafzeile = LEFT$(Grafzeile,L) + Hilf | v ENDIF | | |--- NEXT i | END SUB
6 Dynamische Darstellung des Programmablaufs
Ein Stufendiagramm zeigt, genau wie andere Ablaufdiagramme, die Programmstruktur.
Doch in dieser Struktur sind an Wegen und Werten verschiedene Programmläufe möglich.
Oft wäre es interessant, durchlaufene Programmteile hervorzuheben,
oder gar den Programmablauf bewegt darzustellen. Auch das ist im Stufendiagramm möglich:
Der Programmablauf kann durch einen roten Punkt dargestellt werden, der sich durch das Diagramm bewegt - in Zeitlupe oder schrittweise Die gerade aktiven Kontrollstrukturen könnten farblich anders (hier blau) dargestellt werden als das restliche Stufendiagramm. Auch durchlaufene / nicht durchlaufene Programmteile könnte man in verschiedenen Farben darstellen Auch Zähler können eingebaut werden |
7 Verschiedene Stilarten eines Stufendiagramms
Unten links ein Diagramm mit einer Auswahl und 3 Schleifen (mit Ausgang am Anfang, Mitte, Ende). Daneben einige optisch leicht verschiedene Diagramme, die aber per Definition dasselbe bedeuten.
| | | |---o | | | | | | | |--> | | --- | | | | | | ---o | |--> | | | |--> | | | v | | | | | |--- | | | | | o | | | | |--- | | | | |--- | | |
Standard Auswahl punktiert ohne Pfeilspitzen systematisch Vor- und Nachteile der verschiedenen Stilarten: Standard: gute optische Unterscheidung von Schleife und Auswahl Auswahl punktiert: die Auswahl-Grundlinie ist punktiert ohne Pfeilspitzen: grafisch einfacher, übersichtlicher, minimal systematisch: alle Kontrollstrukturen (Schleife und Auswahl) sind als Kästchen dargestellt (Auswahl punktiert): unübersichtlich
Man könnte ein Stufendiagramm auch als Landkarte auffassen:
Die durchgezogenen Linien sind ein Straßennetz (oder Schienennetz).
Die Verteiler sind ein Straßenstück mit Abzweigungen in Sackgassen.
Die Sequenzen von Programmbefehlen zur eigentlichen Datenverarbeitung
(keine Kontrollstrukturen) sind Fabriken. Die Variablen sind Kisten
(ihr Inhalt Variablenwerte), die in die Fabriken geliefert, bearbeitet
und wieder wegtranportiert werden.
Ein Stufendiagramm unterliegt keinen Patentrechten. Seine Benutzung ist frei.
Man könnte ein Stufendiagramm auch "Terassendiagramm" nennen, denn wenn man es um 90 Grad
nach links dreht (sinnvoll bei Schreibrichtung v.u.n.o.), ähnelt es Terassen mit Gebäuden und Pflanzen.
(Früher habe ich den Namen "Miniplan" verwendet).
Autor und Erfinder: Leonhard Heinzmann Homepage Stand: 6. 2. 2023