2. Unterprogramme und Methoden Deklaration von (Klassen

Werbung
2. Unterprogramme und Methoden
Methoden
2. Unterprogramme und Methoden
2. Unterprogramme und Methoden
Methoden
Parameterübergabe und -rückgabe
• 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
• 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;
Beispiel: mehrfache Auswertung der Funktion
2n
f (x, n) = x
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
2
+ n − nx
return;
Ein solches return als letze Anweisung kann auch entfallen.
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
2. Unterprogramme und Methoden
38
Methoden
Deklaration von (Klassen-)Methoden
2. Unterprogramme und Methoden
40
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:
Syntax:
public static double f(double x, int n) {
double produkt = 1.0;
public static Rückgabetyp Methodenname ( Parameterliste ) {
Anweisungen
}
for (int i=0; i<2*n ; i++)
produkt = produkt * x;
• 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
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
return produkt + n*n - n*x;
}
39
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
41
2. Unterprogramme und Methoden
Methoden
2. Unterprogramme und Methoden
Aufruf von Methoden
Syntax:
Methoden
Referenzparameter
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;
• 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!
• 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
2. Unterprogramme und Methoden
42
Methoden
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
2. Unterprogramme und Methoden
Wertparameter
44
Methoden
Referenzparameter (2)
Wertparameter ermöglichen die Übergabe von Variablenwerten, aber nicht deren
Änderung.
Was wird ausgegeben?
public static void methode(int[] a) { a[0]++; }
Was wird ausgegeben?
public static void methode(int a) { a++; }
public static void main(String[] args) {
int[] a = { 1 };
public static void main(String[] args) {
int a = 1;
methode(a);
System.out.println(a[0]);
methode(a);
System.out.println(a);
}
}
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
43
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
45
2. Unterprogramme und Methoden
Methoden
2. Unterprogramme und Methoden
Referenzparameter (3)
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.
Was wird ausgegeben?
public static void methode(int[] a) {
a = new int[] { 2 };
}
public class MeineKlasse {
static String s = "Klassenvariable";
public static void meineMethode1() {
System.out.println(s);
}
public static void main(String[] args) {
int[] a = { 1 };
methode(a);
System.out.println(a[0]);
public static void meineMethode2() {
System.out.println(s);
}
}
}
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
2. Unterprogramme und Methoden
46
Methoden
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
2. Unterprogramme und Methoden
48
Methoden
• Solch eine Variable heißt Klassenvariable.
Ü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;
}
• 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.
public static double max(double x, double y) {
return (x>y) ? x : y;
}
• Klassenvariablen können trotzdem angesprochen werden. Hierzu stellt man den
Klassennamen vor den Variablennamen:
Java unterscheidet Methoden gleichen Namens
Klassenname.Variablenname
• 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
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
49
2. Unterprogramme und Methoden
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));
}
}
Methoden
Die Methode main
• Die Hauptmethode main ist nach dem gleichen Schema wie jede andere Methode
aufgebaut.
Ausgabe:
a = 1000
b = 2
a = 3
b = 20
c = 3
m(c) = 100
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
2. Unterprogramme und Methoden
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
50
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
2. Unterprogramme und Methoden
51
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
52
Herunterladen