Betrachte ein Programm als Kochbuch, die Rezepte sind dann Funktionen oder Module.
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:
Was ist zu tun? Den nächsten Markt anlaufen:
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?
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?
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":
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:
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:
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