TIAI1004: Programmierung

Werbung
TIAI1004: Programmierung
Teil 8: Objektorientierte Programmierung (III)
Berufsakademie Stuttgart/Horb
Studiengang Angewandte Informatik
Dozent: Olaf Herden
Stand: 06/2008
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8-1
Olaf Herden
06/2008
Gliederung
•
Operatoren this/super/instanceof
•
Parameterübergabe
•
Beziehungen zwischen Klassen
•
Schnittstellen
•
Polymorphie
•
Kopieren von Objekten
•
Klassenbibliotheken
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8-2
Olaf Herden
06/2008
this-Operator: Motivation (I)
•
Szenario 1:
(1) public class Mitarbeiter{
(2)
(3)
private int persNr;
(4)
private String name;
(5)
(6)
public Mitarbeiter(String name, int persNr){
(7)
...
(8)
}
(9) }
•
•
•
Im Rumpf des Konstruktors kommt es zum Namenskonflikt
Die beiden Attribute persNr und name sind sowohl als Instanz- als auch
als Übergabeattribute in der Parameterliste deklariert
Es muss gelöst werden:
- Um welches Attribut es sich handelt, wenn im Rumpf des Konstruktors nun
persNr bzw. name verwendet wird
- Wie das andere Attribut mit der Bezeichnung persNr bzw. name
angesprochen wird
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8-3
Olaf Herden
06/2008
this-Operator: Motivation (II)
•
Szenario 2:
( 1) public class Mitarbeiter{
( 2)
( 3)
private int persNr;
( 4)
private String name;
( 5)
private String ort;
( 6)
( 7)
public Mitarbeiter(String name, int persNr){...}
( 8)
public Mitarbeiter(String name, int persNr,
( 9)
String ort){
(10)
...
(11)
}
(12) }
•
•
•
Der zweite Konstruktor ist eine Obermenge des ersten
Wünschenswert: Der zweite Konstruktor ruft den ersten auf
Anweisung Mitarbeiter(name,persNr); im Rumpf des zweiten
Konstruktors scheitert jedoch
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8-4
Olaf Herden
06/2008
this-Operator: Lösung (I)
•
•
•
Abhilfe schafft in beiden Szenarien der this-Operator, der auf das
aktuelle Objekt zeigt
Mit Hilfe dieses Operators können nun die beiden Szenarien gelöst
werden
Szenario 1: Über this lassen sich nun die Objektvariablen ansprechen
( 1) public class Mitarbeiter{
( 2)
( 3)
private int persNr;
( 4)
private String name;
( 5)
( 6)
public Mitarbeiter(String name, int persNr){
( 7)
this.persNr = persNr;
( 8)
this.name
= name;
( 9)
}
(10) }
Ansprechen der Objektvariablen
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Ansprechen der lokalen Variablen
Objektorientierte Programmierung III
8-5
Olaf Herden
06/2008
this-Operator: Lösung (II)
•
Szenario 2: Über this lässt sich nun der erste Konstruktor aus dem
Rumpf des zweiten heraus aufrufen:
( 1) public class Mitarbeiter{
( 2)
( 3)
private int persNr;
( 4)
private String name;
( 5)
private String ort;
( 6)
( 7)
public Mitarbeiter(String name, int persNr){...}
( 8)
public Mitarbeiter(String name, int persNr,
( 9)
String ort){
(10)
this(name, persNr);
(11)
this.ort = ort;
(12)
}
(13) }
Aufruf des ersten Konstruktors
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8-6
Olaf Herden
06/2008
super-Operator: Motivation
•
Szenario:
(1) public class Mitarbeiter{
(2)
...
(3)
public void drucken(){
(4)
System.out.println(persNr);
(5)
System.out.println(name);
(6)
...
(7)
}
(8) }
(1) public class Arbeiter extends Mitarbeiter{
(2)
private float stundensatz;
Das alles ist schon in der
(3)
public void drucken(){
Oberklasse geschehen
(4)
System.out.println(persNr);
(5)
System.out.println(name);
(6)
...
(7)
System.out.println(stundensatz);
(8) }
(9) }
•
Methode drucken() in der Unterklasse wiederholt jede Menge Arbeit
der gleichnamigen Methode der Oberklasse
• Wünschenswert: Methode der Oberklasse in der Unterklasse aufrufen
Olaf Herden
TIAI1004: Programmierung
Objektorientierte
Programmierung
III
8
7
06/2008
Berufsakademie Stuttgart/Horb
super-Operator: Lösung
•
Abhilfe schafft der Operator super, der auf die Oberklasse verweist
•
Damit lässt sich das Szenario folgendermaßen lösen:
(1) public class Arbeiter extends Mitarbeiter{
(2)
private float stundensatz;
Damit wird die Methode
(3)
public void drucken(){
drucken() der Ober(4)
super.drucken();
klasse aufgerufen
(5)
System.out.println(stundensatz);
(6)
}
(7) }
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8-8
Olaf Herden
06/2008
super-Operator: Konstruktor
•
Mit super kann auch ein Konstruktor der Oberklasse aufgerufen werden
•
Beispiel:
(1) public class Mitarbeiter{
(2)
...
(3)
public Mitarbeiter(String name,int persNr,String ort){
(4)
this(name,persNr);
(5)
this.ort=ort;
(6)
}
(7) }
(1) public class Arbeiter extends Mitarbeiter{
(2)
...
(3)
public Arbeiter(String name,int persNr,String ort,
(4)
int stundenSatz){
(5)
super(name, persNr, ort);
(6)
this.stundenSatz = stundenSatz;
(7)
}
(8) }
Aufruf des Konstruktors der Oberklasse
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8-9
Olaf Herden
06/2008
super-Operator: Anmerkungen
•
Insgesamt gelten für super in Verbindung mit Konstruktoren folgende
Regeln:
- Jede Unterklasse muss einen Konstruktor definieren, der einen Konstruktor
der Oberklasse mittels super als erste Anweisung des Konstruktorrumpfes
aufzurufen
- Ausnahme: Wenn die Oberklasse einen parameterlosen Konstruktor besitzt,
wird dieser automatisch aufgerufen
•
Anmerkung:
- Mehrstufiger Aufruf super.super.<methode> ist verboten
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 10
Olaf Herden
06/2008
instanceof-Operator (I)
•
•
•
•
Mit dem instanceof-Operator lässt sich die Zugehörigkeit eines
Objektes zu einer Klasse feststellen
Syntax: <Objektname> instanceof <Klassenname>
Semantik: Zurückgegeben wird true, falls das Objekt Instanz der Klasse
(oder einer Oberklasse) ist, ansonsten false
Beispiel:
Es seien wieder die Klassen Mitarbeiter und Arbeiter wie auf den letzten
Folien definiert
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 11
Olaf Herden
06/2008
instanceof-Operator (II)
( 1) public class Anwendung{
( 2)
( 3)
public static void main(String[] args){
( 4)
( 5)
Mitarbeiter meier
= new Mitarbeiter();
( 6)
Arbeiter
mueller = new Arbeiter();
( 7)
( 8)
System.out.println(meier instanceof Mitarbeiter);
( 9)
System.out.println(meier instanceof Arbeiter);
(10)
System.out.println(mueller instanceof Mitarbeiter);
(11)
System.out.println(mueller instanceof Arbeiter);
(12)
}
(13) }
führt zur Ausgabe
true
false
true
true
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 12
Olaf Herden
06/2008
Übersicht
•
Operatoren this/super/instanceof
•
Parameterübergabe
•
Beziehungen zwischen Klassen
•
Schnittstellen
•
Polymorphie
•
Kopieren von Objekten
•
Klassenbibliotheken
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 13
Olaf Herden
06/2008
Übergabe von Parametern (I)
•
Beim Aufruf vom Methoden können die Parameter prinzipiell auf zwei
Arten übergeben werden:
- Call by Value: Wertübergabe, d.h. der übergebene Wert wird kopiert,
Änderungen an diesem Wert bleiben nach außen folgenlos
- Call by Reference: Referenzübergabe, d.h. der übergebene Wert wird nicht
kopiert, sondern lediglich eine Referenz (ein Verweis) auf diesen Wert,
Änderungen innerhalb der Methode werden nach außen sichtbar
•
In Java ist dies folgendermaßen festgelegt:
- Primitive Typen (z.B. int oder float) werden mittels Call by Value
übergeben
- Objekte werden mittels Call by Reference übergeben
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 14
Olaf Herden
06/2008
Realisierung in Java (I): Beispiel
•
Das Programm
( 1) public class Ueber{
( 2)
static void veraendern(int i, Mitarbeiter m){
( 3)
i = i + 5;
( 4)
m.setPersNr(4712);
( 5)
}
( 6)
( 7)
public static void main(String[] args){
( 8)
int j = 7;
( 9)
Mitarbeiter meier = new Mitarbeiter("Meier",4711);
(10)
veraendern(j,meier);
(11)
System.out.println(j);
(12)
System.out.println(meier.getPersNr());
(13)
}
(14) }
führt zur Ausgabe
7
4712
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Call by Value: Addition in der Methode verändern
bleibt nach außen wirkungslos
Call by Reference: Manipulation in der Methode verändern
wird nach außen wirkungsam
Objektorientierte Programmierung III
8 - 15
Olaf Herden
06/2008
Realisierung in Java (II): Erläuterung
•
•
In der main()-Methode werden eine Variable primitiven Typs (j vom Typ
Integer) und ein Objekt (meier als Instanz der Klasse Mitarbeiter)
angelegt
Dann wird die Methode veraendern() aufgerufen:
- Von j wird in i eine Kopie angefertigt
- Für m wird lediglich ein Verweis auf meier angelegt
verändern
Mitarbeiter
Verweis
i
m
Kopieren
Objekt
y
main
j
meier
Stack
Heap
- In der Methode veraendern() werden beide Variablen manipuliert
- Änderungen an m wirken sich auch auf den Übergabeparameter aus
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 16
Olaf Herden
06/2008
Übersicht
•
Operatoren this/super/instanceof
•
Parameterübergabe
•
Beziehungen zwischen Klassen
•
Schnittstellen
•
Polymorphie
•
Kopieren von Objekten
•
Klassenbibliotheken
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 17
Olaf Herden
06/2008
Beziehungen zwischen Klassen
•
•
•
Bisher: Klassen konnten ein einem Ober-/Unterklasse-Verhältnis
zueinander stehen
Auch andere Beziehungen zwischen Klassen denkbar
Beispiel:
Abteilung
Mitarbeiter
•
<Attributbereich>
<Attributbereich>
<Methodenbereich>
<Methodenbereich>
Klassen haben Bezug zueinander:
- Mitarbeiter gehören zu einer Abteilung
- Abteilungen haben Mitarbeiter
•
•
•
Dieses lässt sich aber nicht als Vererbung darstellen, denn weder
spezialisiert Mitarbeiter eine Abteilung noch umgekehrt
Als allgemeinerer Beziehungstyp steht die Assoziation zur Verfügung
Darstellung: Einfache Kante zwischen den beiden Klassen
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 18
Olaf Herden
06/2008
Assoziation (I)
Abteilung
Mitarbeiter
•
•
<Attributbereich>
<Attributbereich>
<Methodenbereich>
<Methodenbereich>
Damit ist der Beziehungstyp Assoziation dargestellt
Wünschenswert wären noch weitere Angaben:
- Wie viele Mitarbeiter kann eine Abteilung haben?
- Zu wie vielen Abteilungen kann ein Mitarbeiter gehören?
•
•
•
Dazu werden an der Assoziationskante Multiplizitäten (Kardinalitäten)
eingeführt, die die Anzahl der an der Assoziation teilnehmenden Objekte
angeben
Angegeben werden Mindest- und Maximalzahl, getrennt durch „...“ (Bsp.:
3 ... 7)
Regeln:
- Entsprechen sich Mindest- und Maximalzahl, so wird nur dieser Wert
geschrieben (Bsp.: 5 ... 5 enstpricht 5)
- Ist die Maximalzahl unbestimmt, so wird das Symbol „*“ verwendet
(Bsp.: 1 ... *)
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 19
Olaf Herden
06/2008
Assoziation (II): Beispiele
Abteilung
Mitarbeiter
<Attributbereich>
1 ... *
<Attributbereich>
1
<Methodenbereich>
<Methodenbereich>
•
•
„Eine Abteilung hat mindestens eine bis beliebig viele Mitarbeiter“
„Ein Mitarbeiter gehört zu genau einer Abteilung“
Abteilung
Mitarbeiter
<Attributbereich>
3 ... *
<Attributbereich>
1
<Methodenbereich>
<Methodenbereich>
•
•
„Eine Abteilung hat mindestens drei bis beliebig viele Mitarbeiter“
„Ein Mitarbeiter gehört zu genau einer Abteilung“
Abteilung
Mitarbeiter
<Attributbereich>
<Methodenbereich>
•
•
5 ... 8
<Attributbereich>
0 ... 1
<Methodenbereich>
„Eine Abteilung hat mindestens fünf, aber höchstens acht Mitarbeiter“
„Ein Mitarbeiter gehört zu einer oder keiner Abteilung“
Olaf Herden
TIAI1004: Programmierung
Objektorientierte
Programmierung
III
8
20
06/2008
Berufsakademie Stuttgart/Horb
Assoziation (III): Rollen
•
Manchmal ist es wünschenswert, welcher Art die Assoziation ist, d.h.
welche Rolle die Objekte in ihr spielen, z.B.
- „Eine Abteilung besteht aus Mitarbeitern“
- „Ein Mitarbeiter arbeitet in einer Abteilung“
•
In der UML können Assoziationen mit Rollen versehen werden
Abteilung
Mitarbeiter
<Attributbereich>
<Methodenbereich>
•
1 ... *
arbeitet in
besteht aus
<Attributbereich>
1
<Methodenbereich>
Anmerkung: Häufig sind die Rollenbezeichnungen offensichtlich oder
tragen recht allgemeine Bezeichnungen (hat, besteht aus, ...) und
werden daher weggelassen
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 21
Olaf Herden
06/2008
Assoziationen in Java
•
•
In Java lassen sich Assoziationen darstellen, indem die Elemente der
assoziierten Klasse mit in die Klasse aufgenommen werden
Beispiel:
(1) public class Mitarbeiter{
(2)
...
(3)
private Abteilung abt;
(4)
...
(5) }
(1) public class Abteilung{
(2)
...
(3)
private Mitarbeiter[] mit;
(4)
...
(5) }
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Bei einer Assoziation mit
Multiplizität 1 kann ein
Attribut der anderen
Klasse eingetragen werden
Hier wird ein komplexerer
Datentyp (z.B. Feld) benötigt,
um bei einem Objekt der
Klasse Abteilung mehrere
Mitarbeiter speichern zu
können
Objektorientierte Programmierung III
8 - 22
Olaf Herden
06/2008
Felder von Objekten (I)
•
•
Mit Mitarbeiter[] mit wird ein Feld von Objekten angelegt
Hierbei sind zwei Aufrufe des new-Operators notwendig:
(1)
(2)
(3)
(4)
(5)
•
Mitarbeiter[] mit = new Mitarbeiter[10];
...
for(int i=0; i<=9; i++){
mit[i] = new Mitarbeiter();
}
Beim ersten new-Aufruf wird auf dem Heap Platz in der Größe des
Feldes reserviert:
mit
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 23
Olaf Herden
06/2008
Felder von Objekten (II)
•
Mit den Aufrufen des new-Operators in der Schleife wird jeweils Platz in
der Größe eines Mitarbeiter-Objektes reserviert:
mit
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
...
Objektorientierte Programmierung III
8 - 24
Olaf Herden
06/2008
Aggregationen und Kompositionen
•
•
•
•
Neben der Assoziation sind zwei weitere Beziehungstypen bekannt
Aggregation: Beziehung, die etwas zusammenfassendes darstellt („hat
ein“)
Komposition: Zusammenfassende Beziehung mit Existenzabhängigkeit
UML-Notation:
Aggregationen:
Rechnung
Auto
„Auto hat einen Motor“
„Auto hat 3 bis 5 Räder“
<Attributbereich>
<Attributbereich>
<Methodenbereich>
<Methodenbereich>
1
3 ... 5
Motor
Rad
<Attributbereich>
<Attributbereich>
<Methodenbereich>
<Methodenbereich>
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Kompostion:
„Rechnung hat eine bis
beliebig viele Positionen“
Existenzabhängigkeit:
Position kann nicht ohne
zugehörige Rechnung
existieren
1 ... *
Position
<Attributbereich>
<Methodenbereich>
Objektorientierte Programmierung III
8 - 25
Olaf Herden
06/2008
Übersicht
•
Operatoren this/super/instanceof
•
Parameterübergabe
•
Beziehungen zwischen Klassen
•
Schnittstellen
•
Polymorphie
•
Kopieren von Objekten
•
Klassenbibliotheken
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 26
Olaf Herden
06/2008
Schnittstellen
•
•
•
•
Bisher: Abstrakte Klassen, Methoden konnten implementiert sein oder
nicht (abstrakte Methoden)
Idee konsequent fortsetzen: Alle Methoden ohne konkrete Definition
(vollständig abstrakte Klasse)
Diese werden als Schnittstellen (Interfaces) bezeichnet
UML-Notation:
<<interface>>
Name des Interface
<Attributbereich>
<Methodenbereich>
•
•
Java-Syntax: [public] interface NameDesInterface{ ... }
Methodendeklaration in Schnittstellen:
[public abstract] <Rückgabetyp> nameDerMethode(<Par.liste>);
•
Wichtig (Unterschied zu abstrakten Methoden in Klassen):
-
Schlüsselwort abstract muss nicht angegeben werden, kann aber
Methode darf nicht protected oder private sein
Leerer Rumpf wird einfach weggelassen (kein „{}“)
Zeile muss mit Semikolon abgeschlossen werden
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 27
Olaf Herden
06/2008
Attribute in Schnittstellen
•
Attributdeklaration in Schnittstellen:
<Datentyp> nameDesAttribut;
•
Anmerkungen:
- Auch ohne Angabe von Modifiern wird jedes Attribut einer Schnittstelle
automatisch als public static final deklariert
- Da nur diese Kombination sinnvoll ist, sollte sie auch immer angegeben
werden
- Diese Attribute definieren Konstanten, die allen Klassen zur Verfügung
stehen, die die Schnittstelle implementieren
- Finale Attribute müssen in der Schnittstelle, in der sie deklariert werden, auch
initialisiert werden, d.h. z. B. public static final int i=0;
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 28
Olaf Herden
06/2008
Schnittstellen erben Schnittstellen
•
•
Schnittstellen können (analog zu Klassen) von anderen Schnittstellen
erben und diese erweitern
UML-Notation:
<<interface>>
<<interface>>
B
A
•
<Attributbereich>
<Attributbereich>
<Methodenbereich>
<Methodenbereich>
Java-Notation:
(1) public interface A{
(2)
public static final int i = 0;
(3)
public abstract void f();
(4) }
(1) public interface B extends A{
(2)
public static final int j = 0;
(3)
public void g();
(4) }
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 29
Olaf Herden
06/2008
Klassen implementieren Schnittstellen (I)
•
•
•
•
•
Schnittstellen können nicht von Klassen erben
K1
Klassen können von einer mehreren Schnittstellen „erben“ <Attributbereich>
Dies wird als Implementieren bezeichnet
<Methodenbereich>
Dabei müssen die Methoden implementiert werden
Verboten
UML-Notation:
K2
<Attributbereich>
<Methodenbereich>
<<interface>>
A
<<interface>>
B
<Attributbereich>
<Attributbereich>
<Methodenbereich>
<Methodenbereich>
K3
K3 erbt von Klasse K2 und implementiert Schnittstellen A und B
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
<Attributbereich>
<Methodenbereich>
Objektorientierte Programmierung III
8 - 30
Olaf Herden
06/2008
Klassen implementieren Schnittstellen (II)
•
Java-Notation:
(1) public class K3 extends K2 implements A,B {
(2)
...
(3) }
Hier darf nur eine Klasse stehen
•
Hier können beliebig viele
Schnittstellen stehen
Anmerkungen:
- Bei Implementierung einer Schnittstelle müssen Methoden als public
deklariert werden
- Implementiert Klasse nicht alle Methoden einer Schnittstelle, muss sie als
abstract deklariert werden
•
Gründe für Einführung von Interfaces in Java:
- Interfaces existieren orthogonal zur Klassenhierarchie, d.h. jede Klasse kann
sie implementieren, unabhängig von ihrer Position in Klassenhierarchie
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 31
Olaf Herden
06/2008
Bsp.: Interfaces orthogonal zu Klassen
Fahrzeug
<<interface>>
Bremsbar
...
...
...
...
Landfahrzeug
<<interface>>
Steuerbar
Wasserfahrzeug
Luftfahrzeug
...
...
...
...
...
...
...
...
Auto
<<interface>>
Fahrbar
Ballon
Flugzeug
...
...
...
...
...
...
...
...
Kombi
<<interface>>
…
...
...
...
...
Paket fahrzeuge
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 32
Olaf Herden
06/2008
Mehrfachimplementierung (I)
•
Folgendes Szenario:
<<interface>>
I1
<Attributbereich>
boolean isCorrect()
K
<Attributbereich>
<<interface>>
I2
<Methodenbereich>
<Attributbereich>
boolean isCorrect()
•
Beide Interfaces schreiben Klasse K Implementierung der Methode
isCorrect vor, was kein Problem darstellt
•
Bei Mehrfachvererbung wäre dies anders: Oberklassen könnten
unterschiedliche Implementierung vorgeben
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 33
Olaf Herden
06/2008
Mehrfachimplementierung (II)
•
Folgendes Szenario:
<<interface>>
I2
<<interface>>
I1
int RED = 1
int GREEN = 2
int BLUE = 3
…
int BLACK = 10
int PURPLE = 11
…
<<interface>>
I3
<<interface>>
I4
int WHITE = 30
…
int BLACK = 20
int PURPLE = 11
int WHITE = 21
K
…
<Attributbereich>
•
Frage: Wie kann Klasse K auf welche Konstanten zugreifen?
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
<Methodenbereich>
Objektorientierte Programmierung III
8 - 34
Olaf Herden
06/2008
Mehrfachimplementierung (III)
•
Folgende Regeln:
- Schnittstellen vererben über mehrere Ebenen (z.B. RED wird von I1 an I2 an
I4 an K vererbt)
- Schnittstellen können von mehreren Schnittstellen gleiche Konstante erben
(z.B. erbt I4 die Konstante RED von I2 und I3)
- Konstanten dürfen überschrieben werden (z.B. I4 überschreibt den Wert von
WHITE)
- Schnittstellen können von mehreren Schnittstellen Konstanten erben (z.B.
erbt I4 die Konstanten BLACK und PURPLE aus I2 und I3):
- Zugriff in diesem Fall über voll qualifizierten Namen: I2.BLACK bzw.
I3.BLACK
- Auch wenn beide Konstanten gleichen Wert haben (hier PURPLE) Zugriff
nur über I2.PURPLE bzw. I3.PURPLE möglich (Grund: Sicherheit bzgl.
späterer Änderungen)
•
Beispiel
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 35
Olaf Herden
06/2008
Schnittstellen vs. abstrakte Klassen (I)
Schnittstelle
Abstrakte Klasse
Idee (Gemeinsamkeit)
Unterklassen bzw. implementierenden Klassen
Methoden vorschreiben, die diese implementieren
müssen
Idee (Unterschied)
Angabe ausschließlich von
Konstanten und Methoden
ohne jegliche
Implementierung
Angabe von Attributen,
Konstanten und
Methoden; dabei kann ein
gewisses Verhalten schon
implementiert sein
Mehrfachvererbung/implementierung
Möglich
Nicht möglich
Schlüsselwort abstract
Nicht nötig, kann aber
Angabe notwendig
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 36
Olaf Herden
06/2008
Schnittstellen vs. abstrakte Klassen (II)
Schnittstelle
Abstrakte Klasse
Deklaration von Attributen
und Methoden
Nur als public static
final gekennzeichnete
Konstanten und als
public abstract
gekennzeichnete
Methoden
Erlaubt, was in Klassen
erlaubt ist
Methodenrumpf
Muss leer sein
Kann Implementierung
enthalten
Darstellung leerer Rumpf
Wird weggelassen
{} muss angegeben
werden
Verwendung auch in
Unterklasse
Ja
Ja
Organisation
In Paketen, beide haben Zugriffsmodifier
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 37
Olaf Herden
06/2008
Schnittstelle oder abstrakte Klasse? (I)
•
•
•
Grundsätzlich: Sind alle Methoden ohne Implementierung und sollen nur
Konstanten weitergegeben werden, so ist Schnittstelle zu wählen, sonst
abstrakte Klasse
Entscheidung aber nicht immer einfach
Bsp.: Realisierung eines Timers
(1) abstract class Timer{
(2)
abstract long getTimeInMillis(){};
(3) }
(1) interface Timer{
(2)
long getTimeInMillis();
(3) }
•
•
Beide Lösungen zunächst scheinbar gleichwertig
Bei späterer Erweiterung um Methode getTimeInSeconds() ist
abstrakte Klasse jedoch einfacher zu erweitern
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 38
Olaf Herden
06/2008
Schnittstelle oder abstrakte Klasse? (II)
(1) public abstract class Timer{
(2)
abstract long getTimeInMillis(){};
(3)
(4)
long getTimeInSeconds(){
(5)
return getTimeInMillis()*1000;
(6) }
(1) public interface Timer{
(2)
long getTimeInMillis();
(3) }
•
•
In Interface wäre dies nicht möglich
Anm.: In Java-Klassenbibliothek gibt es abstrakte Klassen und dazu
korrespondierende Interfaces
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 39
Olaf Herden
06/2008
Beispiel: Interface Comparable<T> (I)
<<interface>>
Comparable<T>
int compareTo(T o)
•
•
•
•
java.lang
Definiert totale Ordnung auf Objekten implementierender Klasse
Wird als natürliche Ordnung der Klasse bezeichnet, compareTo als
natürliche Vergleichsmethode
Methode compareTo liefert negativen Wert, 0 bzw. positiven Wert, wenn
Objekt kleiner, gleich oder größer dem Vergleichsobjekt ist
Folgende Implementierungsvereinbarungen:
- Sei sgn die mathematische Signum(Vorzeichen)-Funktion, d.h.
⎧ − 1, falls ex pr < 0
⎪
sgn (ex pr ) = ⎨ 0, falls ex pr = 0
⎪ + 1, falls ex pr > 0
⎩
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 40
Olaf Herden
06/2008
Beispiel: Interface Comparable<T> (II)
- …
- Entwickler muss sicherstellen:
- Symmetrie: Für alle x,y muss sgn(x.compareTo(y)) ==
sgn(y.compareTo(x)) gelten
- Transitivität: Für alle x,y,z muss gelten: (x.compareTo(y)) > 0 &&
(y.compareTo(z)) > 0) => x.compareTo(z) > 0
- Gleichheit: x.compareTo(y) == 0 => sgn(x.compareTo(z)) ==
sgn(y.compareTo(z)) für alle z
•
Beziehung zur Methode equals:
- Def.: Konsistenz mit Methode equals g.d.w. für alle e1 und e2 gilt
(e1.compareTo((Object) e2) == 0) hat den gleichen Booleschen
Wert wie e1.equals((Object) e2)
- Wird dies nicht erfüllt ist unbedingt folgender Kommantar hinzuzufügen: „This
class has a natural ordering that is inconsistent with equals.“
•
Beispiel
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 41
Olaf Herden
06/2008
Beispiel: Interface Serializable
<<interface>>
Serializable
java.io
•
•
•
•
•
Ermöglicht das Schreiben in Ausgabestrom bzw. Lesen aus
Eingabestrom von Objekten (Siehe Abschnitt „Ein-/Ausgabe“)
Interface besitzt keine Konstanten und Methoden
Wird als Markierungsschnittstelle (Marker interface) bezeichnet
Implementierende Klasse muss Konstante serialVersionUID vom
Typ long definieren, die beim Ein-/Auslesen überprüft wird
Beispiel
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 42
Olaf Herden
06/2008
Übersicht
•
Operatoren this/super/instanceof
•
Parameterübergabe
•
Beziehungen zwischen Klassen
•
Schnittstellen
•
Polymorphie
•
Kopieren von Objekten
•
Klassenbibliotheken
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 43
Olaf Herden
06/2008
Polymorphie
•
Idee:
- Alle Objekte einer Oberklasse (z.B. Mitarbeiter) sollen in der gleichen Art und
Weise behandelt werden
•
Polymorphie:
- Objektvariable einer Oberklasse kann auch auf Objekte der Unterklassen
verweisen
- Wird in diesem Falle eine Methode aufgerufen, dann wird nicht die der
Oberklasse verwendet, sondern diejenige der Unterklasse (überschriebene
Methode)
- Entsprechende Methode wird erst zur Laufzeit ermittelt (Dynamisches
Binden)
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 44
Olaf Herden
06/2008
Beispiel (I)
•
Gegeben sei die folgende Klassenhierarchie:
GraphObject
<Attributbereich>
draw()
Rechteck
Ellipse
<Attributbereich>
<Attributbereich>
draw()
draw()
Kreis
<Attributbereich>
draw()
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 45
Olaf Herden
06/2008
Beispiel (II)
•
Bei der Implementierung wird jede draw()-Methode durch die Ausgabe
des Objekttypen realisiert, z.B.
(1) public void draw(){
(2)
System.out.println("Ellipse");
(3) }
•
Im Hauptprogramm können nun die draw()-Methoden „ganz normal“
aufgerufen werden, z.B.
( 1)
( 2)
( 3)
( 4)
( 5)
( 6)
( 7)
( 8)
( 9)
(10)
// Anlegen der Objekte
GraphObject meinGraphObject = new GraphObject();
Ellipse meineEllipse = new Ellipse();
Rechteck meinRechteck = new Rechteck();
Kreis meinKreis = new Kreis();
// Ausgeben der Objekte
meinGraphObject.draw();
meineEllipse.draw();
meinRechteck.draw();
meinKreis.draw();
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 46
Olaf Herden
06/2008
Beispiel (III)
•
Führt zur Ausgabe
GraphObject
Ellipse
Rechteck
Kreis
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 47
Olaf Herden
06/2008
Beispiel (IV)
•
Bei Realisierung unter Nutzung von Polymorphie werden die Objekte
genauso angelegt, dann in einem Feld von GraphicObjects gespeichert
und der Methodenaufruf einheitlich ausgeführt:
( 1)
( 2)
( 3)
( 4)
( 5)
( 6)
( 7)
( 8)
( 9)
(10)
(11)
(12)
(13)
(14)
(15)
// Anlegen der Objekte
GraphObject meinGraphObject = new GraphObject();
Ellipse meineEllipse = new Ellipse();
Rechteck meinRechteck = new Rechteck();
Kreis meinKreis = new Kreis();
// Initialisieren eines Feldes von Grafik-Objekten
GraphObject[] meinGraphObjectFeld;
meinGraphObjectFeld = new GraphObject[4];
// Zuweisen der Objekte
meinGraphObjectFeld[0] =
meinGraphObjectFeld[1] =
meinGraphObjectFeld[2] =
meinGraphObjectFeld[3] =
...
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
meinGraphObject;
meineEllipse;
meinRechteck;
meinKreis;
Objektorientierte Programmierung III
8 - 48
Olaf Herden
06/2008
Beispiel (V)
(16)
(17)
(18)
(19)
...
// Aufruf der draw-Methode
for (int i=0; i<=3; i++){
meinGraphObjectFeld[i].draw();
}
führt ebenfalls zur Ausgabe
GraphObject
Ellipse
Rechteck
Kreis
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 49
Olaf Herden
06/2008
Beispiel (VI)
•
•
Polymorphie kann auch auf Konstruktoren angewendet werden
Damit ist folgendes möglich:
( 1)
( 2)
( 3)
( 4)
( 5)
( 6)
( 7)
( 8)
( 9)
(10)
(11)
(12)
// Feld von Grafikobjekten
GraphObject[] meinGraphObjectFeld;
meinGraphObjectFeld = new GraphObject[4];
// Polymorphe Kontruktorenaufrufe
meinGraphObjectFeld[0] = new GraphObject();
meinGraphObjectFeld[1] = new Ellipse();
meinGraphObjectFeld[2] = new Rechteck();
meinGraphObjectFeld[3] = new Kreis();
// Ausgabe
for (int i=0; i<=3; i++){
meinGraphObjectFeld[i].draw();
}
führt ebenfalls zur bekannten Ausgabe
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 50
Olaf Herden
06/2008
Übersicht
•
Operatoren this/super/instanceof
•
Parameterübergabe
•
Beziehungen zwischen Klassen
•
Schnittstellen
•
Polymorphie
•
Kopieren von Objekten
•
Klassenbibliotheken
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 51
Olaf Herden
06/2008
Kopieren von Objekten (I)
•
W.D.H.:
- Durch Anwendung des Zuweisungsoperators auf Objekte wird nur eine
Referenz gesetzt, aber nicht das Objekt kopiert
•
•
Manchmal aber auch „richtige“ Kopie notwendig
Zwei Möglichkeiten zum Erstellen einer identischen Kopie eines
Objektes:
- Eigene Methode schreiben, von Hand neues Objekt anlegen, alle Attribute
kopieren und Referenz auf dieses Objekt zurückgeben
- Von der Klasse Object geerbte Methode Object clone() benutzen
•
Beim Kopieren in objektorientierten Sprachen unterscheidet man:
- Flache Kopie: Unterobjekte werden nicht mitkopiert
- Tiefe Kopie: Unterobjekte werden mitkopiert
•
Anm.: Methode clone() erzeugt eine flache Kopie
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 52
Olaf Herden
06/2008
Kopieren von Objekten (II)
•
Beispiel:
Objekt a (mit Unterobjekt) vorhanden
b = a
Kopiere a nach c flach
Kopiere a nach d tief
d
c
b
a
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 53
Olaf Herden
06/2008
Methode clone() der Klasse Object (I)
•
•
Beispiel: Manager mit Objekttyp Fahrzeug
Java-Code:
( 1) public class Manager{
( 2)
...
( 3)
private String name;
( 4)
private int persNr;
( 5)
private String wohnort;
( 6)
private Fahrzeug fahrzeug;
( 7)
...
( 8)
public setKennzeichen(String s){
( 9)
this.fahrzeug.setKennzeichen(s);
(10)
}
(11) }
(
(
(
(
(
1) public class Fahrzeug{
2)
...
3)
String fahrzeug;
4)
...
5) }
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 54
Olaf Herden
06/2008
Methode clone() der Klasse Object (II)
•
Vorgehen:
- Methode clone() überschreiben
- Methode der Oberklasse muss aufgerufen werden
- Schnittstelle Cloneable muss implementiert werden
•
Erweiterung der Klasse Manager:
( 1) public class Manager implements Cloneable{
( 2)
...
( 3)
public Object clone(){
( 4)
try{
( 5)
return super.clone();
( 6)
}
( 7)
catch (CloneNotSupportedException e){
( 8)
„Ausnahmebehandlung“
( 9)
}
(10)
}
(11) }
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 55
Olaf Herden
06/2008
Methode clone() der Klasse Object (III)
•
Beispiel:
( 1) public class Anwendung{
( 2)
...
( 3)
public static void main(String[] args){
( 4)
// Anlegen eines Managers
( 5)
Manager a =
( 6)
new Manager("Meier",4711,"Stuttgart",12);
( 7)
a.setKennzeichen("S-ZZ 99");
( 8)
// Kopieren mittels der Methode clone
( 9)
Manager b = new Manager();
(10)
b = (Manager) a.clone();
(11)
// Ausgeben der beiden Objekte
(12)
a.drucken();
(13)
b.drucken();
(14)
// Ändern des Names und Kennzeichens bei Manager a
(15)
a.setName("Müller");
(16)
a.setKennzeichen("S-XX 11");
(17)
// Erneute Ausgabe der beiden Objekte
(18)
a.drucken();
(19)
b.drucken();
(20)
}
(21) }
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 56
Olaf Herden
06/2008
Methode clone() der Klasse Object (IV)
•
Führt zur Ausgabe:
Personalnummer:
Name:
Ort:
Kennzeichen :
4711
Meier
Stuttgart
S-ZZ 99
Personalnummer:
Name:
Ort:
Kennzeichen :
4711
Meier
Stuttgart
S-ZZ 99
Personalnummer:
Name:
Ort:
Kennzeichen :
4711
Müller
Stuttgart
S-XX 11
Personalnummer:
Name:
Ort:
Kennzeichen :
4711
Meier
Stuttgart
S-XX 11
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 57
Olaf Herden
06/2008
Übersicht
•
Operatoren this/super/instanceof
•
Parameterübergabe
•
Beziehungen zwischen Klassen
•
Schnittstellen
•
Polymorphie
•
Kopieren von Objekten
•
Klassenbibliotheken
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 58
Olaf Herden
06/2008
Klassenbibliotheken (I)
•
•
•
Jede Programmiersprache besteht nicht nur aus ihren elementaren
Anweisungen (z.B. Kontrollstrukturen, Möglichkeit der Klassenbildung in
objektorientierten Sprachen usw.)
Ergänzt werden diese um Klassenbibliotheken: Sammlungen von häufig
benötigten Funktionalitäten (z.B. mathematische Funktionen,
Dateibehandlung, Grafik, Gestaltung GUI, etc.)
Spezifikation durch API (Application Programming Interface):
- Beschreibung aller öffentlichen Klassen, Methoden und Schnittstellen der
Bibliothek
- Private Elemente werden hier nicht dokumentiert
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 59
Olaf Herden
06/2008
Klassenbibliotheken (II)
•
Verschiedene Ansätze:
- Funktionen sind integraler Bestandteil der Sprache
- Sprachkern mit elementaren Funktionen, dazu Funktionen von
(verschiedenen) Herstellern/Entwicklern
- In Java/C++: Mischung, d.h. Sprachkern mit elementaren Funktionen,
zusätzliche Funktionen genormt (Java-Klassenbibliothek bzw. STL (Standard
Template Library) in C++)
•
Einbindung:
- Statisch: Bibliotheken sind Bestandteil des Programms
- Dynamisch: Bibliotheken werden separat gehalten, können so von mehreren
Programmen genutzt werden
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 60
Olaf Herden
06/2008
Java-Klassenbibliothek
•
Sehr umfangreich, z.B. in Java 1.4:
-
•
Ca. 2700 Klassen und Schnittstellen
Ca. 4800 Attribute
Ca. 3700 statische Variablen
Ca. 21300 Objektmethoden
Ca. 2500 statische Methoden
Ca. 3500 Konstruktoren
Diese kann man nicht alle „auf Vorrat“ lernen, daher:
- Kurzer Überblick über wichtige Pakete
- Bei Bedarf in Dokumentation nachschauen
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 61
Olaf Herden
06/2008
Übersicht Java-Pakete (I)
•
java.applet:
- Stellt Klassen für Java-Applets bereit, damit diese auf Web-Seiten ausgeführt
werden können
•
java.awt und java.awt.*:
- Das Paket AWT (Abstract Windowing Toolkit) und seine diversen
Unterklassen bieten Klassen zur Grafikausgabe und Nutzung von grafischen
Bedienoberflächen
•
java.beans und java.beans.beancontext:
- JavaBeans sind wiederverwendbare Komponenten auf der Client-Seite, die
beim Programmieren visuell konfiguriert werden können
- Zusammenarbeit mehrerer Beans wird mit Klassen aus
java.beans.beancontext realisiert
•
java.io:
- Möglichkeiten zur Ein- und Ausgabe
- Ein- bzw. Ausgabemedien (z.B. Dateien) werden als als Objekte repräsentiert
- Datenströme erlauben sequenziellen Zugriff auf die Dateiinhalte
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 62
Olaf Herden
06/2008
Übersicht Java-Pakete (II)
•
java.lang:
- DAS Standard-Paket, wird automatisch geladen und beinhaltet elementare
Klassen wie String-, Thread- oder Wrapper-Klassen
•
java.lang.ref:
- Arbeiten mit dem Garbage-Collector
- Spezielle Varianten von Objekt-Referenzen, die vom Garbage-Collector
besonders behandelt werden
•
java.lang.reflect:
- Ermöglicht Reflection, d.h. Informationen über Klassen und Objekte zu
ermitteln
•
java.math:
- Mathematische Funktionen
- Beliebig lange Ganzzahlen oder Fließkommazahlen
•
java.net und javax.net.ssl:
- Kommunikation über Netzwerke
- Klassen zum Aufbau von Client- und Serversystemen, die über TCP/IP
miteinander kommunizieren
- Sockets und SSL-Verschlüsselung
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 63
Olaf Herden
06/2008
Übersicht Java-Pakete (III)
•
java.nio:
- Neuere Implementierung des io-Paketes
•
java.rmi und java.rmi.*:
- Aufruf von Methoden auf entfernten Rechnern
•
java.security und java.security.*:
- Klassen und Schnittstellen für Sicherheit (Authentifizierung und
Autorisierung)
- U.a. Verwaltung von Zertifikaten, Verschlüsselung (u.a. RSA-Algorithmus)
und digitaler Signatur
•
java.sql:
- Zugriff auf Datenbanken über SQL
•
java.text:
- Entwicklung internationalisierter Programme
- Behandlung von Text, Formatierung von Datumswerten und Zahlen
•
java.util und java.util.*:
- Container, Zufallszahlen, Archivformate (JAR, ZIP), Protokollieren von Daten
und Programmabläufen, Verwaltung von Benutzer- und Systemeigenschaften
über Konfigurationsdateien, Unterstützung regulärer Ausdrücke
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 64
Olaf Herden
06/2008
Übersicht Java-Pakete (IV)
•
javax.accessibility:
- Schnittstellen zwischen Eingabegeräten und Benutzerkomponenten
•
javax.crypto und javax.crypto.*:
- Klassen und Schnittstellen für kryptografische Operationen (u.a. DiffieHellman-Schlüssel, Klassen und Schnittstellen für Schlüsselverwaltung)
•
javax.imageio und javax.imageio.*:
- Lesen und Schreiben von Bilddateien in diversen Formaten (z.B. JPG)
•
javax.naming und javax.naming.*:
- Zugriff auf Namensdienste (LDAPv3)
•
javax.net und javax.net.ssl:
- Sockets und SSL-Verschlüsselung
•
javax.print und javax.print.*:
- Drucken und Druckoptionen
•
javax.rmi und javax.rmi.CORBA:
- Nutzen von RMI über das CORBA-Protokoll RMI-IIOP
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 65
Olaf Herden
06/2008
Übersicht Java-Pakete (V)
•
javax.security.*:
- Authentifizierung und Autorisierung
•
javax.sound.*:
- Verarbeitung von Audio-Dateien (MIDI)
•
javax.sql:
- Zugriff aus Java auf Datenbanken
•
javax.swing:
- Graphische Benutzeroberflächen
•
javax.transaction und javax.transaction.xa:
- (Verteiltes) Transaktionsmanagement
•
javax.xml.* und org.xml.*:
- Verarbeitung von XML-Dateien
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 66
Olaf Herden
06/2008
Zusammenfassung (I)
•
Operatoren this/super/instanceof:
- this: Zeigt auf das aktuelle Objekt
- super: Zeigt auf die Oberklasse
- instanceof: Gibt Klassenzugehörigkeit an
•
Parameterübergabe:
- Call by Value
- Call by Reference
•
Beziehungen zwischen Klassen:
- Assoziationen
- Aggregationen und Kompositionen
•
Schnittstellen:
- Vollständig abstrakte Klassen
- Zur Klassenhierarchie orthogonale Eigenschaften
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 67
Olaf Herden
06/2008
Zusammenfassung (II)
•
Polymorphie:
- Definition
- Beispiele
•
Kopieren von Objekten:
- Kopie und Referenz
- Tiefe und flache Kopie
- Methode clone()
•
Klassenbibliotheken:
- Einleitung
- Java-Klassenbibliothek
TIAI1004: Programmierung
Berufsakademie Stuttgart/Horb
Objektorientierte Programmierung III
8 - 68
Olaf Herden
06/2008
Herunterladen