Einstieg in die Informatik mit Java - math.kit.edu · In Java konnen wie in C++ mehrere Methoden...
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