Methoden, Sub-Routinen, Unterprogramme, Funktionen

Vorteile:

1. Wiederverwendbarkeit von Code
2. bessere Möglichkeiten der Arbeitsteilung
3. leichtere Wartbarkeit des Codes
4. Verbesserung der Übersichtlichkeit
5. Verringerung von Programmierfehlern

Ziel:

Aufteilung eines großen Problemes (eines Programmes) in mehrere Teilprobleme (mehrere Teilprogramme)

Vereinbarung (Methodenkopf):

[static] (Rückgabetyp | void) Name ([formale Parameter])

Beispiele:

static boolean zulaessig(char b)

- keine Bindung an ein Objekt (static)
- Rückgabetyp ist ein Wahrheitswert (boolean)
- der Name der Methode ist "zulaessig"
- es gibt einen formalen Parameter b vom Typ Zeichen

static String anfang()

- keine Bindung an ein Objekt (static)
- Rückgabetyp ist eine Zeichenkette (String)
- der Name der Methode ist "anfang"
- es gibt keine formalen Parameter

static void Ende(boolean wortgeraten)

- keine Bindung an ein Objekt (static)
- kein Rückgabetyp - void ist erforderlich
- der Name der Methode ist "Ende"
- es gibt einen formalen Parameter wortgeraten vom Typ Wahrheitswert

Es gibt also zwei prinzipielle Arten von Methoden (Arten von Unterprogrammen):

1 Methoden mit einem Rückgabewert
+ Der Rückgabetyp wird vor dem Methodennamen angegeben.
+ Die Rückgabe wird durch den Befehl return (Bsp.: return 15 oder return x) ausgelöst.
+ Der Aufruf der Methode ist Teil einer anderen Anweisung.

2 Methoden ohne Rückgabewert
+ Vor dem Methodennamen ist das Schlüsselwort void erforderlich.
+ Der Aufruf der Methode ist eine selbstständige Anweisung.

Zur Methode gehört außerdem noch ein Methodenrumpf, in dem sich die auszuführenden Anweisungen finden.

Eine komplette Methode hat zum Beispiel den folgenden Quelltext:

static boolean zulaessig(char b)
{
boolean z=false;
// z ist eine lokale Variable

if (b>='a' && b<='z')
z=true;

if (b>='A' && b<='Z')
z=true;

if (b=='-')
z=true;

return z;
// Der Wert von z wird an das aufrufende Programm zurück gegeben.
}


Formale Parameter findet man im Methodenkopf, werden bei der Definition der Methode verwendet.

Aktuelle Parameter findet man beim Aufruf der Methode.

Formale und aktuelle Parameter müssen übereinstimmen in
+ der Anzahl,
+ den Typen,
+ der Reihenfolge

"call by value"
Die Parameter werden "call by value" übergeben. Im Unterprogramm wird mit einer Kopie des Originales gearbeitet. Bei Verlassen des Unterprogrammes wird diese vernichtet. Veränderungen wirken sich also nicht auf das im aufrufenden Programm befindliche Original aus.
In Pascal und Oberon nannte man diese Sorte von Parametern Werteparameter.

Globale Variablen
+ sind in der ganzen Klasse gültig

Lokale Variablen
+ sind nur innerhalb einer Methode oder gar eines Blockes gültig
+ bei Namensgleichheit gehen die lokalen Variablen vor
+ alle formalen Parameter wirken wie lokale Variablen