klassen mit instanzmethoden...ubersicht¨ 1 definition von klassen 2 methoden 3 methoden –...

25
Klassen mit Instanzmethoden Gerd Bohlender Institut f¨ ur Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 3.12.07 G. Bohlender (IANM – UNI Karlsruhe) OOP und Klassen 3.12.07 1 / 25

Upload: others

Post on 06-Jul-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Klassen mit Instanzmethoden...Ubersicht¨ 1 Definition von Klassen 2 Methoden 3 Methoden – formale Parameter 4 Parameter¨ubergabe, Aufruf einer Instanzmethode Referenztypen als

Klassen mit Instanzmethoden

Gerd Bohlender

Institut fur Angewandte undNumerische Mathematik

Vorlesung: Einstieg in die Informatik mit Java

3.12.07

G. Bohlender (IANM – UNI Karlsruhe) OOP und Klassen 3.12.07 1 / 25

Page 2: Klassen mit Instanzmethoden...Ubersicht¨ 1 Definition von Klassen 2 Methoden 3 Methoden – formale Parameter 4 Parameter¨ubergabe, Aufruf einer Instanzmethode Referenztypen als

Ubersicht

1 Definition von Klassen

2 Methoden

3 Methoden – formale Parameter

4 Parameterubergabe, Aufruf einer InstanzmethodeReferenztypen als ArgumentZugriffe in einer Instanzmethode

5 Datenkapselung

6 Uberladen von Methoden

7 Variable Argumentliste

8 Laufanweisung fur Felder

9 Methode toString()

G. Bohlender (IANM – UNI Karlsruhe) OOP und Klassen 3.12.07 2 / 25

Page 3: Klassen mit Instanzmethoden...Ubersicht¨ 1 Definition von Klassen 2 Methoden 3 Methoden – formale Parameter 4 Parameter¨ubergabe, Aufruf einer Instanzmethode Referenztypen als

Definition von Klassen

Syntax

Modifizierer class Bezeichner {Elementliste}

Die Elementliste besteht u.a. aus

Attributen (d. h. Instanzvariablen),

Konstruktoren und

Instanzmethoden (d.h. Funktionen).

Zweck der Instanzmethoden:

Bearbeitung der Attribute,

Klassen werden zu”aktiven“ Objekten,

”Kommunikation“ mit anderen Klassen.

G. Bohlender (IANM – UNI Karlsruhe) OOP und Klassen 3.12.07 3 / 25

Page 4: Klassen mit Instanzmethoden...Ubersicht¨ 1 Definition von Klassen 2 Methoden 3 Methoden – formale Parameter 4 Parameter¨ubergabe, Aufruf einer Instanzmethode Referenztypen als

Methoden

Syntax:

Typspezifikation Methodenname (formale Parameterliste) {Deklarationen und Anweisungen

}

double demo (double x) {return x*x;

}

G. Bohlender (IANM – UNI Karlsruhe) OOP und Klassen 3.12.07 4 / 25

Page 5: Klassen mit Instanzmethoden...Ubersicht¨ 1 Definition von Klassen 2 Methoden 3 Methoden – formale Parameter 4 Parameter¨ubergabe, Aufruf einer Instanzmethode Referenztypen als

Methoden – formale Parameter

Die formale Parameterliste setzt sich jeweils aus der Typspezifikationgefolgt vom zugehorigen Bezeichner zusammen und wird durch Kommatagetrennt:

Typ 1 Name 1, . . . , Typ n Name n

Die formale Parameterliste darf leer sein, die runden Klammernhingegen mussen stehen.

int leer () {return 123;

}

G. Bohlender (IANM – UNI Karlsruhe) OOP und Klassen 3.12.07 5 / 25

Page 6: Klassen mit Instanzmethoden...Ubersicht¨ 1 Definition von Klassen 2 Methoden 3 Methoden – formale Parameter 4 Parameter¨ubergabe, Aufruf einer Instanzmethode Referenztypen als

Methoden – formale Parameter

Fur jeden Parameter muß eine eigene Typspezifikation existieren.

int richtig (int x, int y) {...

}int falsch (int x, y) {

...}

G. Bohlender (IANM – UNI Karlsruhe) OOP und Klassen 3.12.07 6 / 25

Page 7: Klassen mit Instanzmethoden...Ubersicht¨ 1 Definition von Klassen 2 Methoden 3 Methoden – formale Parameter 4 Parameter¨ubergabe, Aufruf einer Instanzmethode Referenztypen als

Methoden – formale Parameter

Feldtypen, Zeichenketten und beliebige andere Objekte sind alsParameter und Ergebnisse zugelassen. Bei Feldern muss die korrekteAnzahl von eckigen Klammern, jedoch ohne die Dimension,zusammen mit dem Basistyp angegeben werden.

double[] rechnenMitVektoren (double[] x) {...

}

G. Bohlender (IANM – UNI Karlsruhe) OOP und Klassen 3.12.07 7 / 25

Page 8: Klassen mit Instanzmethoden...Ubersicht¨ 1 Definition von Klassen 2 Methoden 3 Methoden – formale Parameter 4 Parameter¨ubergabe, Aufruf einer Instanzmethode Referenztypen als

Methodendefinition – Ergebnis berechnen

Die Ruckgabe des Ergebnisses erfolgt uber

return Ausdruck;

Der Ausdruck muß dabei zuweisungskompatibel zum Typ derMethode sein.

Mit der return–Anweisung wird die Methode abgebrochen und dasangegebene Ergebnis zuruckgeliefert.

class Punkt {double x,y;double norm () {

return Math.sqrt (x*x + y*y);}

}

G. Bohlender (IANM – UNI Karlsruhe) OOP und Klassen 3.12.07 8 / 25

Page 9: Klassen mit Instanzmethoden...Ubersicht¨ 1 Definition von Klassen 2 Methoden 3 Methoden – formale Parameter 4 Parameter¨ubergabe, Aufruf einer Instanzmethode Referenztypen als

Methodendefinition – Ergebnis berechnen

Es muß in jedem Fall ein return durchlaufen werden, sonst tritt einFehler auf.

Achtung: Dies ist eine beliebte Fehlerquelle bei der Verwendung vonbedingten und verzweigten Anweisungen!

int falsch (int x) {if (x >= 0)

return 2*x;}int richtig (int x) {

if (x >= 0)return 2*x;

elsereturn x;

}

G. Bohlender (IANM – UNI Karlsruhe) OOP und Klassen 3.12.07 9 / 25

Page 10: Klassen mit Instanzmethoden...Ubersicht¨ 1 Definition von Klassen 2 Methoden 3 Methoden – formale Parameter 4 Parameter¨ubergabe, Aufruf einer Instanzmethode Referenztypen als

Methodendefinition – void

Wird kein Ergebnis benotigt, so ist der Ergebnistyp void und diereturn–Anweisung lautet schlicht:

return;

Diese Anweisung muß nicht explizit angegeben werden, sondern wirdam Ende der Methode automatisch ausgefuhrt.

void ausgeben (int x) {System.out.println (x);

}

Die Anweisung return; bewirkt, dass die Methode an dieser Stellebeendet wird.

void ausgeben (int x) {if (x < 0) return;System.out.println (x); // wird evtl. nicht ausgefuehrt

}

G. Bohlender (IANM – UNI Karlsruhe) OOP und Klassen 3.12.07 10 / 25

Page 11: Klassen mit Instanzmethoden...Ubersicht¨ 1 Definition von Klassen 2 Methoden 3 Methoden – formale Parameter 4 Parameter¨ubergabe, Aufruf einer Instanzmethode Referenztypen als

Parameterubergabe, Aufruf einer Instanzmethode

Der Methodenaufruf muß in einem Ausdruck des entsprechenden Typserfolgen.Syntax:

Instanzname . Methodenname (aktuelle Parameterliste)

Der Instanzname gibt die Instanz an, deren Attribute bearbeitetwerden sollen.

Die aktuelle Parameterliste liefert zusatzliche Werte zur Bearbeitung

Sie muß genauso viele Parameter vom passenden Typ besitzen wie dieformale Parameter–Liste.

Ist die formale (und damit auch die aktuelle) Parameterliste leer, somussen die runden Klammern trotzdem stehen.

G. Bohlender (IANM – UNI Karlsruhe) OOP und Klassen 3.12.07 11 / 25

Page 12: Klassen mit Instanzmethoden...Ubersicht¨ 1 Definition von Klassen 2 Methoden 3 Methoden – formale Parameter 4 Parameter¨ubergabe, Aufruf einer Instanzmethode Referenztypen als

Aufruf einer Instanzmethode – Beispiel

class Punkt {double x,y;void verschieben (double dx, double dy) {

x += dx;y += dy;

}}

...

Punkt p = new Punkt();p.verschieben (10, 20);

G. Bohlender (IANM – UNI Karlsruhe) OOP und Klassen 3.12.07 12 / 25

Page 13: Klassen mit Instanzmethoden...Ubersicht¨ 1 Definition von Klassen 2 Methoden 3 Methoden – formale Parameter 4 Parameter¨ubergabe, Aufruf einer Instanzmethode Referenztypen als

Parameterubergabe, Aufruf einer Instanzmethode

Die aktuellen Parameter konnen beliebige Ausdrucke (von passendemTyp) sein, sie werden von links nach rechts ausgewertet.

class Demo {int ausdruck (int a, int b) {return 2*a + 3*b;

}}

...

int i=1, j;Demo d = new Demo();j = d.ausdruck (i++, i++);System.out.println (i + " " + j);// 3 8

G. Bohlender (IANM – UNI Karlsruhe) OOP und Klassen 3.12.07 13 / 25

Page 14: Klassen mit Instanzmethoden...Ubersicht¨ 1 Definition von Klassen 2 Methoden 3 Methoden – formale Parameter 4 Parameter¨ubergabe, Aufruf einer Instanzmethode Referenztypen als

Parameterubergabe, Methodenaufruf

Beim Aufruf der Methode wird das aktuelle Argument ausgewertetund das Ergebnis in einer lokalen Variablen mit dem Namen desformalen Parameters abgelegt, d. h. es wird stets mit einer Kopie derubergebenen Daten gearbeitet.

class Demo {int erhoehen (int a) {return ++a;

}}

...

int i=1, j;Demo d = new Demo();j = d.erhoehen (i);System.out.println (i + " " + j);// 1 2

G. Bohlender (IANM – UNI Karlsruhe) OOP und Klassen 3.12.07 14 / 25

Page 15: Klassen mit Instanzmethoden...Ubersicht¨ 1 Definition von Klassen 2 Methoden 3 Methoden – formale Parameter 4 Parameter¨ubergabe, Aufruf einer Instanzmethode Referenztypen als

Referenztypen als Argument

Der aktuelle Parameter lasst sich durch Anweisungen innerhalb einerMethode nicht verandern.

Achtung: bei Referenztypen gilt dies ebenso, aber nur fur dieReferenzvariablen, nicht fur die referenzierten Großen (Feldelemente,Objekte, usw.)

class Demo {void veraendern (int[] feld) {

++feld[0];}

}...int[] f = {1,5,3};Demo d = new Demo();d.veraendern (f);System.out.println (f[0]);// 2

G. Bohlender (IANM – UNI Karlsruhe) OOP und Klassen 3.12.07 15 / 25

Page 16: Klassen mit Instanzmethoden...Ubersicht¨ 1 Definition von Klassen 2 Methoden 3 Methoden – formale Parameter 4 Parameter¨ubergabe, Aufruf einer Instanzmethode Referenztypen als

Referenztypen als Argument

Die Referenzvariable selbst wird als Wert ubergeben, kann also nichtverandert werden!

class Demo {void nichtVeraendern (int[] feld) {

feld = new int[]{66,77,88,99};}

}...int[] f = {1,5,3};Demo d = new Demo();d.nichtVeraendern (f);System.out.println (f[0]);// 1

G. Bohlender (IANM – UNI Karlsruhe) OOP und Klassen 3.12.07 16 / 25

Page 17: Klassen mit Instanzmethoden...Ubersicht¨ 1 Definition von Klassen 2 Methoden 3 Methoden – formale Parameter 4 Parameter¨ubergabe, Aufruf einer Instanzmethode Referenztypen als

Zugriffe in einer Instanzmethode

Eine Instanzmethode darf zugreifen auf

Instanzvariablen (*)Formale ParameterLokale Variablen dieser MethodeAufrufe anderer Instanzmethoden (*)

(*) Angabe des Instanznamens ist nicht notig, die Instanz ist bereitsbekannt!

class Punkt {...void weitVerschieben () {

verschieben (1000, 1000);}

}...Punkt p = new Punkt ();p.verschieben (33,44);p.weitVerschieben (); // p an verschieben weitergeben

G. Bohlender (IANM – UNI Karlsruhe) OOP und Klassen 3.12.07 17 / 25

Page 18: Klassen mit Instanzmethoden...Ubersicht¨ 1 Definition von Klassen 2 Methoden 3 Methoden – formale Parameter 4 Parameter¨ubergabe, Aufruf einer Instanzmethode Referenztypen als

Bemerkungen zu Methoden

Lokale Variablen durfen nicht den gleichen Namen wie ein formalerParameter besitzen.Die aktuelle und formale Parameterliste mussen nicht die gleichenBezeichner enthalten.Formale Parameter bzw. lokale Variablen durfen den gleichenBezeichner wie ein Attribut besitzen. Zur Unterscheidung schreibtman dann this.Attributnamethis ist eine Referenz auf die aktuell bearbeitete Instanz der Klasse.

class Gleichnamig {int x,y;void speichern (int x, int y) {

this.x = x;this.y = y;

}} ...Gleichnamig gl = new Gleichnamig ();gl.speichern (33,44); // this entspricht gl

G. Bohlender (IANM – UNI Karlsruhe) OOP und Klassen 3.12.07 18 / 25

Page 19: Klassen mit Instanzmethoden...Ubersicht¨ 1 Definition von Klassen 2 Methoden 3 Methoden – formale Parameter 4 Parameter¨ubergabe, Aufruf einer Instanzmethode Referenztypen als

Datenkapselung

Zur Datenkapselung kann die Sichtbarkeit der Elemente mit Hilfe vonvorangestellten Modifizierern geregelt werden.

Mogliche Modifizierer

public Element kann von jeder Klasse verwendet werden.protected (spater . . . )nichts Standard-Rechte, auch friendly genannt.

Element kann u. a. in der Klasse selber sowiein allen Klassen des gleichen Pakets verwendet werden.

private Element kann nur von der eigenen Klasse verwendet werden.

Datenelemente werden aus Grunden der Datenkapselung oft mit demModifizierer private versehen.Die Klasse selber darf nur Standardrechte oder public–Rechtebesitzen.In einer Datei durfen mehrere Klassen definiert werden, jedoch darfnur eine davon public–Rechte besitzen. Diese Klasse muss dengleichen Namen wie die Datei tragen.

G. Bohlender (IANM – UNI Karlsruhe) OOP und Klassen 3.12.07 19 / 25

Page 20: Klassen mit Instanzmethoden...Ubersicht¨ 1 Definition von Klassen 2 Methoden 3 Methoden – formale Parameter 4 Parameter¨ubergabe, Aufruf einer Instanzmethode Referenztypen als

Beispiel zur Klassendefinition und Datenkapselung

Nachfolgend wird der neue Datentyp Point definiert.

class Point {private double x,y; // geschutzt vor unberecht. Zugriffpublic double getx () { return x; }public double gety () { return y; }void move (double dx, double dy) { x += dx; y += dy; }

public static void main (String[] args) {Point p = new Point (); // bildet Instanz der Klasse

} // Point durch Aufruf des} // Standardkonstruktors

G. Bohlender (IANM – UNI Karlsruhe) OOP und Klassen 3.12.07 20 / 25

Page 21: Klassen mit Instanzmethoden...Ubersicht¨ 1 Definition von Klassen 2 Methoden 3 Methoden – formale Parameter 4 Parameter¨ubergabe, Aufruf einer Instanzmethode Referenztypen als

Zugriff auf Elemente

Außerhalb der Klasse, d.h. in einer anderen Klasse, ist der Zugriff nur aufsichtbare Komponenten erlaubt. Diese sind folglich mit offentlichenZugriffsrechten (public) bzw. fur den Fall, dass sich die Klasse imgleichen Verzeichnis befindet, mit Standardrechten ausgestattet.

Syntax

Instanzname.Komponenten bei Instanzkomponenten

Beispiel (erweiterte Klasse Point)

... // im Hauptprogramm:System.out.println ("x-Koodinate von p" + p.getx());System.out.println (p.x); // syntaktisch richtig,... // aber Zugriff verboten!

G. Bohlender (IANM – UNI Karlsruhe) OOP und Klassen 3.12.07 21 / 25

Page 22: Klassen mit Instanzmethoden...Ubersicht¨ 1 Definition von Klassen 2 Methoden 3 Methoden – formale Parameter 4 Parameter¨ubergabe, Aufruf einer Instanzmethode Referenztypen als

Uberladen von Methoden

In Java konnen wie in C++ mehrere Methoden mit gleichem Namen ineiner Klasse existieren.

Beispiel:

double max (double x, double y) { ... }int max (int x, int y) { ... }

Die Methoden mussen unterschiedliche Parameterlisten besitzen.

Der Ergebnistyp ist frei wahlbar. Allerdings ist es nicht erlaubt, daßsich die Methoden nur in ihrem Ergebnistyp unterscheiden.→ Signatur: Name und Parameterliste sind entscheidend.

G. Bohlender (IANM – UNI Karlsruhe) OOP und Klassen 3.12.07 22 / 25

Page 23: Klassen mit Instanzmethoden...Ubersicht¨ 1 Definition von Klassen 2 Methoden 3 Methoden – formale Parameter 4 Parameter¨ubergabe, Aufruf einer Instanzmethode Referenztypen als

Variable Argumentliste

Syntax

Typ ... Bezeichner

Wird in der Methode als Feld vom angegebenen Typ interpretiert

class Flexibel {void ausgeben (int ... x) {

for (int i=0; i<x.length; i++)System.out.println (x[i]);

}}...Flexibel f = new Flexibel ();f.ausgeben (1,2,3); // drei einfache int// 1 2 3

G. Bohlender (IANM – UNI Karlsruhe) OOP und Klassen 3.12.07 23 / 25

Page 24: Klassen mit Instanzmethoden...Ubersicht¨ 1 Definition von Klassen 2 Methoden 3 Methoden – formale Parameter 4 Parameter¨ubergabe, Aufruf einer Instanzmethode Referenztypen als

Laufanweisung fur Felder

Syntax

for (Komponententyp Bezeichner : Feldname ) ...

Der Bezeichner durchlauft alle Feldelelemente.

double[] x = {1.5, 2.3, 3.7};// bekannte Variante:for (int i=0; i<x.length; i++)

System.out.println (x[i]);// neue Variante:for (double xi: x)

System.out.println (xi);

In dieser Variante: kein Zugriff auf Index i moglich bzw. notig.

G. Bohlender (IANM – UNI Karlsruhe) OOP und Klassen 3.12.07 24 / 25

Page 25: Klassen mit Instanzmethoden...Ubersicht¨ 1 Definition von Klassen 2 Methoden 3 Methoden – formale Parameter 4 Parameter¨ubergabe, Aufruf einer Instanzmethode Referenztypen als

Methode toString()

Syntax

public String toString() {return ...; // Attribute als Text

}

toString() wird automatisch aufgerufen, wenn eine String-Darstellung einesObjekts gebraucht wird – z.B. bei der Ausgabe.

class Punkt {double x,y;public String toString () {

return x + ", " + y;}

} ...Punkt p = new Punkt ();System.out.println (p); // ruft toString() auf// Ausgabe: 0, 0

G. Bohlender (IANM – UNI Karlsruhe) OOP und Klassen 3.12.07 25 / 25