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

Post on 03-Sep-2019

4 views 0 download

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

Einstieg in die Informatik mit JavaKlassen mit Instanzmethoden

Gerd Bohlender

Institut fur Angewandte und Numerische Mathematik

1 / 34

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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