Unterprogramm
"Willst du wahre Übersicht, spar' an Prozeduren nicht." Bei
größeren Scratchprogrammen verliert man sehr schnell die Übersicht.
Deshalb haben sich in der Programmentwicklung zwei Ansätze
herausgebildet: Top-Down und Bottom-Up. Bei Top-Down beginnt man mit
einem Überblick über das zu erstellende Programm und teilt dies in
kleinere Module auf. Jedes Modul wird wiederum weiter analysiert oder
ggf. wieder in kleinere Module aufgeteilt, bis eine komplette,
detaillierte Spezifikation vorliegt. Bei der Top-Down-Methode liegt der
Schwerpunkt auf Planung und Verständnis
des Systems. Code kann erst
geschrieben werden, wenn das System detailliert genug geplant ist.
Bei Bottom-Up fängt man mit einzelnen Programmbestandteilen an, die
eventuell bereits vorhanden sind oder noch geschrieben werden müssen.
Aus den einzelnen Bestandteilen werden größere Module zusammengesetzt,
bis das vollständige System erstellt ist. Bei der Bottom-Up-Methode kann
man im Gegensatz zur Top-Down-Methoden schnell mit der Programmierung
beginnen; sie beinhaltet aber auch das Risiko, dass das Programm nicht
richtig durchdacht und übersichtlich ist. In der modernen
Softwaretechnik werden meist beide Designtechniken kombiniert angewandt.
Unterprogramme werden oftmals dort eingesetzt, wobei den bestimmte Verarbeitungsverfahren (V aus EVA) mehrfach benötigt werden. In Scratch werden Unterprogramme als neue Blöcke definiert. Dabei können vom aufrufenden Programm Variablen übergeben werden. Eine Rückgabe von Werten wie man dies bei anderen Programmiersprachen kennt, ist nicht möglich. Dies ist nur durch eine entsprechende globale Variablendeklaration möglich.
In diesem etwas komplexeren Beispiel sollen zwei Brüche addiert werden und das gekürzte Ergebnis ausgegeben werden.
Die Analyse des algorithmischen Geschehens ergibt folgende Schritte:
- Eingabe
- KGV der Nenner ermitteln: Hauptnenner
- Erweitern beider Brüche auf Hauptnenner
- Addieren der nennergleichen Brüche
- GGT von Zähler und Nenner ermitteln: Kürzungszahl
- Kürzen
- Ausgabe
Im zweiten Schritt werden die Teilalgorithmen festgelegt:
- EINGABE: im Hauptprogramm
- KGV: zwei Eingänge (alter Nenner 1, alter Nenner 2), ein Ausgang (gemeinsamer Nenner)
- ERW: drei Eingänge (alter Zähler, alter Nenner, gem. Nenner), ein Ausgang (neuer Zähler)
- ADD: zwei Eingänge (neuer Zähler 1, neuer Zähler 2), ein Ausgang (Summenzähler)
- GGT: zwei Eingänge (Summenzähler, gem. Nenner), ein Ausgang (Kürzungszahl)
- KUERZE: drei Eingänge (Summenzähler, gem. Nenner, Kürzugszahl), zwei Ausgänge (Endzähler, Endnenner)
- AUSGABE: zwei Eingänge (Endzähler, Endnenner)
Im dritten Schritt werden die Variablen definiert:
- alter Zähler 1: altz1
- alter Zähler 2: altz2
- alter Nenner 1: altn1
- alter Nenner 2: altn2
- gem. Nenner: gem_n
- neuer Zähler 1: neuz1
- neuer Zähler 2: neuz2
- Summenzähler: sumz
- Kürzungszahl: kuerz
- Endzähler: endz
- Endnenner: endn
- Ausgang KGV: kgv
- Ausgang ERW: erw
- Ausgang ADD: add
- Ausgang GGT: ggt
- interne Variablen GGT:a, b
4. Schritt: Ausformulierung der Teilalgorithmen
5. Schritt: Das Hauptprogramm erstellen