58
DVG1 - 13 - Klassen und Objek DVG1 - 13 - Klassen und Objek te te 1 Klassen und Klassen und Objekte Objekte

DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

Embed Size (px)

Citation preview

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

DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte 11

Klassen und ObjekteKlassen und Objekte

Page 2: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

22DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

Laura Lemay „Java in 21 Tagen“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 Objekte 1 Klassen und Objekte

33DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

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 Objekte 1 Klassen und Objekte

44DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

Beispiel : VorfahrtsregelBeispiel : Vorfahrtsregel

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

an die Kreuzung.an die Kreuzung. Es fahren Fahrzeuge ab, die Vorfahrt haben.Es fahren Fahrzeuge ab, die Vorfahrt haben.

Hauptstraße vor NebenstraßeHauptstraße vor Nebenstraße

rechts vor linksrechts vor links

0

1

2 3

4

5

Page 5: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

55DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

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

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

Fahrer reagieren unterschiedlich Fahrer reagieren unterschiedlich neue Ebene : Fahrer neue Ebene : Fahrer

Fahrzeugdefekte Fahrzeugdefekte neue Ebene : Fahrzeugtechnik neue Ebene : Fahrzeugtechnik

Verletzung der Regeln durch manche Fahrer Verletzung der Regeln durch manche Fahrer jedes jedes Fahrzeug verhält sich andersFahrzeug verhält sich anders

äußere Einflüsseäußere Einflüsse

Fahrzeuge mit SondersignalFahrzeuge mit Sondersignal

WettereinflüsseWettereinflüsse

u.s.w.u.s.w.

Page 6: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

66DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

ProblemeProbleme

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

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

Das Programm wird sehr komplex und wenig strukturiert.Das Programm wird sehr komplex und wenig strukturiert.

Beschreibung bleibt trotzdem unvollkommen.Beschreibung bleibt trotzdem unvollkommen.

Das Programm spiegelt die Realität nur sehr unvollkommen wieder.Das Programm spiegelt die Realität nur sehr unvollkommen wieder.

In dem Programm sind sehr unterschiedliche Größenordnungen In dem Programm sind sehr unterschiedliche Größenordnungen vorhanden:vorhanden:

global: z.B. Wettereinflüsseglobal: z.B. Wettereinflüsse regionaleregionale lokallokal bis mikrobis mikro

Page 7: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

77DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

AuswegAuswegBildung von klaren Strukturen durch Betrachtung als ObjekteBildung von klaren Strukturen durch Betrachtung als Objekte

Jedes Objekt weiß nur über sich selbst Bescheid.Jedes Objekt weiß nur über sich selbst Bescheid. Fahrzeug weiß nichts über globale Luftströmungen und deren Fahrzeug weiß nichts über globale Luftströmungen und deren

Einfluss auf das Wetter im Kreuzungsbereich.Einfluss auf das Wetter im Kreuzungsbereich. Fahrzeug weiß nichts über den Ladungsträgertransport in den Fahrzeug weiß nichts über den Ladungsträgertransport in den

Prozessoren seines Motors.Prozessoren seines Motors.

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

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

Objekte tauschen Informationen über klar definierte Schnittstellen Objekte tauschen Informationen über klar definierte Schnittstellen aus.aus.

Lichtsignale, HupenLichtsignale, Hupen Schalter, Regler, AnschlüsseSchalter, Regler, Anschlüsse

Page 8: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

88DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

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

Modellierung kann nachträglich verfeinert werden.Modellierung kann nachträglich verfeinert werden.

Teilobjekte können zu verschiedenen Zeiten von Teilobjekte können zu verschiedenen Zeiten von verschiedenen Leuten entwickelt, getestet und verschiedenen Leuten entwickelt, getestet und modifiziert werden, solange die vereinbarten modifiziert werden, solange die vereinbarten Schnittstellen eingehalten werden.Schnittstellen eingehalten werden.

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

Page 9: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

99DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

ProblemeProblemeJedes Objekt unterscheidet sich von jedem anderen.Jedes Objekt unterscheidet sich von jedem anderen.

Jedes Objekt ist neu zu beschreiben.Jedes Objekt ist neu zu beschreiben.

Große Mengen von Programmcode.Große Mengen von Programmcode.

Großer Testaufwand.Großer Testaufwand.

Objekte sind gekennzeichnet durch:Objekte sind gekennzeichnet durch: AttributeAttribute

Zustände, Eigenschaften, ParameterZustände, Eigenschaften, Parameter ZugriffsmethodenZugriffsmethoden

Möglichkeiten die Attribute zu verändernMöglichkeiten die Attribute zu verändern Kommunikation mit anderen Objekten über Nachrichten.Kommunikation mit anderen Objekten über Nachrichten.

Möglichkeiten mit anderen Objekten Informationen Möglichkeiten mit anderen Objekten Informationen auszutauschenauszutauschen

Page 10: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

1010DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

AuswegAuswegViele Objekte haben mehr oder weniger große Viele Objekte haben mehr oder weniger große Gemeinsamkeiten.Gemeinsamkeiten. FahrzeugeFahrzeuge

Lastkraftwagen, Personenwagen, Motorräder, Lastkraftwagen, Personenwagen, Motorräder, FahrräderFahrräder

StraßenStraßen

Hauptstraßen, NebenstraßenHauptstraßen, Nebenstraßen

Objekte lassen sich klassifizieren.Objekte lassen sich klassifizieren.

Klassen sind Objekttypen, abstrakte ObjekteKlassen sind Objekttypen, abstrakte Objekte

Ein Objekt ist eine konkrete Realisierungen einer Klasse, Ein Objekt ist eine konkrete Realisierungen einer Klasse, eine Instanz einer Klasse.eine Instanz einer Klasse.

Page 11: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

1111DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

Neue Klassen lassen sich aus schon bekannten Klassen ableiten.Neue Klassen lassen sich aus schon bekannten Klassen ableiten. FahrzeugFahrzeug

LastkraftwagenLastkraftwagen LKW mit AnhängerLKW mit Anhänger LKW ohne AnhängerLKW ohne Anhänger

KofferKoffer

SattelschlepperSattelschlepper

PersonenwagenPersonenwagen

MotorräderMotorräder MotorradMotorrad MotorrollerMotorroller BeiwagenmaschineBeiwagenmaschine

Page 12: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

1212DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

Abgeleitete KlassenAbgeleitete Klassen übernehmen Attribute und Methoden von der übernehmen Attribute und Methoden von der

ursprünglichen Klasseursprünglichen Klasse fügen neue Attribute und Methoden hinzufügen neue Attribute und Methoden hinzu überschreiben Attribute und Methodenüberschreiben Attribute und Methoden realisieren abstrakte Methodenrealisieren abstrakte Methoden

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

1313DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

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 Objekte 1 Klassen und Objekte

1414DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

Klassen-Definition in JAVAKlassen-Definition in JAVAKlassendefinition bestehen ausKlassendefinition bestehen aus KlassenkopfKlassenkopf

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

KlassenrumpfKlassenrumpfAttribute (Eigenschaften, Daten)Attribute (Eigenschaften, Daten)statische Initialisiererstatische InitialisiererKonstruktoren (initialisiert ein Objekt der Klasse)Konstruktoren (initialisiert ein Objekt der Klasse)Methoden (Schnittstellen, Prozeduren, Funktionen)Methoden (Schnittstellen, Prozeduren, Funktionen)interne Klasseninterne Klassen

Page 15: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

1515DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

KlassenkopfKlassenkopf[public] [final] [abstract] class [public] [final] [abstract] class Bezeichner Bezeichner

[extends[extends Klasse Klasse] [implements ] [implements InterfaceInterface,...,,...,InterfaceInterface]]

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

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

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

final final undund abstract abstract können nicht gleichzeitig verwendet können nicht gleichzeitig verwendet werden!werden!

Page 16: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

1616DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

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

Lastkraftwagen Lastkraftwagen ist eine Spezialisierung der Klasse ist eine Spezialisierung der Klasse Fahrzeug Fahrzeug

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

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

Page 17: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

1717DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

Das erste ProgrammDas erste Programmpublic 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 Objekte 1 Klassen und Objekte

1818DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

BeispielBeispiel

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 Objekte 1 Klassen und Objekte

1919DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

AttributeAttribute

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

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

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

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

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

Modifizierer : public , private, protected

Page 20: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

2020DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

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

TypTyp beliebiger primitiver Datentypbeliebiger primitiver Datentyp beliebiger Referenztypbeliebiger Referenztyp

FelderFelder

KlassenKlassen

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

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

Page 21: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

2121DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

Beispiel (Klassenerweiterung)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 Objekte 1 Klassen und Objekte

2222DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

Zugriff zu den AttributenZugriff zu den Attributen

Z.B.: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 Objekte 1 Klassen und Objekte

2323DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

Beispiel (Klassenkomposition)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 Objekte 1 Klassen und Objekte

2424DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

Zugriff zu den AttributenZugriff zu den Attributen

Z.B.: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 Objekte 1 Klassen und Objekte

2525DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

MethodenMethoden

public : public : Methoden sind aus allen anderen Klassen heraus Methoden sind aus allen anderen Klassen heraus benutzbar.benutzbar.

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

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

keine Angabe : Methoden sind nur in allen Klassen benutzbar die keine Angabe : Methoden sind nur in allen Klassen benutzbar die zum selben Package gehören.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 Objekte 1 Klassen und Objekte

2626DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

final: final: Methoden können nie verändert werden.Methoden können nie verändert werden.

abstract: abstract: Von der Methode sind nur die Schnittstellen (Typ, Von der Methode sind nur die Schnittstellen (Typ, Name, Parameterliste, ...) definierte, aber nicht der Körper. Name, Parameterliste, ...) definierte, aber nicht der Körper. Damit muss die gesamte Klasse als abstract definiert werden. Damit muss die gesamte Klasse als abstract definiert werden. Von der Klasse können keine Objekte erzeugt werden.Von der Klasse können keine Objekte erzeugt werden.

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

beliebiger primitiver Datentypbeliebiger primitiver Datentyp beliebiger Referenztypbeliebiger Referenztyp

FelderFelder

KlassenKlassen void void wenn die Methode keinen Wert zurückgibtwenn die Methode keinen Wert zurückgibt

Page 27: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

2727DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

formaleParameterliste: Typ Name,...,Typ NameformaleParameterliste: Typ Name,...,Typ Name

Die Klammern () müssen auch angegeben werden, wenn die Die Klammern () müssen auch angegeben werden, wenn die Parameterliste leer ist!Parameterliste leer ist!

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

throws: throws: Liste der Ausnahmen, die in der Methode eintreten Liste der Ausnahmen, die in der Methode eintreten können und nicht behandelt werde, die also nach außen gereicht können und nicht behandelt werde, die also nach außen gereicht werden.werden.

Block:Block: { { AnweisungsfolgeAnweisungsfolge } bei nicht-abstrakten Methoden } bei nicht-abstrakten Methoden ; bei abstrakten Methoden; bei abstrakten Methoden

Page 28: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

2828DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

BeispielBeispielpublic 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 Objekte 1 Klassen und Objekte

2929DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

public 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 Objekte 1 Klassen und Objekte

3030DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

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 Objekte 1 Klassen und Objekte

3131DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

VerbesserungVerbesserungclass 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 Objekte 1 Klassen und Objekte

3232DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

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 Objekte 1 Klassen und Objekte

3333DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

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 Objekte 1 Klassen und Objekte

3434DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

KonstruktorenKonstruktoren

Modifizierer, formaleParameterliste, throws : Modifizierer, formaleParameterliste, throws : wie wie bei Methodenbei MethodenName ist der Name der KlasseName ist der Name der Klassekein Typ, auch nicht kein Typ, auch nicht void !void !Wenn kein Konstruktor definiert wird, wird der leere Konstruktor Wenn kein Konstruktor definiert wird, wird der leere Konstruktor Name(){}Name(){} automatisch generiert. automatisch generiert.Konstruktoren können überladen werden.Konstruktoren können überladen werden.Konstruktoren werden bei der Erzeugung (Instanziierung) von Konstruktoren werden bei der Erzeugung (Instanziierung) von Objekten aufgerufenObjekten aufgerufen

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

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

Modifizierer : public , private, protected

Page 35: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

3535DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

BeispielBeispielclass 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 36: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

3636DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

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 37: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

3737DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

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 38: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

3838DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

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 39: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

3939DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

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 40: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

4040DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

Das Schlüsselwort Das Schlüsselwort thisthis

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

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

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

Page 41: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

4141DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

BeispielBeispielclass 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 42: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

4242DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

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 43: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

4343DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

Das Schlüsselwort Das Schlüsselwort supersuper

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

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

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

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

Page 44: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

4444DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

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 45: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

4545DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

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

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

Page 46: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

4646DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

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 47: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

4747DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

Der Operator Der Operator instanceofinstanceof

true : true : ObjektObjekt ist eine Instanz von ist eine Instanz von KlasseKlasse oder einer oder einer direkten oder indirekten Subklasse von direkten oder indirekten Subklasse von KlasseKlasse..

false : sonstfalse : sonst

(obj instanceof Object)(obj instanceof Object) ist immer ist immer truetrue für jedes für jedes Objekt Objekt objobj

Wichtig: Zuerst die zuletzt abgeleitete Klasse testen!Wichtig: Zuerst die zuletzt abgeleitete Klasse testen!

Objekt instanceof Klasse

Wert : boolean

Page 48: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

4848DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

BeispielBeispielpublic 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 49: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

4949DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

Die Methode Die Methode finalizefinalize

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

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

C, C++) geschriebenen Programmen angefordert wurden.C, C++) geschriebenen Programmen angefordert wurden.

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

Modifizierer : public , private, protected

Page 50: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

5050DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

Statische KomponentenStatische KomponentenAlle Programme sind KlassenAlle Programme sind Klassen Klassen sind nur DefinitionenKlassen sind nur Definitionen Wer sagt also was abgearbeitet werden soll?Wer sagt also was abgearbeitet werden soll?

Es gibt Konstanten und Methoden, die allgemein Es gibt Konstanten und Methoden, die allgemein verfügbar sein sollen und nicht an Objekte gebunden verfügbar sein sollen und nicht an Objekte gebunden sein sollten. Z.B.:sein sollten. Z.B.: Mathematische Konstanten: Pi=3.14159...; E=2.781...Mathematische Konstanten: Pi=3.14159...; E=2.781... Physikalische Konstanten: cPhysikalische Konstanten: c300000 km/s300000 km/s Mathematische Funktionen: sin(x), cos(x), ...Mathematische Funktionen: sin(x), cos(x), ...

Bestimmte Daten sollten eher an die Klasse als an die Bestimmte Daten sollten eher an die Klasse als an die Objekte gebunden sein. Z.B. Objekte gebunden sein. Z.B. Zähler wie viele Punkte instanziiert wurden.Zähler wie viele Punkte instanziiert wurden. StatusanzeigerStatusanzeiger

Page 51: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

5151DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

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

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

Statische InitialisiererStatische Initialisierer staticstatic{{.... Beliebige Anweisungen.... Beliebige Anweisungen}}

Page 52: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

5252DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

Statische Attribute und Methoden werden durch Statische Attribute und Methoden werden durch Klassenname.AttributKlassenname.Attribut bzw. bzw. Klassenname.MethodeKlassenname.Methode oder durch oder durch Objektname.AttributObjektname.Attribut bzw. bzw. Objektname.MethodeObjektname.Methode aufgerufen.aufgerufen.

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

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

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

Page 53: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

5353DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

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

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

thisthis ist nicht verfügbar. ist nicht verfügbar.

Page 54: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

5454DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

Klasse

Abarbeiten derstatic-Anweisungen

Statische Komponente nutzen

Abarbeiten derstatic-Anweisungen

Objekt instanziieren

Abarbeiten der nicht-staticAnweisungen

Objekt instanziieren

Konstruktor abarbeiten

Objekt instanziieren

Page 55: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

5555DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

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 56: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

5656DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

BeispielBeispielclass 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 57: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

5757DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

Innere KlassenInnere Klassen

StrukturierungsmittelStrukturierungsmittel

Möglichkeit Sichtbarkeiten zu beeinflussenMöglichkeit Sichtbarkeiten zu beeinflussen

besondere Möglichkeiten bei der Vererbungbesondere Möglichkeiten bei der Vererbung

Page 58: DVG1 - 13 - Klassen und Objekte 1 Klassen und Objekte

5858DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte

private, protected, public u.s.w.private, protected, public u.s.w.