2. Unterprogramme und Methoden

Werbung
2. Unterprogramme und Methoden
Methoden
2. Unterprogramme und Methoden
• Durch Methoden wird ausführbarer Code unter einem Namen zusammengefasst.
• Dieser Code kann unter Verwendung von sogenannten Parametern formuliert sein,
denen später beim Aufruf der Methode Werte übergeben werden.
• Methoden sind ein Bestandteil von Klassen.
• Wir befassen uns hier mit einem Spezialfall (Klassenmethoden)!
Später noch: Methoden in Verbindung mit Objekten
Beispiel: mehrfache Auswertung der Funktion
f (x, n) = x2n + n2 − nx
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
38
2. Unterprogramme und Methoden
Methoden
Deklaration von (Klassen-)Methoden
Syntax:
public static Rückgabetyp Methodenname ( Parameterliste ) {
Anweisungen
}
• Rückgabetyp
Datentyp des Ergebnisses, das die Methode zurückliefern soll.
Soll die Methode keinen Wert zurückliefern, verwenden wir hier void.
• Methodenname
Bezeichner als Name für die Methode.
• Parameterliste
Eine Kommaliste von Variablendeklarationen.
Die darin aufgeführten Variablen heißen formale Parameter.
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
39
2. Unterprogramme und Methoden
Methoden
Parameterübergabe und -rückgabe
• Der Methodenkopf für die Berechnung von f (x, n) = x2n + n2 − nx könnte
lauten:
public static double f(double x, int n)
• Für die Ergebnisrückgabe an die aufrufende Umgebung steht die returnAnweisung zur Verfügung.
• Durch
return ergebnis;
wird die Ausführung der Methode beendet und der Wert des Ausdrucks ergebnis
als Resultat zurückgegeben.
• Hat eine Methode den Rückgabetyp void, so reicht
return;
Ein solches return als letze Anweisung kann auch entfallen.
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
40
2. Unterprogramme und Methoden
Methoden
• Eine Methode darf mehrere return-Anweisungen enthalten.
Für Methoden, die nicht den Rückgabetyp void haben, muß aber sichergestellt
sein, daß vor Beendigung der Methode eine return-Anweisung ausgeführt wird.
• Beispielmethode komplett:
public static double f(double x, int n) {
double produkt = 1.0;
for (int i=0; i<2*n ; i++)
produkt = produkt * x;
return produkt + n*n - n*x;
}
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
41
2. Unterprogramme und Methoden
Methoden
Aufruf von Methoden
Syntax:
Methodenname( Parameterliste )
• Ein Methodenaufruf ist ein elementarer Ausdruck.
• Parameterliste ist eine Kommaliste von Ausdrücken (aktuelle Parameter).
Die Werte der Ausdrücke werden über die formalen Parameter aus der Methodendeklaration an die Methode übergeben.
• Nach dem Aufruf wird jeweils der entsprechende Rückgabewert für den ursprünglichen Methodenaufruf eingesetzt und mit diesem Wert weitergearbeitet.
double y = f(x,n);
double z = f(y,3) + 3*x;
• In Java erfolgt die Parameterübergabe stets als Wertparameter (call by value). Es
wird stets eine Kopie des Wertes einer Variablen an die Methode übergeben, der
Wert der Variablen bleibt unverändert.
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
42
2. Unterprogramme und Methoden
Methoden
Wertparameter
Wertparameter ermöglichen die Übergabe von Variablenwerten, aber nicht deren
Änderung.
Was wird ausgegeben?
public static void methode(int a) { a++; }
public static void main(String[] args) {
int a = 1;
methode(a);
System.out.println(a);
}
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
43
2. Unterprogramme und Methoden
Methoden
Referenzparameter
• Referenzparameter ermöglichen nicht nur die Übergabe von Variablenwerten, sondern auch deren Änderung.
• Referenzparameter gibt es z.B. in den folgenden Programmiersprachen: Pascal,
Modula-2, C++
• Durch die Benutzung von Zeigern (Referenzen) kann ein den Referenzparametern
ähnliches Verhalten simulieren.
• Aber Vorsicht: Auch die Referenzen sind nur Wertparameter in Java!
• Konsequenz: Nur die referenzierten Inhalte können geändert werden, nicht die Referenz selber!
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
44
2. Unterprogramme und Methoden
Methoden
Referenzparameter (2)
Was wird ausgegeben?
public static void methode(int[] a) { a[0]++; }
public static void main(String[] args) {
int[] a = { 1 };
methode(a);
System.out.println(a[0]);
}
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
45
2. Unterprogramme und Methoden
Methoden
Referenzparameter (3)
Was wird ausgegeben?
public static void methode(int[] a) {
a = new int[] { 2 };
}
public static void main(String[] args) {
int[] a = { 1 };
methode(a);
System.out.println(a[0]);
}
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
46
2. Unterprogramme und Methoden
Methoden
Überladen von Methoden
In Java darf es auch innerhalb einer Klasse mehrere Methoden mit dem gleichen
Namen geben, d.h. Methoden können überladen werden:
public static int max(int x, int y) {
return (x>y) ? x : y;
}
public static double max(double x, double y) {
return (x>y) ? x : y;
}
Java unterscheidet Methoden gleichen Namens
• anhand der Zahl der Parameter,
• anhand des Typs Typs der Parameter und
• anhand der Position der Parameter.
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
47
2. Unterprogramme und Methoden
Methoden
Sichtbarkeit und Verdecken von Variablen
• Manchmal möchte man eine Variable deklarieren, die in mehr als einer Methode
(einer Klasse) bekannt ist.
• Wir erreichen dies, indem wir die Variable ausserhalb aller Methoden, aber innerhalb einer Klasse definieren und static davor schreiben.
public class MeineKlasse {
static String s = "Klassenvariable";
public static void meineMethode1() {
System.out.println(s);
}
public static void meineMethode2() {
System.out.println(s);
}
}
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
48
2. Unterprogramme und Methoden
Methoden
• Solch eine Variable heißt Klassenvariable.
• Java erlaubt es aber auch, daß Klassenvariablen und lokale Variablen bzw. Klassenvariablen und formale Parameter den gleichen Namen tragen.
• Wenn dies so ist, welche Variable wird dann genommen?
• Grundregel für die Sichtbarkeit bzw. das Verdecken:
Innerhalb von Methoden verdecken lokale Variablen und formale Parameter
die Klassenvariablen gleichen Namens.
• Klassenvariablen können trotzdem angesprochen werden. Hierzu stellt man den
Klassennamen vor den Variablennamen:
Klassenname.Variablenname
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
49
2. Unterprogramme und Methoden
public class VerdeckenTest {
static int a=1, b=2, c=3;
static int m(int a) {
int b=20;
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("c = " + c);
return 100;
}
public static void main(String[] args) {
int a=1000;
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("m(c) = " + m(c));
}
}
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
Methoden
Ausgabe:
a = 1000
b = 2
a = 3
b = 20
c = 3
m(c) = 100
50
2. Unterprogramme und Methoden
Methoden
Rekursive Methoden
Rekursion ist in Java erlaubt, d.h. Methoden dürfen sich selbst aufrufen!
Beispiel: Methode zur Berechnung der Fibonacci-Zahlen Fi :
F0 = 0, F1 = 1, Fn = Fn−1 + Fn−2 für n ≥ 2
static int fibonacci(int n) {
if ( n == 0 )
return 0;
if ( n == 1 )
return 1;
return fibonacci(n-1) + fibonacci(n-2);
}
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
51
2. Unterprogramme und Methoden
Methoden
Die Methode main
• Die Hauptmethode main ist nach dem gleichen Schema wie jede andere Methode
aufgebaut.
public static void main(String[] args)
• Der Inhalt von args ergibt sich durch die Argumente, die beim Aufruf des Programms angegeben werden.
• Beim Aufruf von
> java MeineKlasse Argument1 ... ArgumentN
gilt für args in main von MeineKlasse:
– args.length hat den Wert N
– args[0] hat den Wert Argument1 als String
– args[args.length-1] hat den Wert ArgumentN als String
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
52
Herunterladen