MezData-Logo Lösungen Button :JAVA: Programme als Kochbücher

Betrachte ein Programm als Kochbuch, die Rezepte sind dann Funktionen oder Module.

Rezepte bestehen aus Anweisungen

Ein Rezept ist eine Folge von Anweisungen, von Arbeitsschritten.

Angenommen du hast ein Kochbuch, sitzt in der Wüste und bekommst Lust auf Nudelauflauf. Du schlägst das Rezept auf:

Rezept Nudelauflauf

Zutaten:

Tätigkeiten:

  1. Nudeln kochen
  2. Gemüse dünsten
  3. Nudeln und Gemüse in Auflaufform geben
  4. Fertigsoße darüber geben
  5. Käse darüber reiben
  6. Im Backofen backen

Was ist zu tun? Den nächsten Markt anlaufen:

Zutatenliste als Programm-Eingabe

In der Zutatenliste steht das, was man zum Kochen einkaufen muß. Auf dem Markt findest du Stände mit den Zutaten, aber wie kriegst Du die Zutaten transportiert?

Gefäße als Variablen

Die Händler verpacken die Waren in passende Gefäße und schreiben drauf was drin ist, nach dem Einkauf hast du:

Gefäße nennt man Variablen, die Aufschrift ist der Bezeichner, die Gefäßart der Typ und der Inhalt der Wert (z.B. 500g).

In einen Salzsteuer Nudeln packen und Marmelade draufschreiben kommt nicht so gut... ;-)
Die Variablen sollten passend zu dem Inhalt gewählt und beschriftet (deklariert) werden!

Kannst du nun kochen, mitten auf dem Markt, in dieser Umgebung?

Küche als Programmumgebung

Ohne Küche geht's nicht, ohne eine passende Umgebung macht das Rezept keinen Sinn. Du hast zwar die Zutaten (Eingabe) aber kannst sie nicht verarbeiten.
Wir befinden uns nun in einer Küche, da gibt es allerlei Kochgeschirr, Herd, Standartzutaten (Wasser, Öl, Salz, Energie usw.), nennt man auch Resourcen. In dieser Umgebung ist es nun möglich, die Anweisungen aus dem Kochbuch auszuführen.

Also frisch ans Werk: 1. Nudeln kochen. Entweder weis man wie es geht oder man muß nachschlagen. Unser Kochbuch ist für Anfänger daher gibt es ein Unter-Rezept "Nudeln Kochen":

Unter-Programme

Gekocht werden sollen die Nudeln, die wir auf dem Markt gekauft haben, das ist die Eingabe (nennt man hier Parameter) von "Nudeln kochen". Die Ausgabe ist ein Kochtopf mit den fertigen Nudeln. So ein Unter-Programm nennt man eine Funktion und könnte so beschrieben werden:

 Kochtopf Nudeln_kochen(Nudeln)

Nudeln kochen

Zutaten:

Tätigkeiten:

  1. Wasser in Kochtopf geben
  2. Öl zugeben
  3. Kochtopf erhitzen bis Wasser kocht
  4. Nudeln zugeben
  5. Bei geringerer Hitze so lange weiterkochen und manchmal mit Kochlöffel umrühren, bis Nudeln weich sind
  6. Wasser abschütten
  7. Fertig

Da gibt es ja weitere Zutaten wie Wasser, Salz und Öl, die sollte die Programmierumgebung schon selber beinhalten, sonst müssen wir diese Zutaten entweder auf dem Markt nachkaufen (eingeben) oder vom Nachbar borgen (importieren).

Tja, um die Nudeln zu kochen benötigen wir ein Gefäß, einen Kochtopf, eine passende Variable. In der Küche gibt es eine Methode den Kochtopf zu erhitzen. Wir brauchen ein Kochlöffel zum Umrühren (lokale Variable), eine Variable, die nur innerhalb des Unterprogramms benötigt wird nennt man lokale Variable. Nach dem Ende der Anweisungsfolge haben wir einen Topf mit gekochten Nudeln, das ist die Rückgabe des Unter-Programms "Nudeln kochen". Das Unter-Programm hat aber noch eine andere Auswirkung (Seiteneffekt) auf die Küche (Umgebung), es wurde Wasser, Salz, Öl und Energie verbraucht, der Kochlöffel ist aufgeräumt (freigegeben), es gibt Abwasser, ein Kochtopf mit Nudeln steht rum...

Weiter im Hauptprogramm, 2. "Gemüse dünsten" das ist für Anfänger wieder ein Unterprogrammaufruf:

Kochtopf Gemuese_duensten(Gemuese)

Gemüse dünsten

Zutaten:

Tätigkeiten:

  1. Wasser in Kochtopf geben
  2. Gemüse zugeben
  3. Kochtopf erhitzen bis Wasser kocht
  4. Bei geringerer Hitze solange weiterkochen und manchmal mit Kochlöffel umrühren, bis Gemüse gar ist
  5. Wasser abschütten
  6. Fertig

In diesem Unterprogramm gibt es auch einen Kochtopf und einen Kochlöffel, aber es sind nicht die selben wie bei "Nudeln Kochen"!

Nebenbei könnten "Nudeln kochen" und "Gemüse dünsten" gleichzeitig (paralell) erfolgen (Multithreading), dazu bräuchte man allerdings ein Koch mit entsprechenden Fähigkeiten... ;-)

Weiter im Hauptprogramm, 3. "Nudeln und Gemüse in Auflaufform geben"

Auflaufform = Nudeltopf + Gemüsetopf;

Hier brauchen wir wieder ein neue Variable "Auflaufform", dafür könnten wir den Nudeltopf und den Gemüsetopf freigeben, wichtig war nur der Inhalt (Wert).

Wichtig: Schritt 3 des Hauptprogramms kann erst ausgeführt werden nachdem Schritt 1 und 2 ein Ergebnis geliefert haben!

{ ... }

Irgendwann ist das Essen fertig, wir können das Kochbuch zuschlagen, die Küche mit der Ausgabe Nudelauflauf verlassen...

Literatur: LEU Handreichung "Strukturierte Programmentwicklung" H-01/32