Jackson-Diagramm
# Jackson-Diagramm

Das Jackson-Diagramm ist eine Methode zum strukturierten Entwurf von Computerprogrammen. Es ist Bestandteil einer Methode, die der Theoretiker Michael A. Jackson (* 1936) in den Jahren 1975 bis 1979 entwickelt hat.

## Aufbau und Elemente

Das Jackson-Diagramm stellt den Programmentwurf in hierarchischer Form dar, ähnlich einem Organigramm. Das Gesamtprogramm wird in schrittweiser Verfeinerung bis zu den Einzelfunktionen heruntergebrochen. Die Komponenten des Diagramms sind einfache Rechtecke, die durch Pfeile verbunden sind.

Es gibt nur drei Typen von Rechtecken:

* Ein Rechteck ohne weitere Markierung kennzeichnet einen einfachen Funktionsblock, der einmal durchgeführt wird.
* Ein Rechteck mit einem Stern (*) in der rechten oberen Ecke kennzeichnet eine Funktion, die wiederholt durchlaufen wird.
* Ein Rechteck mit einem Kreis (o) in der rechten oberen Ecke kennzeichnet eine von mehreren Alternativen.

Der Programmablauf ergibt sich durch die Position der Rechtecke:

* Rechtecke, die einem anderen Rechteck untergeordnet sind, stellen eine verfeinerte Beschreibung des Funktionsblocks im übergeordneten Rechteck dar.
* Rechtecke, die in einer Reihe nebeneinander stehen und nicht mit einem Kreis gekennzeichnet sind, stellen Funktionsblöcke dar, die nacheinander ausgeführt werden.
* Rechtecke, die in einer Reihe nebeneinander stehen und mit einem Kreis gekennzeichnet sind, stellen Alternativen dar, von denen abhängig von der gegebenen Situation nur eine in Frage kommt.

Jackson sah vor, dass auch die Daten, die ein Programm verarbeitet, in dieser Weise dargestellt werden, so dass eine Beziehung zwischen Datenstrukturen und Programmablauf sichtbar wird und der Programmablauf optimal an die Datenstruktur angepasst ist.

## Beispiel

In einem Datenbestand sind Kunden und ihre Aufträge abgespeichert. Jeder Kunde kann mehrere Aufträge vergeben haben. Jeder Auftrag besteht zum einen aus einem Auftragskopf, in dem allgemeine Angaben zum Auftrag abgespeichert sind, zum Beispiel der vorgesehene Liefertermin und ein Boolescher Wert, ob der Auftrag schon geliefert wurde. Zum anderen gehören zu jedem Auftrag mehrere Auftragspositionen, in denen Art, Menge und Preis der zu liefernden Waren gespeichert sind.

Zu jedem Auftrag, bei dem der Liefertermin erreicht oder überschritten ist, soll

* eine Rechnung geschrieben werden, wenn die Ware geliefert wurde
* ein Entschuldigungsbrief geschrieben werden, wenn die Ware noch nicht geliefert wurde.

Zum Schreiben einer Rechnung sind die Daten aus den Auftragspositionen nötig. Für das Entschuldigungsschreiben seien die Daten aus dem Kundensatz und dem Auftragskopf ausreichend.

In dieser Situation stellt folgendes Jackson-Diagramm die Datenstruktur und den Programmablauf dar:

Es gibt ein weiteres viertes Rechteck, welches mit einem Minus gekennzeichnet ist, den technical body. Dieser wird in der Regel benötigt, wenn man sich die einzige richtige performanteste Programm Struktur erarbeiten will. Hierzu werden die Daten wie oben beschrieben zwei Mal abgebildet. Einmal wie die Daten gelesen werden oder das zweite Mal wie die Daten schlussendlich aus gegeben werden sollen.

Hat man die beiden Datenstrukturen definiert werden diese zunächst einander gegenübergestellt und schlussendlich nach einem einfachen Prinzip zusammengeführt. Hierbei werden die entsprechenden Hierarchiestufen vereint. Übrig bleibt die Programmstruktur. Es gibt nur eine korrekte (effizienteste) Prozessstruktur. Wichtig dabei ist, dass auch die Sortierreihenfolge der Daten innerhalb der Input- und Outputstruktur abgebildet werden muss. In der Regel gibt es pro Iteration (siehe Rechtecke mit Stern im Diagramm) einen sogenannten Gruppenbruch. Jeder Gruppenbruch besteht aus einem Initialisierungsteil und einem Abschlussteil. Dazwischen liegt die entsprechende Verarbeitung. Ein Jackson-Diagramm wird immer von oben nach unten und dann von links nach rechts gelesen. Um diese Reihenfolge einhalten zu können, wird manchmal ein technical body benötigt.

## Bewertung

Zur Darstellung des Programmablaufs ist das Jackson-Diagramm funktionell äquivalent zum Nassi-Shneiderman-Diagramm. Das Nassi-Shneiderman-Diagramm wächst mit der Verfeinerung nach innen, das Jackson-Diagramm wächst nach unten und außen. Es ist lediglich eine Geschmacksfrage, welche der beiden Methoden man bevorzugt.

Im Sinne der theoretischen Informatik sind Jackson-Diagramme Turing-vollständig, so dass man jedes berechenbare Problem damit abbilden kann.

Beide Methoden hatten ihre Blütezeit in den 1980er-Jahren, als die strukturierte prozedurale Programmierung die Technik der Wahl war. Mit dem Aufkommen objektorientierter Programmiersprachen wie Java und C++ seit den 1990er Jahren verloren beide Methoden an Bedeutung, weil sie die erweiterten Möglichkeiten, die diese Sprachen bieten, nicht adäquat abbilden können.

In Bezug auf die Darstellung von Datenstrukturen war die Jackson-Methode schon kurz nach ihrer Entstehung veraltet, weil sie die relationalen Datenbanken, die sich in den 1980er Jahren durchsetzten, nicht abbilden konnte. Andere Betrachtungsweisen, insbesondere das Entity-Relationship-Modell, setzten sich hier rasch gegen die Jackson-Methode durch.

