Einstieg in die Informatik mit Java

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

Transcript of Einstieg in die Informatik mit Java

Page 1: Einstieg in die Informatik mit Java

Einstieg in die Informatik mit JavaObjektorientierte Programmierung und Klassen mit

Instanzmethoden

Gerd Bohlender

Institut fur Angewandte und Numerische Mathematik

1 / 39

Page 2: Einstieg in die Informatik mit Java

Gliederung

1 Uberblick: Klassen und Objektorientierung

2 Philosophie der Objektorientierten Programmierung

3 Definition von Klassen

4 Datenkapselung

5 Instanzen

6 Zugriff auf Elemente

7 Konstruktoren

8 Speicherverwaltung

9 Variable Argumentliste

10 Laufanweisung fur Felder

11 Methode toString()

2 / 39

Page 3: Einstieg in die Informatik mit Java

Gliederung

1 Uberblick: Klassen und Objektorientierung

2 Philosophie der Objektorientierten Programmierung

3 Definition von Klassen

4 Datenkapselung

5 Instanzen

6 Zugriff auf Elemente

7 Konstruktoren

8 Speicherverwaltung

9 Variable Argumentliste

10 Laufanweisung fur Felder

11 Methode toString()

3 / 39

Page 4: Einstieg in die Informatik mit Java

Uberblick: Klassen und Objektorientierung

In diesem Kapitel werden Klassen und objektorientierteProgrammierung in Java beschrieben.

Objektorientierte ProgrammierungVorteile, Paradigmen

KlassenDarstellung in Java,Klassen- und Instanzkomponenten

4 / 39

Page 5: Einstieg in die Informatik mit Java

Gliederung

1 Uberblick: Klassen und Objektorientierung

2 Philosophie der Objektorientierten Programmierung

3 Definition von Klassen

4 Datenkapselung

5 Instanzen

6 Zugriff auf Elemente

7 Konstruktoren

8 Speicherverwaltung

9 Variable Argumentliste

10 Laufanweisung fur Felder

11 Methode toString()

5 / 39

Page 6: Einstieg in die Informatik mit Java

Philosophie der Objektorientierten Programmierung

Paradigmen(1) Generalisierung: Gemeinsame Strukturen von Objekten

werden in Superklassen zusammengefasst.(2) Vererbung: Eigenschaften einer Superklasse werden

automatisch an eine Subklasse vererbt.(3) Daten-Kapselung: Variablen und Methoden werden in

einem Objekt zusammengefasst. Die interne Struktur wirdvor dem Benutzer versteckt, der Zugriff erfolgt nur ubergenau definierte Schnittstellen.

(4) Polymorphie: Eine Methode kann in verschiedenenSubklassen individuell angepasst werden.

Vorteile• Es entsteht weniger Quelltext.• Es bestehen weniger Fehlermoglichkeiten.• Das Programm erhalt eine bessere Strukturierung.• Der Quelltext ist besser wartbar. 6 / 39

Page 7: Einstieg in die Informatik mit Java

Die Philosophie

Beispiel

Superklasse

6 6

Subklasse Subklasse

6 6

Lebewesen

6 6

Tiere Pflanzen

. . . . . .

6 6

7 / 39

Page 8: Einstieg in die Informatik mit Java

Gliederung

1 Uberblick: Klassen und Objektorientierung

2 Philosophie der Objektorientierten Programmierung

3 Definition von Klassen

4 Datenkapselung

5 Instanzen

6 Zugriff auf Elemente

7 Konstruktoren

8 Speicherverwaltung

9 Variable Argumentliste

10 Laufanweisung fur Felder

11 Methode toString()

8 / 39

Page 9: Einstieg in die Informatik mit Java

Definition von Klassen

SyntaxModifizierer class Bezeichner {Elementliste}

Die Elementliste besteht u.a. aus• Attributen (d. h. Instanzvariablen),• Instanzmethoden,• Konstruktoren, sowie• Klassenvariablen und• Klassenmethoden.

Zweck der Instanzmethoden:• Bearbeitung der Attribute,• Klassen werden zu ”aktiven“ Objekten,•

”Kommunikation“ mit anderen Klassen.

9 / 39

Page 10: Einstieg in die Informatik mit Java

Gliederung

1 Uberblick: Klassen und Objektorientierung

2 Philosophie der Objektorientierten Programmierung

3 Definition von Klassen

4 Datenkapselung

5 Instanzen

6 Zugriff auf Elemente

7 Konstruktoren

8 Speicherverwaltung

9 Variable Argumentliste

10 Laufanweisung fur Felder

11 Methode toString()

10 / 39

Page 11: Einstieg in die Informatik mit Java

Datenkapselung

Mogliche Modifiziererprivate Element kann nur von der eigenen Klasse verwendet werden.nichts Standard-Rechte, auch friendly oder package private genannt.

Element kann in der Klasse selber sowie in allen Klassendes gleichen ”Pakets“ (i.a. = Verzeichnis) verwendet werden.

protected (wird spater behandelt)public Element kann von jeder Klasse verwendet werden.

• Datenelemente werden aus Grunden der Datenkapselungoft mit dem Modifizierer private versehen.

• Der Zugriff auf die Komponente name wird dann oftrealisiert mit public-Methoden getName() bzw.setName(...)

• Der Vorteil dabei ist: hierbei konnen ggf. Tests undKontrollen durchgefuhrt werden.

11 / 39

Page 12: Einstieg in die Informatik mit Java

Zugriffsrechte bei der Klasse

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

12 / 39

Page 13: Einstieg in die Informatik mit Java

Beispiel: Point

Beispiel zur Klassendefinition und DatenkapselungNachfolgend 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

13 / 39

Page 14: Einstieg in die Informatik mit Java

Gliederung

1 Uberblick: Klassen und Objektorientierung

2 Philosophie der Objektorientierten Programmierung

3 Definition von Klassen

4 Datenkapselung

5 Instanzen

6 Zugriff auf Elemente

7 Konstruktoren

8 Speicherverwaltung

9 Variable Argumentliste

10 Laufanweisung fur Felder

11 Methode toString()

14 / 39

Page 15: Einstieg in die Informatik mit Java

Instanzen

AchtungUnterscheidung zwischen Klasse und Instanz!

Klasse Datentyp,es wird noch kein Speicher fur Komponenten reserviert.

Instanz Variable des Datentyps, auch Objekt genanntes wird fur Komponenten Speicher reserviert(→ Instanzvariablen, Instanz–Methoden).

• Von einer Klasse konnen viele Instanzen (bzw. Objekte)gebildet werden.

• Die Instanzen sind dann zwar vom selben Datentyp, belegenaber nicht die selben Speicherbereiche. Dadurch sind sievoneinander unabhangig handhabbar.

• Eine Ausnahme bilden Komponenten mit dem Modifiziererstatic. Diese werden fur die gesamte Klasse nur einmalangelegt, unabhangig davon, ob keine, eine oder mehrereInstanz(en) der Klasse gebildet wurden (→ Klassenvariablen,Klassenmethoden).

15 / 39

Page 16: Einstieg in die Informatik mit Java

Gliederung

1 Uberblick: Klassen und Objektorientierung

2 Philosophie der Objektorientierten Programmierung

3 Definition von Klassen

4 Datenkapselung

5 Instanzen

6 Zugriff auf Elemente

7 Konstruktoren

8 Speicherverwaltung

9 Variable Argumentliste

10 Laufanweisung fur Felder

11 Methode toString()

16 / 39

Page 17: Einstieg in die Informatik mit Java

Zugriff auf Elemente

Erinnerung: SyntaxModifizierer class Bezeichner {Elementliste}

Elementvariablen und Elementmethoden werden auch unterdem Begriff Komponenten zusammengefasst.

• Innerhalb der Klasse ist der Zugriff auf alle ihreKomponenten erlaubt.

• Klassenkomponenten (Klassenmethoden,Klassenvariablen) sind mit dem Modifizierer staticversehen

• Sie durfen andere Klassenkomponenten verwendeneinfach durch Angabe des entsprechenden Bezeichners.

• Klassenkomponenten durfen auf Instanzkomponen-ten nur zugreifen, wenn eine konkrete Instanz genannt wird:

Instanzname.Bezeichner

17 / 39

Page 18: Einstieg in die Informatik mit Java

Zugriff auf Elemente: Instanzkomponenten

• Instanzkomponenten (Instanzmethoden, Instanzvariablen)werden ohne den Modifizierer static definiert.

• Sie durfen andere Instanzkomponenten der gleichenInstanz sowie Klassenkomponenten verwenden einfachdurch Angabe des entsprechenden Bezeichners.

• Instanzkomponenten durfen auch auf Instanzkomponentenanderer Instanzen zugreifen, wenn diese konkrete Instanzgenannt wird:

Instanzname.Bezeichner

18 / 39

Page 19: Einstieg in die Informatik mit Java

Zugriff auf Elemente: Beispiel

Beispiel zum Zugriff auf Instanzkomponenten

class Poin t {double x , y ;double abstand ( Po in t p ) {

double dx = p . x−x ;/ / x = x−Koordinate der a k t ue l l e n Ins tanz/ / p . x = x−Koordinate der Ins tanz pdouble dy = p . y−y ;/ / analogreturn Math . s q r t ( dx∗dx + dy∗dy ) ;

}}

19 / 39

Page 20: Einstieg in die Informatik mit Java

Zugriff auf Elemente, this

• Wird der Bezeichner durch eine gleichnamige lokaleVariable verdeckt, kann mit

this.Bezeichner

auf die Komponenten der gerade aktiven Instanzzugegriffen werden.

• this ist dabei eine Referenz auf die momentan betrachteteInstanz. Diese wird beim ersten Aufruf einerInstanzmethode vor dem Punkt angegeben und dann anweitere darin aufgerufene Instanzmethoden weitergereicht:

Instanz.Instanzmethode ()

Achtungthis ist nur in Instanzmethoden definiert! In Klassenmethodenist es unzulassig, da es dort keine Referenz auf die momentanbetrachtete Instanz gibt.

20 / 39

Page 21: Einstieg in die Informatik mit Java

Zugriff auf Elemente

Beispiel zu this

public class Point2{private double x , y ; / / I ns tanzva r i ab lenpublic double getx ( ) {

return x ;}public double gety ( ) {

return y ;}void move( double x , double y ){

th is . x = x ; / / Ueberschreiben der I n s t . var .th is . y = y ; / / m i t den gleichnamigen Var . x , y

}

public s t a t i c void main ( S t r i n g s ){Point2 p2 = new Point2 ( ) ; / / Ins tanz erzeugenp2 . move (100 , 200) ; / / Punkt p2 verschieben

}}

21 / 39

Page 22: Einstieg in die Informatik mit Java

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 bzw. fur den Fall, dasssich die Klasse im gleichen Verzeichnis befindet, mitStandardrechten ausgestattet.

Syntax

Klassenname.Komponente bei KlassenkomponentenInstanzname.Komponente bei Instanzkomponenten

auch moglich:Instanzname.Komponente bei Klassenkomponenten

Beispiel (erweiterte Klasse Point2)

. . . / / 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 !22 / 39

Page 23: Einstieg in die Informatik mit Java

Gliederung

1 Uberblick: Klassen und Objektorientierung

2 Philosophie der Objektorientierten Programmierung

3 Definition von Klassen

4 Datenkapselung

5 Instanzen

6 Zugriff auf Elemente

7 Konstruktoren

8 Speicherverwaltung

9 Variable Argumentliste

10 Laufanweisung fur Felder

11 Methode toString()

23 / 39

Page 24: Einstieg in die Informatik mit Java

Konstruktoren

Beim letzten Beispiel gab es die Moglichkeit, Werte fur dieVariablen x und y uber die Methode move vorzugeben.

Beispiel

. . . / / im Hauptprogramm :Point2 p2 = new Point2 ( ) ; / / erzeuge Ins tanzp2 . move(1000 , 1000) ;/ / be leg t x , y mi t 1000. . .

AchtungNachteil: Die Methode move muss fur jedes neue Objektaufgerufen werden! Besser ist die Verwendung einesKonstruktors.

24 / 39

Page 25: Einstieg in die Informatik mit Java

Konstruktoren

• Konstruktoren erlauben es sehr komfortabelInstanzvariablen schon bei der Erzeugung einerInstanz/eines Objektes zu initialisieren.

• Ein Konstruktor ist eine spezielle Methode ohneErgebnistyp (auch nicht void), die den gleichen Namenwie die Klasse tragt.

• Konstruktoren konnen uberladen werden, d.h. es durfenmehrere Konstuktoren existieren.

• Konstruktoren durfen nicht static sein und keinereturn-Anweisung enthalten.

• Ein Konstruktor ohne Argumente wird Standardkonstruktorgenannt. Werden keine Konstruktoren definiert, so erzeugtder Kompiler automatisch den Standardkonstruktor,andernfalls nicht.

• Ein Konstruktor kann einen anderen Konstruktor mit derNotation this(...) aufrufen. Dieser Aufruf ist allerdingsnur als erste Anweisung eines Konstruktors erlaubt.

25 / 39

Page 26: Einstieg in die Informatik mit Java

Konstruktoren: Aufruf

Aufruf von Konstruktoren:• Ein Konstruktor wird mit dem Zusatz new ahnlich wie eine

Methode aufgerufen.• Als Ergebnis liefert er eine Referenz auf die neue Instanz.• Diese Referenz kann in einer Referenzvariablen vom

passenden Typ gespeichert werden.• new beschafft den benotigten Speicher fur die

Instanzvariablen, diese werden initialisiert, dann werdendie angegebenen Anweisungen im Konstruktor ausgefuhrt.

Syntax Konstruktoraufrufnew Klassenname (Wert, ...)

26 / 39

Page 27: Einstieg in die Informatik mit Java

Beispiel zur Verwendung von Konstruktoren

Beispiel, Erganzung zu Point

public Poin t ( double x , double y ) { / / 1 . Kons t ruk to rth is . x = x ;th is . y = y ;

}public Poin t ( ) { / / 2 . Kons t ruk to r = Standardkons t ruk tor

x = 0; / / a l t e r n a t i v ueber Au f ru fy = 0; / / des 1 . Kons t ruk to rs : t h i s ( 0 , 0 ) ;

}public Poin t ( double xy ) { / / 3 . Kons t ruk to r

th is ( xy , xy ) ; / / Au f ru f des 1 . Kons t ruk to rs/ / a l t e r n a t i v : x = y = xy ;

}/ / im Hauptprogramm :public s t a t i c void main ( S t r i n g [ ] args ) {

Poin t q = new Poin t ( 1 , 2 ) ; / / Au f ru f des 1 . Konstr .Poin t r = new Poin t ( ) ; / / Au f ru f des 2 . Konstr .Poin t s = new Poin t ( 5 ) ; / / Au f ru f des 3 . Konstr .

}27 / 39

Page 28: Einstieg in die Informatik mit Java

Beispiel: Fehlerhafte KonstruktorenBeispiel zu fehlerhaften Konstruktoren

class Fehler {i n t x , y ;Fehler ( i n t x ) { / / K1

x = th is . x ; / / Unsinn !}Fehler ( i n t x , i n t y ) { / / K2

th is . y = y ; / / Ze i l e 1th is ( x ) ; / / Ze i l e 2 r u f t K1 , h i e r verboten !/ / Ze i len 1 und 2 ver tausch t : waere okay

}Fehler ( i n t x , boolean diag ) { / / K3

i f ( d iag ) th is ( x , x ) ; / / r u f t K2 , h i e r verboten !else th is ( x ) ; / / r u f t K1 , h i e r verboten !/ / t h i s ( . . . ) i n bed ing te r Anweisung etc . n i c h t moeglich

}public s t a t i c void main ( S t r i n g [ ] args ) {

Fehler f = new Fehler ( ) ; / / S tandardkons t ruk tor/ / d ieser Kons t ruk to r e x i s t i e r t n i c h t !

}} 28 / 39

Page 29: Einstieg in die Informatik mit Java

Gliederung

1 Uberblick: Klassen und Objektorientierung

2 Philosophie der Objektorientierten Programmierung

3 Definition von Klassen

4 Datenkapselung

5 Instanzen

6 Zugriff auf Elemente

7 Konstruktoren

8 Speicherverwaltung

9 Variable Argumentliste

10 Laufanweisung fur Felder

11 Methode toString()

29 / 39

Page 30: Einstieg in die Informatik mit Java

Garbage Collection

In Java gibt es kein Gegenstuck zum Konstruktor – etwa einen

”Destruktor“ wie in manchen anderen Programmiersprachen.Der Speicher von nicht mehr referenzierten Objekten wirdfruher oder spater automatisch freigegeben, im schlimmstenFall erst am Programmende → Garbage collection.

Expliziter Aufruf der Garbage CollectionSystem.gc();

Beispiel

S t r i n g s = ” blub ” ;. . .s = nul l ; / / Ref . auf ” blub ” geht ver lo ren ,/ / so fern keine we i te re Referenz ex .

30 / 39

Page 31: Einstieg in die Informatik mit Java

Garbage Collection

Beispiel

class Demo { } . . .Demo d = new Demo ( ) ; / / Ins tanz der Klasse Demo. . .d = new Demo ( ) ; / / neue Instanz , a l t e geht ve r l o ren

AchtungSelbst beim expliziten Aufruf des Garbage collectors muss derSpeicher nicht komplett freigegeben werden!

31 / 39

Page 32: Einstieg in die Informatik mit Java

finalize

Sind weitere Aufraumarbeiten wie das Zahlen lebenderObjekte, Abbau der Internetverbindung usw. notig, dann kannman eine Methode finalize() definieren. Diese wirdaufgerufen, bevor ein Objekt vom Garbage collectorfreigegeben wurde.

Syntax

protected void f i n a l i z e ( ) throws Throwable {. . .}

32 / 39

Page 33: Einstieg in die Informatik mit Java

Lebenszyklen von Klassen und Instanzen

(1) Ein Klasse wird ”geladen“ (z. B. von der Festplatte in denHauptspeicher), sobald sie benotigt wird und wiederentfernt, sobald sie nicht mehr benotigt wird.

(2) Instanzen werden i. allg. mit new erzeugt. Sobald keineReferenz mehr auf die Instanz existiert, kann sie vomJava–System uber die automatische Garbage collectionwieder entfernt werden. Dies kann allerdings spater oderauch gar nicht geschehen (siehe oben).

33 / 39

Page 34: Einstieg in die Informatik mit Java

Gliederung

1 Uberblick: Klassen und Objektorientierung

2 Philosophie der Objektorientierten Programmierung

3 Definition von Klassen

4 Datenkapselung

5 Instanzen

6 Zugriff auf Elemente

7 Konstruktoren

8 Speicherverwaltung

9 Variable Argumentliste

10 Laufanweisung fur Felder

11 Methode toString()

34 / 39

Page 35: Einstieg in die Informatik mit Java

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

35 / 39

Page 36: Einstieg in die Informatik mit Java

Gliederung

1 Uberblick: Klassen und Objektorientierung

2 Philosophie der Objektorientierten Programmierung

3 Definition von Klassen

4 Datenkapselung

5 Instanzen

6 Zugriff auf Elemente

7 Konstruktoren

8 Speicherverwaltung

9 Variable Argumentliste

10 Laufanweisung fur Felder

11 Methode toString()

36 / 39

Page 37: Einstieg in die Informatik mit Java

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.

37 / 39

Page 38: Einstieg in die Informatik mit Java

Gliederung

1 Uberblick: Klassen und Objektorientierung

2 Philosophie der Objektorientierten Programmierung

3 Definition von Klassen

4 Datenkapselung

5 Instanzen

6 Zugriff auf Elemente

7 Konstruktoren

8 Speicherverwaltung

9 Variable Argumentliste

10 Laufanweisung fur Felder

11 Methode toString()

38 / 39

Page 39: Einstieg in die Informatik mit Java

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 39 / 39