Schichtenmodell der Normierten Programmierung:

DIN 66220 vom Sockel stoßen?

13.10.1978

BRAUNSCHWEIG (hö) - Normierte und Strukturierte Programmierung, Michael-Jackson-Methode und Top-Down-Design sind nicht länger nur Schlagworte: Lebhaft beteiligen sich jetzt auch Anwender an der Diskussion über moderne Programmierungs-Techniken. Dr. Klaus Riemer, Koordinator für Methoden und Verfahren beim Volkswagenwerk (Wolfsburg), beschreibt ein weiteres Hilfsmittel: Das Schichtenmodell der Normierten Programmierung. Riemer hat bereits als "Verfasser an der DIN-Norm 66220 mitgearbeitet. In der nächsten CW-Ausgabe erläutert er am Beispiel von Ablaufdiagrammen den Programmablauf des Schichtenmodells.

Die Strukturierte Programmierung hat viele Anhänger gefunden, weil sie eine gewisse Disziplin im Programmablauf fördert. Bei sinngemäßer Anwendung entstehen modulare Bausteine mit rein linearer Anweisungsfolge, die einzeln für sich leicht zu verstehen sind. Fehlersuche, Programmpflege und Einarbeitung anderer Mitarbeiter werden dadurch leichter. Beim Entwurf einer Programmlogik ist die Einhaltung der Regeln der Strukturierten Programmierung jedoch zuerst einmal beschwerlich, da sie ja nur Verbote enthalten und keine Wegweiser zu inhaltlichen Lösungsschritten für eine bestimmte -Aufgabenstellung.

Die statische Gliederung eines Aufgabengebietes in eine Hierarchie von Funktionen (Top-Down-Design), aus welcher Anweisungsfolgen zur Erfüllung dieser Funktionen abzuleiten wären, ist ebenso nützlich und ebenso vage. Auch hier fehlt die Angabe, aus welchen Funktionen sich denn nun eine gegebene Aufgabenstellung Zusammengesetzt. In vielen Fällen läßt sich die Programmstruktur jedoch aus der Datenstruktur herleiten, wie dies etwa Michael Jackson empfiehlt. Für Datenstrukturen gelten die gleichen Basiskonstrukte wie für die Strukturierte Programmierung: Sequenz, Alternative, Iteration. Datenstrukturen können vom Zugriffsweg abhängen, wie die Konstruktion logischer Datenbanken zeigt.

Die klassische Normierte Programmierung

Der Leser mag sich fragen, was diese Ausführungen mit der Normierten Programmierung zu tun haben. Dieser historisch gewordene Programmablauf für die Verarbeitung von Dateien nach Satzgruppen (DIN 66220) taugt doch nur für den Mischprozeß sortierter Dateien im Stapelbetrieb vergangener Zeiten - meinen viele. Er verlangt "wilde" Sprünge und Schaltertechniken, bei denen einem modernen Programmierer das Grausen kommt.

Ist dies wirklich so? Die Grundidee entspricht jedenfalls haargenau der Forderung von Michael Jackson, die Programmstruktur an der Datenstruktur auszurichten: Die Sätze gleich strukturierter Eingabedateien werden zu einer gemeinsamen Struktur zusammengefaßt (= gemischt) und nach Satzgruppen rangweise verarbeitet, umrahmt jeweils von Gruppenanfangs- und Gruppenende-Verarbeitung. Was ist falsch an diesem Konzept? Nun - die Form der Verwirklichung ist vielleicht unmodern geworden. In der Strukturierten Programmierung folgen die Anweisungen linear aufeinander oder sind in Bedingungen und Schleifen verschachtelt.

Man könnte zwar die in DIN 66220 vorgesehenen Abfragen auf ersten Durchlauf und vor Programmschluß durch geeignete Schaltervariable (wie Read-switches) lösen und so formal den Regeln der Strukturierten Programmierung anpassen. Die Norm schreibt die Programmiertechnik ja ausdrücklich nicht vor. Es gibt jedoch einen eleganteren Weg: Man verlegt die erste Ausführung von Eingabe und Satzauswahl in den Vorlauf, wodurch die anschließende Schleife mit der Gruppenanfangsverarbeitung der höchsten Rangstufe beginnen muß und der Programmabschluß ganz natürlich an das Ende der Anweisungsfolge gerät.

Das Schichtenmodell

Diese kosmetische Operation ist so einfach, daß man sich unwillkürlich fragt, warum DIN 66220 hoch nicht entsprechend geändert wurde. Doch die Sache hat einen Haken. Betrachtet man die Datenstrukturen der Dateien in der Praxis, so kommt es häufig vor, daß nicht alle beteiligten Eingaben die volle Hierarchie der Satzgruppenränge aufweisen. Bei einem Gruppierwort aus Bezirk/ Kunde/Artikel weist zum Beispiel eine Datei mit Kundenanschriften keine Artikel auf. Hier hilft sich ein Programmierer im Ablauf nach DIN 66220 durch eine Pseudo-Artikelnummer, deren Verarbeitung er allerdings an allen möglichen Stellen peinlichst unterdrücken muß.

Ohne diese Vergewaltigung kommt man aus, wenn man die Eingabe solcher Dateien im niedrigsten der Ränge plaziert, zu dem eine Datei wirklich Sätze beitragen kann. Ein solcher Programmablauf wird als Schichtenmodell bezeichnet. Nach der Eingabe aller Dateien eines Ranges ist auch die Satzauswahl pro Rang erforderlich, wobei das Ergebnis der Satzauswahl der nächst niedrigen Rangstufe wie eine Datei dieses höheren Ranges einzusetzen ist (über das dateineutrale Gruppierwort, das um das letzte Gruppierelement verkürzt wird).

Können Sie sich vorstellen, daß eine solch allgemeine und verbale Beschreibung des Schichtenmodells geeignet ist, die so präzise und detaillierte Beschreibung in DIN 66220 vom Sockel zu stoßen? Welcher Programmierer, welches Softwarehaus mit eigenen Programmgeneratoren setzt mit diesen Angaben das Schichtenmodell am nächsten Vormittag in die Praxis um?

Das Schichtenmodell krankt in allen Diskussionen daran, daß es bisher noch nicht konkret genug dargestellt wurde. Konkret heißt hier: Nicht nur an einem einfachen Beispiel mit drei Dateien und drei Gruppenrängen, sondern allgemeingültig wie in DIN 66220 und ebenso präzise und detailliert bis zu einzeln codierbaren Anweisungsfolgen. Plötzlich erscheint das Modell zur Vereinfachung der Programmstruktur selbst so kompliziert, daß man vor seiner Darstellung zurückschreckt. Wirklich?

Probleme in Cobol

Nach der sprachunabhängigen grafischen Darstellung nun eine Bemerkung zur Codierung. Cobol ist mit rund 63 Prozent die mit einsamem Abstand meist, benutzte Programmiersprache für Programme, die über Rechenzentrumspersonal abgewickelt werden. Diese Zahlen von 1977 bedeutet sogar ein Anwachsen gegenüber 1972 um 4 Prozent (zu Lasten des Assembler. Die Zahlen stammen von A. S. Philippakis: A Popularity Contest for Languages, Datamation 12/1977). Es wäre also töricht, Strukturierte Programmierung ohne Cobol einführen zu wollen. Nun ist jedoch bekannt, daß Cobol nicht die besten Voraussetzungen für eine Anwendung der Strukturierten Programmierung bietet. Mit PERFORM läßt sich zwar eine DO UNTIL Schleife verwirklichen, für DO UNTIL fehlt jedoch eine eigene Anweisung.

Es ist deshalb gut zu wissen, daß man in dem hier dargestellten Programmablauf alle DO UNTIL Schleifen durch, DO WHILE = PERFORM ersetzen kann. Dies hat lediglich zur Folge, daß das erste Durchlaufen der eingeschlossenen Anweisungen ebenfalls geprüft wird, obwohl das - positive - Ergebnis ja schon feststeht. Außer diesem unnötigen Abfrageaufwand entsteht kein Schaden, weshalb zum Beispiel die niederländische Delegation eine solche Lösung (allerdings nur für den einfachen Fall einer einzigen Datei) im entsprechenden ISO-Gremium als Normvorschlag durchsetzen konnte (neben der DO UNTIL Form).

Über Normierte Programmierung in Strukturierter Programmierung oder gleich als Schichtenmodell wird in den Gremien des DIN und der ISO bereits beraten. Der Verfasser ist daran beteiligt. Es ist jedoch nur ein kleiner Gewinn formaler Eleganz, der hierdurch gegenüber der heutigen DIN 66220 erzielt werden kann und der erst ins Gewicht fällt, wenn auch die Ausfüllung der problemspezifischen Programmbausteine durch die Strukturierte Programmierung die gleiche Klarheit im Ablauf erreicht. Der eigentliche Vorteil dieses Programmablaufs liegt nach wie vor im Grundkonzept der Normierten Programmierung das eine ausgereifte Lösung für die noch immer häufige Aufgabenstellung der Verarbeitung von, Dateien nach Satzgruppen anbietet. Die in Sätzen organisierte Wiederholung von Schlüsselbegriffen in einer monotonen Hierarchie ergibt eben eine typische, ja die typische Datenstruktur nach Michael Jackson.