Der Miniplan (Mini-Ablaufplan):
ein neuartiges, einfaches Flussdiagramm / Struktogramm
Inhalt:
1 Kurzbeschreibung
2 Beispiel
3 Aufbau eines Miniplans:
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 Flußdiagramm und Struktogramm
4.3 Vorteile des Miniplans
5 Programm zur Ausgabe eines Miniplans
6 Dynamische Darstellung des Programmablaufs
7 Stilarten eines Miniplans
1 Kurzbeschreibung
Der Miniplan ist eine neue Art von Flußdiagramm für Algorithmen
der Strukturierten Programmierung [Prog. ohne GOTO]. Bei ihm sind
grafische Darstellung und Programmtext nebeneinander angeordnet.
Die lineare Anordnung der Programmzeilen bleibt erhalten.
Das Diagramm ist leicht erfaßbar, platzsparend und sehr
leicht automatisierbar. Zur Ausgabe auf Bildschirm oder Drucker
ist kein Grafikmodus nötig. Damit bietet der Miniplan viele
Vorteile gegenüber einem normalen Flußdiagramm oder Struktogramm.
Auch eine bewegte Darstellung des Programmablaufs ist möglich,
was besonders didaktisch interessant ist, sowie die Integration
von Zählern ins Diagramm.
2 Beispiel
Ein einfaches Beispiel zeigt alles Wesentliche eines Miniplans:
| 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:
Von einer 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):
je nach Inhalt von Feld 1 werden Feld 2 und Feld 3 des
gerade gelesenen Satzes manipuliert. Unten eine Laufanweisung
(FOR - NEXT): Die hinteren Felder des Satzes werden aufsummiert.
Man sieht sofort: Der Programmtext ist nicht in die grafische
Darstellung integriert (wie bei Flußdiagramm 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 Miniplans, 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 Miniplan 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.
3 Der Aufbau eines Miniplans
3-1 Zeichenvorrat
Zur Darstellung eines Miniplans auf einem Bildschirm oder Drucker
benötigt man keinen Grafikmodus, sondern nur eine Festbreiten-
schrift 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)
des Miniplans, wenn auch grafische Sonderzeichen verfügbar sind:
senkrechter Strich, waagrechter Strich, Ecken, Pfeil statt ->
(Beispiel am Ende von Abschnitt 3.3)
3.2 Baugruppen
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 - DO oder FOR)
| |
---
--- 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 grafische Baugruppe "Auswahl" zeigt nur die Programmlogik,
aber keine programmtechnischen Details: weder die Programmier-
sprache noch die verwendeten Befehle (IF, IF - ELSE, CASE) sind
daraus ersichtlich:
Eine grafische Baugruppe "Auswahl" mit 1 Pfeil ist als Programm-
text eine einfache IF - Anweisung, ohne ELSE. Oder ein 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 ebensoviel Ausgängen (ELSE mitgezählt, falls vorh).
Genauso zeigen die Schleifendarstellungen nur die Position des
Tests auf Verlassen der Schleife, aber nicht immer den Typ des
zugehörigen Programmbefehls: Eine Schleife mit Test am Anfang
kann eine Zähl- oder Bedingungsschleife oder eine Kombination von
beidem sein.
3.3 Zusammenfügen von Baugruppen
| |
| |
|---o |-->
| | |
| | |-->
|--- |
| v
| |
Grundlinie + Schleife Grundlinie + Auswahl
---o ---o
| | | |
| | | |-->
| |--- | |
| | | | |-->
| | | | |
| |---o | v
| | | |
| | | |
--- ---
Schleife + Schleife Schleife + Auswahl
Sich berührende Schleifen kann man mit sich berührenden Zahn-
rädern vergleichen: Die kleinen laufen schneller und öfter um.
|--> |-->
| |
| |
|--> |-->
| --- | |-->
| | | | |
| | | | |-->
| ---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 Bau-
gruppe überlappt die linke um 1 Zeichen, wobei aber Leerzeichen
(linke Ecken von Schleifen) überlappte Zeichen nicht verdecken.
Hier noch 3 kompliziertere Beispiele eines Miniplans:
Links ein Miniplan mit maximaler Tiefe von 5 Strukturen;
insgesamt enthält er 4 Schleifen und 3 Auswahlen. Die letzte
"Auswahl" mit nur 1 Pfeil ist de facto eine einfache IF-Anweisung.
In der Mitte das Beispiel vom Anfang dieses Artikels, ergänzt um
eine Schleife im ersten Zweig der Auswahl. Rechts derselbe
Plan in besserer Bildqualität (Grafik / grafischer Zeichensatz).
|
|
|
|
|---
| |
| |---
| | |
| | |
| |---o
| |
| |
| |
| |
| |---
| | |
| | |
| | |
| | |
| | |-->
| | |
| | | ---o
| | | | |
| | | | |
| | | | |-->
| | | | |
| | | | |-->
| | | | v
| | | ---
| | |
| | |-->
| | |
| | |
| | |
| | |
| | | |-->
| | | |
| | | v
| | v
| | |
| | |
| | |
| |---o
| |
| |
| |
|---o
|
|
|
|
|---o
| |
| |
| |-->
| | ---o
| | | |
| | | |
| | ---
| |-->
| |
| |-->
| |
| v
| |
| |---o
| | |
| | |
| |---
| |
|---
|
| | |
3.4 Zusätzliche Symbole
Ein Miniplan zeigt die Struktur eines Programms, der Quellcode
rechts daneben die Details. Es kann nützlich sein, Verbindungen
zu anderen Programmteilen (Unterprogramme, Dateien) hervorzu-
heben. Das kann man tun durch Symbole links neben der Miniplan-
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 den Miniplan nicht unübersichtlich zu machen.
Am Bildschirm sollten solche Symbole ausblendbar sein.
4 Bewertung
4.1 Optischer Vergleich von 3 Diagrammarten
Hier eine REPEAT - UNTIL Schleife als
Flußdiagramm, Struktogramm und Miniplan:
______________|
| |
| -----------
| | Anweisung | Flußdiagramm
^ -----------
| |
| _____|_____
|________/ Ende ? \
nein \___________/
|
ja v
_______________________
| | |
| | Anweisung | Struktogramm
| | |
| ---------------------|
| REPEAT UNTIL Ende |
-----------------------
___ REPEAT
| |
| | Anweisung Miniplan
| |
---o UNTIL Ende
Man sieht leicht:
- Der Miniplan ist optisch am einfachsten und somit am
schnellsten erfaßbar.
- Nur beim Miniplan steht der Programmtext außerhalb des
Diagramms, und seine lineare Anordnung bleibt erhalten.
Beim Flußdiagramm wurde das Sonderzeichen ^ verwendet, das nicht
in allen Zeichensätzen vorkommt. Das Sechseck um den Ausdruck
sollte eigentlich eine Raute sein, aber die läßt sich schlecht
mit den vorhandenen Zeichen darstellen. Unmöglich ist das 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 Flußdiagramm und Struktogramm
Der große Vorteil von Ablaufdiagrammen: sie schaffen Übersicht.
Das erleichtert den Programmentwurf, hilft Programmierfehler
vermeiden und verringert die Einarbeitungszeit in fremde oder
alte Programme.
Aber die bekannten Flußdiagramme und Struktogramme haben viele
Nachteile:
- Die lineare Folge der Programmbefehle wird zerrissen.
- Der grafische Aufwand ist hoch: Die vielen Linien und Kästchen
sind bei Handskizzen lästig. Sie verschlechtern auch die
optische Erfassbarkeit.
- Der Platzbedarf ist zu hoch: Denn 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 zur Darstellung), entsprechende
Programme deshalb selten. Handgemalte Diagramme aber sind
arbeitsaufwendig, fehleranfällig, änderungsfeindlich und
deshalb oft nicht auf dem neuesten Stand.
- Aus diesen Gründen ist eine gleichzeitige Anzeige von Diagramm
und Programmcode, z.B. bei der Programmerfassung, unmöglich.
Diese Nachteile bewirken, daß Diagramme auf den unteren Stufen
des Programmentwurfs meist nicht eingesetzt werden.
4.3 Die Vorteile des Miniplans
Ein Miniplan weist keinen der oben erwähnten Nachteile auf:
Die lineare Folge der Programmbefehle bleibt erhalten. (Hierin
gleicht der Miniplan den wenig bekannten Strukturierten Ablauf-
diagrammen 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 Flußdiagramm oder Struktogramm sprengt,
verbreitert er einen Miniplan nur um 4 Zeichen.
Deshalb ist die parallele Anzeige von Miniplan und Programmtext
auf einem Bildschirm oder DIN A5 - Blatt möglich.
Ein Miniplan ist leicht automatisch darstellbar: Denn das
Programm dafür ist kurz (siehe Kap. 5), und kein technischer
Aufwand (Grafikmodus) ist nötig. Der Miniplan selbst wird nicht
abgespeichert (wozu auch), sondern jedesmal neu aus dem
Programmtext erzeugt und ist somit garantiert immer aktuell.
Die sukzessive Darstellung eines Miniplans 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 Miniplans ist problemlos: Werden Programm-
zeilen gelöscht, so entfallen einfach die zugehörigen Diagramm-
teile in diesen Zeilen, der Miniplan 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 Programm-
rahmen entwerfen: Man gibt nur die Kontrollstrukturen und
Kommentare ein. Später werden die Kommentare durch echte
Anweisungen ergänzt oder ersetzt.
Es ist wirklich ein großer Vorteil für programmierende Experten
wie Laien, die Programmstruktur ständig vor Augen zu haben.
Meiner Ansicht nach ist nur der Miniplan voll praxistauglich.
Auch für die weiter unten beschriebene dynamische Darstellung
des Programmablaufs ist ein Miniplan besser geeignet als sein
direkter Konkurrent, das Struktogramm.
5 Programm zur Ausgabe eines Miniplans
Es liest ein Programm von einer Datei und gibt den Programmtext
und den zugehörigen Miniplan 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 muß in dieser Sprache geschrieben
sein (sonst muß der Algorithmus entsprechend angepaßt 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, daß das zu listende Programm syntaktisch richtig
ist, daß z.B. zu jedem REPEAT ein UNTIL existiert).
| PROGRAM Miniplan
| 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 (siehe Abschnitt 3.3).
| 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 Miniplan zeigt, genau wie andere Ablaufdiagramme, die Pro-
grammstruktur. 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 Programm-
ablauf bewegt darzustellen. Auch das ist im Miniplan 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 der restliche
Miniplan. In verschiedenen Farben
könnte man auch durchlaufene / nicht
durchlaufene Programmteile zeigen
Auch Zähler können eingebaut werden
|
Solche Darstellungen sind didaktisch wertvoll und auch zum Testen
von Programmen nützlich. Sie benötigen aber Software - Aufwand:
Einen Programminterpreter, der Einzelschritt (heute Standard)
oder Zeitlupe ermöglicht, den Miniplan ausgibt und entsprechend
dem Programmablauf farblich verändert, und ggf. Zähler anzeigt,
wozu er Statistiken führen muß. Gemessen am Gesamtaufwand eines
Interpreters wäre der Aufwand aber gering.
Doch ist eine solche dynamische Darstellung nur eine Zusatzoption,
die nicht den Blick dafür verstellen sollte, daß ein statischer
Miniplan sehr einfach, übersichtlich und leicht zu erstellen ist.
7 Verschiedene Stilarten eines Miniplans
Unten links ein Diagramm mit einer Auswahl und 3 Schleifen
(Ausgang am Anfang, Mitte, Ende). Daneben einige optisch leicht
verschiedene Diagramme, die aber per Definition dasselbe bedeuten.
|
|
|
|---o
| |
| |
| |
| |-->
| | ---
| | | |
| | ---o
| |-->
| |
| |-->
| |
| v
| |
| |
| |---
| | |
| | o
| | |
| |---
| |
| |
|---
|
|
|
|
|
|---o
| |
| |
| |
| |--
| | ---
| | | |
| | ---o
| |--
| |
| |--
| |
| +
| |
| |
| |---
| | |
| | o
| | |
| |---
| |
| |
|---
|
|
|
|
|
|---o
| |
| |
| |
| |--
| | ---
| | | |
| | ---o
| |--
| |
| |--
| |
| -
| |
| |
| |---
| | |
| | o
| | |
| |---
| |
| |
|---
|
|
|
|
|
|---o
| |
| |
| :
| :-->
| : ---
| : | |
| : ---o
| :-->
| :
| :-->
| :
| :
| |
| |
| |---
| | |
| | o
| | |
| |---
| |
| |
|---
|
|
|
|
|
|---o
| |
| |
| |
| |...
| | . ---
| | .| |
| | . ---o
| |...
| | .
| |...
| | .
| |...
| |
| |
| |---
| | |
| | o
| | |
| |---
| |
| |
|---
|
|
standard ohne Pfeilspitzenminimal Auswahl punktiertsystematisch
| | | | | | | | | |
Vor- und Nachteile der verschiedenen Lösungen:
standard: gute optische Unterscheidung von Schleife und Auswahl
ohne Pfeilspitzen: grafisch einfacher, schnell zu zeichnen,
manchmal übersichtlicher
minimal: benötigt nur die Zeichen - | o ,oder nur - | +
Auswahl punktiert: die Auswahl-Grundlinie ist punktiert
systematisch: alle Kontrollstrukturen (Schleife und Auswahl) sind als
Kästchen dargestellt (Auswahl punktiert): unübersichtlich
Die Benutzung der der hier beschriebenen Dinge ist frei.
Auch im Englischen gilt die Bezeichnung Miniplan (Aussprache leicht geändert)
Man könnte den Miniplan auch Terassendiagramm nennen: wenn man ihn um 90 Grad
nach links dreht (sinnvoll bei Schreibrichtung v.u.n.o.), ähnelt er Terassen.
Autor und Erfinder: Leonhard Heinzmann Homepage Stand: 2.8.04