Einstieg in die Informatik mit Java - math.kit.edu · In Java konnen wie in C++ mehrere Methoden...

34
Einstieg in die Informatik mit Java Klassen mit Instanzmethoden Gerd Bohlender Institut f ¨ ur Angewandte und Numerische Mathematik 1 / 34

Transcript of Einstieg in die Informatik mit Java - math.kit.edu · In Java konnen wie in C++ mehrere Methoden...

Page 1: Einstieg in die Informatik mit Java - math.kit.edu · In Java konnen wie in C++ mehrere Methoden mit gleichem¨ Namen in einer Klasse existieren. Beispiel double max (double x , double

Einstieg in die Informatik mit JavaKlassen mit Instanzmethoden

Gerd Bohlender

Institut fur Angewandte und Numerische Mathematik

1 / 34

Page 2: Einstieg in die Informatik mit Java - math.kit.edu · In Java konnen wie in C++ mehrere Methoden mit gleichem¨ Namen in einer Klasse existieren. Beispiel double max (double x , double

Gliederung

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()

2 / 34

Page 3: Einstieg in die Informatik mit Java - math.kit.edu · In Java konnen wie in C++ mehrere Methoden mit gleichem¨ Namen in einer Klasse existieren. Beispiel double max (double x , double

Gliederung

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()

3 / 34

Page 4: Einstieg in die Informatik mit Java - math.kit.edu · In Java konnen wie in C++ mehrere Methoden mit gleichem¨ Namen in einer Klasse existieren. Beispiel double max (double x , double

Definition von Klassen

SyntaxModifizierer 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.

4 / 34

Page 5: Einstieg in die Informatik mit Java - math.kit.edu · In Java konnen wie in C++ mehrere Methoden mit gleichem¨ Namen in einer Klasse existieren. Beispiel double max (double x , double

Gliederung

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()

5 / 34

Page 6: Einstieg in die Informatik mit Java - math.kit.edu · In Java konnen wie in C++ mehrere Methoden mit gleichem¨ Namen in einer Klasse existieren. Beispiel double max (double x , double

Methoden

Syntax

T y p s p e z i f i k a t i o n Methodenname ( formale Paramete r l i s te ) {Deklara t ionen und Anweisungen ;

}

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

}

6 / 34

Page 7: Einstieg in die Informatik mit Java - math.kit.edu · In Java konnen wie in C++ mehrere Methoden mit gleichem¨ Namen in einer Klasse existieren. Beispiel double max (double x , double

Gliederung

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()

7 / 34

Page 8: Einstieg in die Informatik mit Java - math.kit.edu · In Java konnen wie in C++ mehrere Methoden mit gleichem¨ Namen in einer Klasse existieren. Beispiel double max (double x , double

Methoden – formale Parameter

Die formale Parameterliste setzt sich jeweils aus derTypspezifikation gefolgt vom zugehorigen Bezeichnerzusammen und wird durch Kommata getrennt:

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

• Die formale Parameterliste darf leer sein, die rundenKlammern hingegen mussen stehen.

i n t l e e r ( ) {return 123;

}

8 / 34

Page 9: Einstieg in die Informatik mit Java - math.kit.edu · In Java konnen wie in C++ mehrere Methoden mit gleichem¨ Namen in einer Klasse existieren. Beispiel double max (double x , double

Methoden – formale Parameter

• Fur jeden Parameter muß eine eigene Typspezifikationexistieren.

i n t r i c h t i g ( i n t x , i n t y ) {. . .

}i n t f a l s c h ( i n t x , y ) {

. . .}

9 / 34

Page 10: Einstieg in die Informatik mit Java - math.kit.edu · In Java konnen wie in C++ mehrere Methoden mit gleichem¨ Namen in einer Klasse existieren. Beispiel double max (double x , double

Methoden – formale Parameter

• Feldtypen, Zeichenketten und beliebige andere Objektesind als Parameter und Ergebnisse zugelassen. BeiFeldern muss die korrekte Anzahl von eckigen Klammern,jedoch ohne die Dimension, zusammen mit dem Basistypangegeben werden.

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

}

10 / 34

Page 11: Einstieg in die Informatik mit Java - math.kit.edu · In Java konnen wie in C++ mehrere Methoden mit gleichem¨ Namen in einer Klasse existieren. Beispiel double max (double x , double

Methodendefinition – Ergebnis berechnen

• Die Ruckgabe des Ergebnisses erfolgt uberreturn Ausdruck;

Der Ausdruck muß dabei zuweisungskompatibel zum Typder Methode sein.

• Mit der return–Anweisung wird die Methode abgebrochenund das angegebene Ergebnis zuruckgeliefert.

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

return Math . s q r t ( x∗x + y∗y ) ;}

}

11 / 34

Page 12: Einstieg in die Informatik mit Java - math.kit.edu · In Java konnen wie in C++ mehrere Methoden mit gleichem¨ Namen in einer Klasse existieren. Beispiel double max (double x , double

Methodendefinition – Ergebnis berechnen

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

AchtungDies ist eine beliebte Fehlerquelle bei der Verwendung vonbedingten und verzweigten Anweisungen!

i n t f a l s c h ( i n t x ) {i f ( x >= 0)

return 2∗x ;}i n t r i c h t i g ( i n t x ) {

i f ( x >= 0)return 2∗x ;

elsereturn x ;

} 12 / 34

Page 13: Einstieg in die Informatik mit Java - math.kit.edu · In Java konnen wie in C++ mehrere Methoden mit gleichem¨ Namen in einer Klasse existieren. Beispiel double max (double x , double

Methodendefinition – void

• Wird kein Ergebnis benotigt, so ist der Ergebnistyp voidund die return–Anweisung lautet schlicht:

return ;

Diese Anweisung muß nicht explizit angegeben werden,sondern wird am Ende der Methode automatischausgefuhrt.

void ausgeben ( i n t x ) {System . out . p r i n t l n ( x ) ;

}• Die Anweisung return; bewirkt, dass die Methode an

dieser Stelle beendet wird.

void ausgeben ( i n t x ) {i f ( x < 0) return ;System . out . p r i n t l n ( x ) ; / / w i rd e v t l . n i c h t ausgefuehr t

}

13 / 34

Page 14: Einstieg in die Informatik mit Java - math.kit.edu · In Java konnen wie in C++ mehrere Methoden mit gleichem¨ Namen in einer Klasse existieren. Beispiel double max (double x , double

Gliederung

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()

14 / 34

Page 15: Einstieg in die Informatik mit Java - math.kit.edu · In Java konnen wie in C++ mehrere Methoden mit gleichem¨ Namen in einer Klasse existieren. Beispiel double max (double x , double

Parameterubergabe, Aufruf einer Instanzmethode

Der Methodenaufruf muß in einem Ausdruck desentsprechenden Typs erfolgen.

SyntaxInstanzname . Methodenname (aktuelleParameterliste)

• Der Instanzname gibt die Instanz an, deren Attributebearbeitet werden sollen.

• Die aktuelle Parameterliste liefert zusatzliche Werte zurBearbeitung

• Sie muß genauso viele Parameter vom passenden Typbesitzen wie die formale Parameter–Liste.

• Ist die formale (und damit auch die aktuelle) Parameterlisteleer, so mussen die runden Klammern trotzdem stehen.

15 / 34

Page 16: Einstieg in die Informatik mit Java - math.kit.edu · In Java konnen wie in C++ mehrere Methoden mit gleichem¨ Namen in einer Klasse existieren. Beispiel double max (double x , double

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 ) ;

16 / 34

Page 17: Einstieg in die Informatik mit Java - math.kit.edu · In Java konnen wie in C++ mehrere Methoden mit gleichem¨ Namen in einer Klasse existieren. Beispiel double max (double x , double

Parameterubergabe, Aufruf einer Instanzmethode

• Die aktuellen Parameter konnen beliebige Ausdrucke (vonpassendem Typ) sein, sie werden von links nach rechtsausgewertet.

class Demo {i n t ausdruck ( i n t a , i n t b ) {

return 2∗a + 3∗b ;}

}

. . .

i n t i =1 , j ;Demo d = new Demo ( ) ;j = d . ausdruck ( i ++ , i ++) ;System . out . p r i n t l n ( i + ” ” + j ) ;/ / 3 8

17 / 34

Page 18: Einstieg in die Informatik mit Java - math.kit.edu · In Java konnen wie in C++ mehrere Methoden mit gleichem¨ Namen in einer Klasse existieren. Beispiel double max (double x , double

Parameterubergabe, Methodenaufruf

• Beim Aufruf der Methode wird das aktuelle Argumentausgewertet und das Ergebnis in einer lokalen Variablenmit dem Namen des formalen Parameters abgelegt, d. h.es wird stets mit einer Kopie der ubergebenen Datengearbeitet.

class Demo {i n t erhoehen ( i n t a ) {

return ++a ;}

}. . .i n t i =1 , j ;Demo d = new Demo ( ) ;j = d . erhoehen ( i ) ;System . out . p r i n t l n ( i + ” ” + j ) ;/ / 1 2

18 / 34

Page 19: Einstieg in die Informatik mit Java - math.kit.edu · In Java konnen wie in C++ mehrere Methoden mit gleichem¨ Namen in einer Klasse existieren. Beispiel double max (double x , double

Referenztypen als Argument

• Der aktuelle Parameter lasst sich durch Anweisungeninnerhalb einer Methode nicht verandern.

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

class Demo {void veraendern ( i n t [ ] f e l d ) {

++ f e l d [ 0 ] ;}

}. . .i n t [ ] f = {1 ,5 ,3} ;Demo d = new Demo ( ) ;d . veraendern ( f ) ;System . out . p r i n t l n ( f [ 0 ] ) ;/ / 2

19 / 34

Page 20: Einstieg in die Informatik mit Java - math.kit.edu · In Java konnen wie in C++ mehrere Methoden mit gleichem¨ Namen in einer Klasse existieren. Beispiel double max (double x , double

Referenztypen als Argument

Die Referenzvariable selbst wird als Wert ubergeben, kann alsonicht verandert werden!

class Demo {void nichtVeraendern ( i n t [ ] f e l d ) {

f e l d = new i n t [ ]{66 ,77 ,88 ,99} ;}

}. . .i n t [ ] f = {1 ,5 ,3} ;Demo d = new Demo ( ) ;d . n ichtVeraendern ( f ) ;System . out . p r i n t l n ( f [ 0 ] ) ;/ / 1

20 / 34

Page 21: Einstieg in die Informatik mit Java - math.kit.edu · In Java konnen wie in C++ mehrere Methoden mit gleichem¨ Namen in einer Klasse existieren. Beispiel double max (double x , double

Zugriffe in einer Instanzmethode

Eine Instanzmethode darf zugreifen auf• Instanzvariablen (*)• Formale Parameter• Lokale Variablen dieser Methode• Aufrufe anderer Instanzmethoden (*)

(*) Angabe des Instanznamens ist nicht notig, die Instanz istbereits bekannt!class Punkt {

. . .void weitVerschieben ( ) {

verschieben (1000 , 1000) ;}

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

21 / 34

Page 22: Einstieg in die Informatik mit Java - math.kit.edu · In Java konnen wie in C++ mehrere Methoden mit gleichem¨ Namen in einer Klasse existieren. Beispiel double max (double x , double

Bemerkungen zu Methoden

• Lokale Variablen durfen nicht den gleichen Namen wie einformaler Parameter besitzen.

• Die aktuelle und formale Parameterliste mussen nicht diegleichen Bezeichner enthalten.

• Formale Parameter bzw. lokale Variablen durfen dengleichen Bezeichner wie ein Attribut besitzen. ZurUnterscheidung schreibt man dann this.Attributname

• this ist eine Referenz auf die aktuell bearbeitete Instanzder Klasse.

class Gleichnamig {i n t x , y ;void speichern ( i n t x , i n t y ) {

th is . x = x ;th is . y = y ;

}} . . .Gleichnamig g l = new Gleichnamig ( ) ;g l . speichern (33 ,44 ) ; / / t h i s e n t s p r i c h t g l 22 / 34

Page 23: Einstieg in die Informatik mit Java - math.kit.edu · In Java konnen wie in C++ mehrere Methoden mit gleichem¨ Namen in einer Klasse existieren. Beispiel double max (double x , double

Gliederung

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()

23 / 34

Page 24: Einstieg in die Informatik mit Java - math.kit.edu · In Java konnen wie in C++ mehrere Methoden mit gleichem¨ Namen in einer Klasse existieren. Beispiel double max (double x , double

Datenkapselung

Zur Datenkapselung kann die Sichtbarkeit der Elemente mitHilfe von vorangestellten Modifizierern geregelt werden.

Mogliche Modifiziererpublic 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 Datenkapselungoft mit dem Modifizierer private versehen.

• Die Klasse selber darf nur Standardrechte oderpublic–Rechte besitzen.

• In einer Datei durfen mehrere Klassen definiert werden,jedoch darf nur eine davon public–Rechte besitzen. DieseKlasse muss den gleichen Namen wie die Datei tragen.

24 / 34

Page 25: Einstieg in die Informatik mit Java - math.kit.edu · In Java konnen wie in C++ mehrere Methoden mit gleichem¨ Namen in einer Klasse existieren. Beispiel double max (double x , double

Beispiel zur Klassendefinition und Datenkapselung

Nachfolgend wird der neue Datentyp Point definiert.

class Poin t {private double x , y ; / / geschu tz t vor unberecht . Z u g r i f fpublic double getx ( ) {

return x ;}public double gety ( ) {

return y ;}void move ( double dx , double dy ) {

x += dx ; y += dy ;}

public s t a t i c void main ( S t r i n g [ ] args ) {Poin t p = new Poin t ( ) ; / / b i l d e t Ins tanz der Klasse

} / / Po in t durch Au f ru f des} / / S tandardkonst ruk tors

25 / 34

Page 26: Einstieg in die Informatik mit Java - math.kit.edu · In Java konnen wie in C++ mehrere Methoden mit gleichem¨ Namen in einer Klasse existieren. Beispiel double max (double x , double

Zugriff auf Elemente

Außerhalb der Klasse, d.h. in einer anderen Klasse, ist derZugriff nur auf sichtbare Komponenten erlaubt. Diese sindfolglich mit offentlichen Zugriffsrechten (public) bzw. fur denFall, dass sich die Klasse im gleichen Verzeichnis befindet, mitStandardrechten ausgestattet.

Syntax

Instanzname.Komponenten bei Instanzkomponenten

Beispiel (erweiterte Klasse Point)

. . ./ / im Hauptprogramm :System . out . p r i n t l n ( ” x−Koodinate von p ” + p . getx ( ) ) ;System . out . p r i n t l n ( p . x ) ;/ / s yn tak t i s ch r i c h t i g ,. . ./ / aber Z u g r i f f verboten !

26 / 34

Page 27: Einstieg in die Informatik mit Java - math.kit.edu · In Java konnen wie in C++ mehrere Methoden mit gleichem¨ Namen in einer Klasse existieren. Beispiel double max (double x , double

Gliederung

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()

27 / 34

Page 28: Einstieg in die Informatik mit Java - math.kit.edu · In Java konnen wie in C++ mehrere Methoden mit gleichem¨ Namen in einer Klasse existieren. Beispiel double max (double x , double

Uberladen von Methoden

In Java konnen wie in C++ mehrere Methoden mit gleichemNamen in einer Klasse existieren.

Beispiel

double max ( double x , double y ) { . . . }i n t max ( i n t x , i n t y ) { . . . }

• Die Methoden mussen unterschiedliche Parameterlistenbesitzen.

• Der Ergebnistyp ist frei wahlbar. Allerdings ist es nichterlaubt, dass sich die Methoden nur in ihrem Ergebnistypunterscheiden.→ Signatur: Name und Parameterliste sind entscheidend.

28 / 34

Page 29: Einstieg in die Informatik mit Java - math.kit.edu · In Java konnen wie in C++ mehrere Methoden mit gleichem¨ Namen in einer Klasse existieren. Beispiel double max (double x , double

Gliederung

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()

29 / 34

Page 30: Einstieg in die Informatik mit Java - math.kit.edu · In Java konnen wie in C++ mehrere Methoden mit gleichem¨ Namen in einer Klasse existieren. Beispiel double max (double x , double

Variable Argumentliste

SyntaxTyp ... Bezeichner

Wird in der Methode als Feld vom angegebenen Typinterpretiert

class F l e x i b e l {void ausgeben ( i n t . . . x ) {

for ( i n t i =0; i <x . leng th ; i ++)System . out . p r i n t l n ( x [ i ] ) ;

}}. . .F l e x i b e l f = new F l e x i b e l ( ) ;f . ausgeben ( 1 , 2 , 3 ) ; / / d r e i e in fache i n t/ / 1 2 3

30 / 34

Page 31: Einstieg in die Informatik mit Java - math.kit.edu · In Java konnen wie in C++ mehrere Methoden mit gleichem¨ Namen in einer Klasse existieren. Beispiel double max (double x , double

Gliederung

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()

31 / 34

Page 32: Einstieg in die Informatik mit Java - math.kit.edu · In Java konnen wie in C++ mehrere Methoden mit gleichem¨ Namen in einer Klasse existieren. Beispiel double max (double x , double

Laufanweisung fur Felder

Syntaxfor (Komponententyp Bezeichner : Feldname ) ...

Der Bezeichner durchlauft alle Feldelelemente.

double [ ] x = {1.5 , 2 .3 , 3 .7} ;/ / bekannte Var ian te :for ( i n t i =0; i <x . leng th ; i ++)

System . out . p r i n t l n ( x [ i ] ) ;/ / neue Var ian te :for ( double x i : x )

System . out . p r i n t l n ( x i ) ;

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

32 / 34

Page 33: Einstieg in die Informatik mit Java - math.kit.edu · In Java konnen wie in C++ mehrere Methoden mit gleichem¨ Namen in einer Klasse existieren. Beispiel double max (double x , double

Gliederung

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()

33 / 34

Page 34: Einstieg in die Informatik mit Java - math.kit.edu · In Java konnen wie in C++ mehrere Methoden mit gleichem¨ Namen in einer Klasse existieren. Beispiel double max (double x , double

Methode toString()

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

}

toString() wird automatisch aufgerufen, wenn eineString-Darstellung eines Objekts gebraucht wird – z.B. bei derAusgabe.

class Punkt {double x , y ;public S t r i n g t o S t r i n g ( ) {

return x + ” , ” + y ;}

} . . .Punkt p = new Punkt ( ) ;System . out . p r i n t l n ( p ) ; / / r u f t t o S t r i n g ( ) auf/ / Ausgabe : 0 , 0 34 / 34