Upload
engelbert-neitzel
View
136
Download
1
Embed Size (px)
Citation preview
DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte 11
Klassen und ObjekteKlassen 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.
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
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
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.
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
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
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.
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
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.
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
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
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.
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
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!
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.
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
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.
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
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 }
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.
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;}}
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.
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;}}
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
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
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
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;}
}
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; }
}
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);
}
}
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; }}
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; }}
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());}}
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
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; }}
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; }}
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); }
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; }}
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());}}
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.
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; }}
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; }}
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.
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; }...}
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+")"; }}
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(); }}
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
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";} }
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
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
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}}
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.
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.
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
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
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--; }...
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
5858DVG1 - 13 - Klassen und ObjekteDVG1 - 13 - Klassen und Objekte
private, protected, public u.s.w.private, protected, public u.s.w.