DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

60
DVG1 - 13 - Klassen und O bjekte 1 Klassen und Objekte

Transcript of DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

Page 1: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DVG1 - 13 - Klassen und Objekte

1

Klassen und Objekte

Page 2: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

2

Laura Lemay „Java in 21 Tagen“

Objektorientierte Programmierung ist fast wie Bier. Die meisten, die das erste Mal ein Glas des malzigen Getränks zu sich nehmen, mögen es nicht und stellen unter Umständen die Zurechnungsfähigkeit derjenigen in Frage, die ein Loblied auf dieses Getränk singen. »Was hab' ich Dir angetan«, fragen sie, »dass Du mich dieses Höllenzeug trinken lässt?« Nach einiger Zeit kann es durchaus sein, dass die, die trotzdem weiter Bier trinken, es schätzen lernen. (Bei manchen wird dieser Zeitraum Studium genannt.) Objektorientierte Programmierung ist, wie Bier, ein Geschmack, an den man sich gewöhnen muss. Es ist zum einen eine der bemerkenswertesten Ideen der Programmierung, die in den letzten Jahren eingeführt wurden, und zum anderen der Quell großer Bestürzung bei den Programmierern, die damit nicht vertraut sind.

Page 3: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

3

In gewisser Weise ist dieser Ruf gerechtfertigt.Objektorientierte Programmierung, auch OOP genannt, ist ein Fach, das man jahrelang studieren und üben kann. Die Grundidee ist allerdings einfach: Organisieren Sie Ihre Programme auf eine Art, die die Art widerspiegelt, mit der Objekte in der realen Welt organisiert sind.

Erscheinungsjahr 08-1998ISBN-Nummer 3-8272-2030-0Preis DM 79,95

http://www.mut.com/leseecke

Page 4: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

4

Beispiel : Vorfahrtsregel

Aufgabe: Beschreibung der Situation an einer Kreuzung. Es kommen in unregelmäßigen Abständen Fahrzeuge an die

Kreuzung. Es fahren Fahrzeuge ab, die Vorfahrt haben.

Hauptstraße vor Nebenstraße rechts vor links

0

1

2 3

4

5

Page 5: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

5

Modellierung ist relativ einfach. Warteschlangen in den Straßen werden zufällig gefüllt.

FIFO-Speicher (First In - First Out) Abfahren nach Vorfahrtsregeln Blockierung der Kreuzung durch Fahrzeuge Zeittaktung zufällige Einflüsse

Fahrer reagieren unterschiedlich neue Ebene : Fahrer Fahrzeugdefekte neue Ebene : Fahrzeugtechnik Verletzung der Regeln durch manche Fahrer jedes

Fahrzeug verhält sich anders äußere Einflüsse Fahrzeuge mit Sondersignal Wettereinflüsse u.s.w.

Page 6: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

6

Probleme

globale Sicht: Wir nehmen den Standpunkt des Beobachters ein und steuern die Szene von oben.

Alle Informationen sind zentral verfügbar, also auch zentral zu verwalten.

Das Programm wird sehr komplex und wenig strukturiert. Beschreibung bleibt trotzdem unvollkommen. Das Programm spiegelt die Realität nur sehr unvollkommen wieder. In dem Programm sind sehr unterschiedliche Größenordnungen

vorhanden: global: z.B. Wettereinflüsse regionale lokal bis mikro

Page 7: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

7

Ausweg

Bildung von klaren Strukturen durch Betrachtung als Objekte Jedes Objekt weiß nur über sich selbst Bescheid.

Fahrzeug weiß nichts über globale Luftströmungen und deren Einfluss auf das Wetter im Kreuzungsbereich.

Fahrzeug weiß nichts über den Ladungsträgertransport in den Prozessoren seines Motors.

Objekte können aus Teilobjekten bestehen und können Teilobjekt eines größeren Objektes sein.

Kreuzung besteht aus mehreren Straßen Auto enthält Motor, Getriebe, Treibstofftank,...

Objekte tauschen Informationen über klar definierte Schnittstellen aus.

Lichtsignale, Hupen Schalter, Regler, Anschlüsse

Page 8: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

8

Vorteile

Teilobjekte brauchen nur soweit modelliert zu werden, wie es für die Lösung der Aufgabe erforderlich ist.

Modellierung kann nachträglich verfeinert werden. Teilobjekte können zu verschiedenen Zeiten von verschiedenen

Leuten entwickelt, getestet und modifiziert werden, solange die vereinbarten Schnittstellen eingehalten werden.

Anwendungssicherheit: Nutzer eines Objektes kann nur über die zugelassenen Schnittstellen Einfluss auf das Objekt nehmen.

Page 9: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

9

Probleme

Jedes Objekt unterscheidet sich von jedem anderen. Jedes Objekt ist neu zu beschreiben. Große Mengen von Programmcode. Großer Testaufwand. Objekte sind gekennzeichnet durch:

Attribute Zustände, Eigenschaften, Parameter

Zugriffsmethoden Möglichkeiten die Attribute zu verändern

Kommunikation mit anderen Objekten über Nachrichten. Möglichkeiten mit anderen Objekten Informationen

auszutauschen

Page 10: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

10

Ausweg

Viele Objekte haben mehr oder weniger große Gemeinsamkeiten. Fahrzeuge

Lastkraftwagen, Personenwagen, Motorräder, Fahrräder Straßen

Hauptstraßen, Nebenstraßen Objekte lassen sich klassifizieren. Klassen sind Objekttypen, abstrakte Objekte Ein Objekt ist eine konkrete Realisierungen einer Klasse, eine

Instanz einer Klasse.

Page 11: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

11

Neue Klassen lassen sich aus schon bekannten Klassen ableiten. Fahrzeug

Lastkraftwagen LKW mit Anhänger LKW ohne Anhänger

Koffer Sattelschlepper

Personenwagen Motorräder

Motorrad Motorroller Beiwagenmaschine

Page 12: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

12

Abgeleitete Klassen übernehmen Attribute und Methoden von der ursprünglichen

Klasse fügen neue Attribute und Methoden hinzu überschreiben Attribute und Methoden realisieren abstrakte Methoden

Page 13: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

13

Bruce Eckle - Thinking in JAVA

•Everything is an object.

•A program is an bunch of objects telling each other what to do by sending messages.

•Each object has its own memory made up of other objects.

•Every object has a type.

•All objects of particular type can receive the same messages.

Page 14: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

14

Klassen-Definition in JAVA

Klassendefinition bestehen aus Klassenkopf

Name der Klasse Kennzeichnung als abstrakte Klasse (abstract) Kennzeichnung als finale Klasse (final) Modifizierer (public) Ableitung von anderen Klassen (extends) Realisierung von Interfaces (implements)

Klassenrumpf Attribute (Eigenschaften, Daten) statische Initialisierer Konstruktoren (initialisiert ein Objekt der Klasse) Methoden (Schnittstellen, Prozeduren, Funktionen) interne Klassen

Page 15: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

15

Klassenkopf

[public] [final] [abstract] class Bezeichner [extends Klasse] [implements Interface,...,Interface]

public : Die Klasse ist für alle anderen Klassen sichtbar und verwendbar. Wenn nicht angegeben, ist die Klasse nur im selben package sichtbar und verwendbar (in C++ friendly).

final: Von der Klasse können keine weiteren Klassen abgeleitet werden.

abstract: Die Klasse enthält nicht vollständig definierte (abstrakte) Methoden. Es können keine Objekte von dieser Klasse erzeugt werden.

final und abstract können nicht gleichzeitig verwendet werden!

Page 16: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

16

extends: Die Klasse erweitert eine bekannte Klasse. z.B.: public class Fahrzeug { ..... } public class Lastkraftwagen extends Fahrzeug {......}

Lastkraftwagen ist eine Spezialisierung der Klasse Fahrzeug

implements: Die Klasse implementiert ggf. mehrere Schnittstellen (interface)

Interface sind (abstrakte) Klassen, die ausschließlich abstrakte Methoden enthalten.

Page 17: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

17

Das erste Programm

public class Hello{

public static void main (String [] args){

System.out.println("Hello, world!");}

}

ist von keiner Klasse abgeleitet Hello wird von der allgemeinsten Klasse Object abgeleitet. Man könnte auch schreiben: public class Hello extends Object

enthält keine Attribute, keine statischen Initialisierer, keine Konstruktoren, keine internen Klassen

enthält nur die Methode main

Page 18: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

18

Beispiel

class Punkt { ... }

• Die Klasse Punkt beschreibt die Eigenschaften eines allgemeinen Punktes.

class farbigerPunkt extends Punkt { ... }

• Die Klasse farbigerPunkt beschreibt die Eigenschaften eines farbigen Punktes. Er hat zusätzlich zu den Eigenschaften eines Punktes eine Farbe.

Page 19: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

19

Attribute

public : Daten sind aus allen anderen Klassen heraus lesbar und schreibbar.

private : Daten sind nur in der Klassen lesbar und schreibbar, in der sie definiert sind.

protected : Daten sind lesbar und schreibbar in Klassen die aus der Klasse abgeleitet wurden Klassen die zum selben Package gehören

keine Angabe : Daten sind nur in allen Klassen lesbar und schreibbar die zum selben Package gehören.

[Modifizierer] [final] Typ [ []...[] ] name [ = Initialisierer] ;

Modifizierer : public , private, protected

Page 20: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

20

final : Daten können nie verändert werden und behalten immer den Wert der Initialisierung (Konstanten).

Typ beliebiger primitiver Datentyp beliebiger Referenztyp

Felder Klassen

[] ... [] : Kennzeichnung für n-dimensionale Felder Initialisierer

beliebiger Ausdruck Feldinitialisierer : { Initialisierer,..., Initialisierer }

Page 21: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

21

Beispiel (Klassenerweiterung)

class Punkt{

int x;int y;

}

• x und y sind die Koordinaten des Punktes.

class farbigerPunkt extends Punkt{

float r, g, b; // Farbanteil 0.0 ... 1.0}

• Die Klasse farbigerPunkt erweitert die Klasse Punkt um die Farbe des Punktes als rot-, grün- und blau-Anteil.

Page 22: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

22

Zugriff zu den Attributen

Z.B.:

ObjektName.AttributName

public class Punkt01{public static void main (String[]args){Punkt P1 = new Punkt();farbigerPunkt P2 = new farbigerPunkt();P1.x = 100;P1.y = 200;P2.x = P1.x;P2.y = P1.y;P2.r = 0.0;P2.g = 0.0;P2.b = 0.0;}}

Page 23: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

23

Beispiel (Klassenkomposition)class Punkt{

int x;int y;

}

• x und y sind die Koordinaten des Punktes.

class farbigerPunkt{

Punkt p; // Koordinaten des Punktesfloat r, g, b; // Farbanteil 0.0 ... 1.0

}

• Die Klasse farbigerPunkt beinhaltet zusätzlich zu den Koordinaten die Farbe des Punktes als rot-, grün- und blau-Anteil.

Page 24: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

24

Zugriff zu den Attributen

Z.B.:

ObjektName.AttributName

public class Punkt01a{public static void main (String[]args){Punkt P1 = new Punkt();farbigerPunkt P2 = new farbigerPunkt();P1.x = 100;P1.y = 200;P2.p = new Punkt();P2.p.x = P1.x;P2.p.y = P1.y;P2.r = 0.0;P2.g = 0.0;P2.b = 0.0;}}

Page 25: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

25

Methoden

public : Methoden sind aus allen anderen Klassen heraus benutzbar.

private : Methoden sind nur in der Klassen benutzbar in der sie enthalten sind.

protected : Methoden sind benutzbar in Klassen die aus der Klasse abgeleitet wurden Klassen die zum selben Package gehören

keine Angabe : Methoden sind nur in allen Klassen benutzbar die zum selben Package gehören.

[Modifizierer] [final] [abstract] Typ Name ( [formaleParameterliste] ) [ []...[] ] [throws Ausnahme,...,Ausnahme] Block

Modifizierer : public , private, protected

Page 26: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

26

final : Methoden können nie verändert werden. abstract: Von der Methode sind nur die Schnittstellen (Typ,

Name, Parameterliste, ...) definierte, aber nicht der Körper. Damit muss die gesamte Klasse als abstract definiert werden. Von der Klasse können keine Objekte definiert werden.

Typ : Typ des Wertes den die Methode zurückgibt (return-Anweisung)

beliebiger primitiver Datentyp beliebiger Referenztyp

Felder Klassen

void wenn die Methode keinen Wert zurückgibt

Page 27: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

27

[] ... [] : Kennzeichnung für n-dimensionale Felder throws : Liste der Ausnahmen, die in der Methode eintreten

können und nicht behandelt werde, die also nach außen gereicht werden.

formaleParameterliste : Typ Name,...,Typ Name Die Klammern () müssen auch angegeben werden, wenn die

Parameterliste leer ist! Block:

{ Anweisungsfolge } bei nicht-abstrakten Methoden ; bei abstrakten Methoden

Page 28: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

28

Beispiel

class Punkt{

private int x;private int y;public void setCoords(int x0, int y0){

x=x0; y=y0;}public int getX (){

return x;}public int getY (){

return y;}

}

Page 29: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

29

class farbigerPunkt extends Punkt

{

private float r, g, b;

public void setColor (float r0, float g0, float b0)

{

if ( (0.0f<=r0) & (r0<=1.0f) & ... )

{ r=r0; g=g0; b=b0; }

}

public float getR () { return r; }

public float getG () { return g; }

public float getB () { return b; }

}

Page 30: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

30

public class Punkt02

{

public static void main (String[]args)

{

Punkt P1 = new Punkt();

farbigerPunkt P2 = new farbigerPunkt();

P1.setCoords(100,200);

P2.setCoords(P1.getX(), P1.getY());

P2.setColor(0.0f, 0.0f, 0.0f);

}

}

Page 31: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

31

Verbesserung

class Color{ private float r; private float g; private float b; public void setColor(float r0, float g0, float b0) { r=r0; g=g0; b=b0; } public float getR () { return r; } public float getG () { return g; } public float getB () { return b; }}

Page 32: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

32

class Punkt{ ...}

class farbigerPunkt extends Punkt{ private Color color = new Color(); public void setColor(Color c) { color = c; } public Color getColor () { return color; }}

Page 33: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

33

public class Punkt03{public static void main (String[]args){ Punkt P1 = new Punkt(); P1.setCoords(100, 200);

Color c = new Color(); c.setColor(0f, 0f, 0f);

farbigerPunkt P2 = new farbigerPunkt(); P2.setCoords(P1.getX(), P1.getY()); P2.setColor(c);

Punkt P3 = new Punkt(); P3.setCoords(P2.getX(), P2.getY());

farbigerPunkt P4 = new farbigerPunkt(); P4.setCoords(P3.getX(), P3.getY()); P4.setColor(P2.getColor());}}

Page 34: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

34

Klassen-Definition in JAVA Klassendefinition bestehen aus

Klassenkopf Name der Klasse Kennzeichnung als abstrakte Klasse (abstract) Kennzeichnung als finale Klasse (final) Modifizierer (public) Ableitung von anderen Klassen (extends) Realisierung von Interfaces (implements)

Klassenrumpf Daten (Eigenschaften, Attribute) Methoden (Schnittstellen, Prozeduren, Funktionen) Konstruktoren (initialisiert ein Objekt der Klasse) statische Initialisierer interne Klassen

Page 35: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

35

Überladene Methoden

Methoden können überladen werden, d.h. es gibt innerhalb einer Klasse mehrere Methoden mit gleichem Namen, aber unterschiedlicher Parameterliste, d.h. mit unterschiedlicher Anzahl von Parametern oder unterschiedlichen Typen. Der Typ der Methode spielt für die Unterscheidung der Methoden keine Rolle.

Beim Aufruf einer überladenen Methode wird die Menge aller bekannten Methoden in folgenden Svchritten eingeschränkt:

Page 36: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

36

• Name der Methode stimmt überein• Anzahl der Parameter stimmt überein• Wenn es genau eine Methode gibt deren Parameter dem Typ nach genau mit dem Aufruf übereinstimmen, so wird diese gewählt. ==> Ende• Die berechneten Parameter können in die entsprechenden Typen der Methoden-Definition umgewandelt werden. • Erfüllt keine Methode diese Bedingungen, ist der Aufruf unzulässig. ==> Ende• Existiert für eine Methode eine andere Methode, sodaß alle Parameter der einen Methode in die Typen der anderen konvertiert werden können, wird die andere gestrichen.• Bleibt genau eine Methode übrig, so wird diese aufgerufen. ==> Ende• Wenn mehrere Methoden übrigbleiben, ist der Aufruf unzulässig. ==> Ende

Page 37: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

37

Konstruktoren

Modifizierer, formaleParameterliste, throws : wie bei Methoden

Name ist der Name der Klasse kein Typ, auch nicht void ! Wenn kein Konstruktor definiert wird, wird der leere Konstruktor

Name(){} automatisch generiert. Konstruktoren können überladen werden. Konstruktoren werden bei der Erzeugung (Instanziierung) von

Objekten aufgerufen Name obj = new Name (...);

[Modifizierer] Name ( [formaleParameterliste] ) [throws Ausnahme,...,Ausnahme] Rumpf

Modifizierer : public , private, protected

Page 38: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

38

Beispielclass Color{ private float r; private float g; private float b; Color() { setColor(0f, 0f, 0f); } Color(float r, float g, float b) { setColor(r, g, b); } public void setColor(float r0, float g0, float b0) { r=r0; g=g0; b=b0; } public float getR (){ return r; } public float getG (){ return g; } public float getB (){ return b; }}

Page 39: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

39

class Punkt{ private int x; private int y; Punkt() { setCoords(0, 0); } Punkt (int x, int y) { setCoords(x, y); } public void setCoords(int x0, int y0) { x=x0; y=y0; } public int getX (){ return x; } public int getY (){ return y; }}

Page 40: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

40

class farbigerPunkt extends Punkt{ private Color color = new Color(); farbigerPunkt() { setCoords(0, 0); setColor(0f,0f,0f); } farbigerPunkt(int x, int y) { setCoords(x, y); setColor(0f,0f,0f); } farbigerPunkt(int x, int y,

float r, float g, float b) { setCoords(x, y); setColor(r,g,b); }

Page 41: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

41

farbigerPunkt(int x, int y, Color c) { setCoords(x, y); color=c; }

public void setColor(Color c) { color = c; } public void setColor(float r, float g, float b) { color.setColor(r, g, b); }

public Color getColor () { return color; }}

Page 42: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

42

public class Punkt04{public static void main (String[]args){ Punkt P1 = new Punkt(100, 200);

Color c = new Color(0f, 0f, 0f);

farbigerPunkt P2 = new farbigerPunkt(P1.getX(),P1.getY(),c);

Punkt P3 = new Punkt(P2.getX(), P2.getY());

farbigerPunkt P4 = new farbigerPunkt (P3.getX(),P3.getY(),P2.getColor());}}

Page 43: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

43

Das Schlüsselwort this

Mit Hilfe von this kann man sich auf das aktuelle Objekt beziehen.

this: Referenz auf das aktuelle Objekt this(...): Konstruktor der aktuellen Klasse. Kann in einem

Konstruktor als erste Anweisung aufgerufen werden. this.name: Zugriff auf überdeckte Attribute.

Page 44: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

44

Beispielclass Color{ private float r; private float g; private float b; Color() { this(0f, 0f, 0f); } Color(float r, float g, float b) { setColor(r, g, b); } public void setColor(float r, float g, float b) { this.r=r; this.g=g; this.b=b; } public float getR () { return r; } public float getG () { return g; } public float getB () { return b; }}

Page 45: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

45

class Punkt{ private int x; private int y; Punkt() { this(0, 0); } Punkt (int x, int y) { setCoords(x, y); } public void setCoords(int x, int y) { this.x=x; this.y=y; } public int getX () { return x; } public int getY () { return y; } public Punkt mini (Punkt p) { long l = (x*x+y*y); long lp = (p.x*p.x+p.y*p.y); if (lp <= l) return p; return this; }}

Page 46: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

46

Das Schlüsselwort super

Mit Hilfe des Schlüsselwortes super kann man sich auf die Klasse beziehen aus der die aktuelle Klasse abgeleitet wurde (Superklasse).

super(...): Konstruktor der Superklasse. Kann in einem Konstruktor als erste Anweisung aufgerufen werden. Wichtig, da Konstruktoren nicht vererbt werden können.

super.name: Zugriff auf Attribute und Methoden der Superklasse.

Falls in der direkten Superklasse kein passendes Attribut bzw. Methode gefunden wird, wird in deren Superklasse gesucht u.s.w.

Page 47: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

47

class farbigerPunkt extends Punkt{ private Color color = new Color(); farbigerPunkt() { this(0, 0, 0f,0f,0f); } farbigerPunkt(int x, int y) { this(x, y, 0f,0f,0f); } farbigerPunkt(int x, int y, float r, float g, float b) { super(x, y); setColor(r,g,b); } farbigerPunkt(int x, int y, Color c) { super(x, y); color=c; }...}

Page 48: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

48

Beispiel

class Color{... public String toString() { return "(r,g,b) = ("+r+","+g+","+b+")"; }}

class Punkt{... public String toString() { return "(x,y) = ("+x+","+y+")"; }}

Page 49: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

49

class farbigerPunkt extends Punkt{... farbigerPunkt(int x, int y, Color c) { super(x, y); color=c; } public String toString() { return super.toString()+ " ; "+color.toString(); }}

Page 50: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

50

Der Operator instanceof

true : Objekt ist eine Instanz von Klasse oder einer direkten oder indirekten Subklasse von Klasse.

false : sonst (obj instanceof Object) ist immer true für jedes Objekt obj Wichtig: Zuerst die zuletzt abgeleitete Klasse testen!

Objekt instanceof Klasse

Wert : boolean

Page 51: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

51

Beispielpublic class Punkt08{public static void main (String[]args){... Object o = new Object(); System.out.println(className(P1)+" P1 : "+P1); System.out.println(className(P2)+" P2 : "+P2); System.out.println(className(P3)+" P3 : "+P3); System.out.println(className(P4)+" P4 : "+P4); System.out.println(className(P5)+" P5 : "+P5); System.out.println(className(o)+" o");}public static String className(Object o){ if ( o instanceof farbigerPunkt) return "farbigerPunkt"; if ( o instanceof Punkt) return "Punkt"; return "Object";}}

Page 52: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

52

Die Methode finalize

Die Methode finalize wird aufgerufen, bevor ein Objekt durch Garbage-Collection vernichtet wird.

Dient dem „Aufräumen“ z.B.: Schließen von Dateien Setzen von Zählern Freigabe von Ressourcen, die von in anderen Sprachen (z.B. C,

C++) geschriebenen Programmen angefordert wurden.

[Modifizierer] void finalize () [throws Ausnahme,...,Ausnahme] Rumpf

Modifizierer : public , private, protected

Page 53: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

53

Statische Komponenten Alle Programme sind Klassen

Klassen sind nur Definitionen Wer sagt also was abgearbeitet werden soll?

Es gibt Konstanten und Methoden, die allgemein verfügbar sein sollen und nicht an Objekte gebunden sein sollten. Z.B.:

Mathematische Konstanten: Pi=3.14159...; E=2.781... Physikalische Konstanten: c300000 km/s Mathematische Funktionen: sin(x), cos(x), ...

Bestimmte Daten sollten eher an die Klasse als an die Objekte gebunden sein. Z.B.

Zähler wie viele Punkte instanziiert wurden. Statusanzeiger

Page 54: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

54

Statische Attribute und Methoden Modifizierer static,sonst wie andere Attribute und Methoden,

z.B.: private static int Anzahl = 0; public static float max(float x, float y){ return x>y?x:y;}

Statische Initialisierer static{.... Beliebige Anweisungen}

Page 55: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

55

Statische Attribute und Methoden werden durch Klassenname.Attribut bzw. Klassenname.Methode oder durch Objektname.Attribut bzw. Objektname.Methode aufgerufen.

Alle statischen Komponenten einer Klasse werden abgearbeitet, sobald das erste Mal auf eine statische Komponente der Klasse zugegriffen wird bzw. das erste Objekt der Klasse instanziiert wird.

Nicht-statische Komponenten werden bei der Instaziierung eines Objektes der Klasse abgearbeitet.

Es werden alle statischen Komponenten in der Reihenfolge ihres Auftretens abgearbeitet.

Page 56: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

56

Statische Komponenten werden nur einmal eingerichtet, unabhängig von der Anzahl der Objekte die von dieser Klasse instanziiert werden.

In statischen Komponenten können nur andere statische Komponenten verwendet werden.

this ist nicht verfügbar.

Page 57: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

57

Klasse

Abarbeiten derstatic-Anweisungen

Statische Komponente nutzen

Abarbeiten derstatic-Anweisungen

Objekt instanziieren

Abarbeiten der nicht-staticAnweisungen

Objekt instanziieren

Konstruktor abarbeiten

Objekt instanziieren

Page 58: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

58

Klasse

StatischeKomponenten

Nicht-statische

Komponentenje

Objekt

Nicht-statische

Komponentenje

Objekt

Nicht-statische

Komponentenje

Objekt

Nicht-statische

Komponentenje

Objekt

Nicht-statische

Komponentenje

Objekt

Nicht-statische

Komponentenje

Objekt

Nicht-statische

Komponentenje

Objekt

Nicht-statische

Komponentenje

Objekt

Page 59: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

59

Beispiel

class Punkt{ static protected int Anzahl=0; public static int getAnzahl() { return Anzahl; } Punkt (int x, int y) { setCoords(x, y); Anzahl++; } public void finalize() { Anzahl--; }...

Page 60: DVG1 - 13 - Klassen und Objekte1 Klassen und Objekte.

DV

G1

- 13 - K

lasse

n u

nd O

bje

kte

60

Innere Klassen

Strukturierungsmittel Möglichkeit Sichtbarkeiten zu beeinflussen besondere Möglichkeiten bei der Vererbung