Weitere Java-Konstrukte

Werbung
Weitere Java-Konstrukte
Institut für Software- und
Multimediatechnik
1) Bemerkungen zum
Selbststudium
2) Sichtbarkeiten
3) Operationen
Lehrstuhl Softwaretechnologie
1) Konstruktoren
Prof. Dr. rer. nat. Uwe Aßmann
Fakultät für Informatik
TU Dresden
Version 09-0.2, 11/4/08
4) Ausnahmen
5) super
Softwaretechnologie, © Prof. Uwe Aßmann
1
Literatur
►
Obligatorisch:
■
■
►
►
The Java Language Reference Manual.
Freies Java Buch (leider nur Version 1.1, für Grundlagen):
■
■
►
Balzert, verschiedene Abschnitte
Boles Kap. 8, 13, 14
http://www.computer-books.us/java_8.php
http://www.computer-books.us/java.php
Kommunikationsdiagramme:
http://www.agilemodeling.com/essays/umlDiagrams.htm
■
http://www.agilemodeling.com/artifacts/communicationDiagram.htm
■
http://en.wikipedia.org/wiki/Communication_diagram
■
http://www.sparxsystems.com.au/resources/uml2_tutorial/
uml2_communicationdiagram.html
■
Prof. U. Aßmann, Softwaretechnologie
2
Hinweis: Online-Ressourcen!
►
Über die Homepage der Lehrveranstaltung (bei "Vorlesungen") finden Sie
die Datei
Terminv.java
►
Diese Datei enthält eine vollständige Umsetzung des Beispiels
"Terminverwaltung" in lauffähigen Java-Code.
►
Empfohlene Benutzung:
■
Lesen
■
Übersetzen, Starten, Verstehen
■
Modifizieren
■
Kritisieren
Prof. U. Aßmann, Softwaretechnologie
3
Hinweis: Material zum Selbststudium
►
►
►
Die folgenden Folien enthalten Material zur Java-Programmierung für das
Selbststudium.
Das Material wird in den Übungen an verschiedenen Stellen entfaltet
Bitte stellen Sie sicher, dass Sie diese Folieninhalte beherrschen
Prof. U. Aßmann, Softwaretechnologie
4
Java im Selbststudium
Ausdrücke <Exp>
►
►
►
►
►
►
►
►
►
►
Literal
Variable, spezielle Variable this
Operator in Ausdruck
Attributzugriff o.a / super.a / this.a
Methodenaufruf o.m(...) / super.m(...) / this.m(...)
Array-Zugriff a[i] / a[i][j] / ...
Konstruktoraufruf new <ClassName> (<parameterList>)
Arrayinstanziierung new <BasisTypName> [<n>]
Konditionalausdruck <BoolExp> ? <Exp1> : <Exp2>
Cast-Ausdruck (<TypName>) <Exp>
WS 2008/09
Softwaretechnologie U02
Prof. U. Aßmann, Softwaretechnologie
5
Java im Selbststudium
Anweisungen (1) <Statement>
►
Variablendeklaration <Typ> <variable>;
mit Wertsemantik (für primitive Typen)
■ mit Referenzsemantik für Referenztypen (Klassen, Interfaces,
Enumerations)
Methodenaufruf mit Semikolon o.m(...);
Konstruktoraufruf mit Semikolon
■
►
►
new <ClassName> (<parameterList>);
►
Zuweisung <variable> = <wert>;
►
Leere Anweisung ;
Block {<StatementList> }
►
WS 2008/09
Softwaretechnologie U02
Prof. U. Aßmann, Softwaretechnologie
6
Java im Selbststudium
Anweisungen (2) Auswahl von Kontrollstrukturen
• if (<BoolExp>) <Statement1> else <Statement2>
• switch (<Exp>) {
case <Exp1> : <StatementList1>
...
default: <StatementList>
• while (<BoolExp>) <Statement>
• for (<InitExp>; <BoolExp>; <UpdateExp>) <Statement>
• break [<label>];
• return [<Exp>];
• try <TryBlock>
catch (<formalParam1>) <CatchBlock1>
...
finally <FinallyBlock>
WS 2008/09
Softwaretechnologie U02
Prof. U. Aßmann, Softwaretechnologie
7
Verfeinerung von Klassen Datenkapselung mit Sichtbarkeit von
Merkmalen
Softwaretechnologie, © Prof. Uwe Aßmann
8
Laufendes Beispiel Terminverwaltung
Termin
class Termin {
...
protected String titel;
protected Hour beginn;
protected int dauer;
...
};
# titel
# beginn
# dauer
class Teambesprechung
extends Termin {
Teambesprechung
teilnahme
VeranstOrt
2..*
Teammitglied
1
private Teammitglied[] teilnahme;
private BesprRaum veranstOrt;
...
};
Bespr.raum
Prof. U. Aßmann, Softwaretechnologie
9
Zugriff auf Attributwerte in Java
►
Attributwerte sind „Privatangelegenheit“ eines Objekts (Geheimnisprinzip)
►
Acessoren (Zugriffsmethoden) sind implizite Operationen zum Lesen und
Schreiben von Attributwerten
►
►
■
Lesen („get-Methode“)
■
Setzen („set-Methode“)
Beispiel:
■
Attribut:
beginn: Date
■
Leseoperation:
getBeginn(): Date
■
Schreiboperation:
setBeginn(d: Date)
In den meisten objektorientierten Programmiersprachen (auch Java)
können Attribute syntaktisch wie Variablen angesprochen werden:
Für Objekt x : Teambesprechung :
■
Attribut:
x.beginn
■
Leseoperation:
… x.beginn …
■
Schreiboperation:
x.beginn = …
(Typ ist Date)
Prof. U. Aßmann, Softwaretechnologie
10
Die implizit definierte Variable "This"
►
Bezüge auf Attributwerte und Operationsaufrufe werden i.A. mit
Objekt . Name angegeben.
►
"this" bedeutet das Objekt, auf dem die Methode ausgeführt wird.
►
"this" wird vom Übersetzer automatisch ergänzt, wenn die Objektangabe
fehlt.
class Teammitglied {
private String name;
private String abteilung;
public Teammitglied (String name, String abteilung) {
this.name = name;
this.abteilung = abteilung;
}
...
};
Teammitglied m = new Teammitglied("Max Müller", "Abt. B");
Prof. U. Aßmann, Softwaretechnologie
11
Datenkapselung und Sichtbarkeit
►
Definition Für eine Operation OP einer Klasse K wird eine Sichtbarkeit
definiert, z.B. privat (Regelfall) oder öffentlich.
■
Die Sichtbarkeit eines Attributes ist gleichbedeutend mit der Sichtbarkeit seiner
impliziten Operationen.
►
Private Operation OP einer Klasse K: Die Ausführung von OP für ein
Objekt der Klasse K ist nur durch ein Objekt der selben Klasse K möglich.
►
Öffentliche (public) Operation: Ein beliebiges Objekt darf OP ausführen.
►
Geschützte (protected) Operation: Ein Objekt O darf OP genau dann
ausführen, wenn die Klasse von O eine Unterklasse von K ist.
►
Notation:
■
Minuszeichen (privat)
– Operation
– Attribut
■
Pluszeichen (öffentlich)
+ Operation
+ Attribut
■
Kreuzzeichen (geschützt)
# Operation
# Attribut
Prof. U. Aßmann, Softwaretechnologie
12
Beispiel: Vererbung und Sichtbarkeit in jUML
K1
– a1
# a2
– op1()
+ op2()
# op3()
K2
op4()
K3
op2 kann verwenden:
a1, a2, op1, op3
op5()
op5 kann verwenden:
op2
op4 kann verwenden:
a2, op2, op3
Sichtbarkeitssymbole:
–
private
+
public
#
protected
• Alle Attribute und Operationen werden als Bestandteil der Objektstruktur
vererbt.
• In der Unterklasse sichtbar sind nur öffentliche und geschützte Attribute
und Operationen.
Prof. U. Aßmann, Softwaretechnologie
13
Modifikatoren (Modifier) für Deklarationen in Java
►
Java: Vor den Deklarationen von Attributen und Operationen oft längere
Ketten von Schlüsselworten
■
Bsp.: public static void main(...)
►
Modifikatoren für Sichtbarkeiten: Umsetzung der UML-Sichtbarkeiten
Klassenattribute und -operationen: Schlüsselwort static
►
C
class C {
– a1: T1
# a2: T2
+ a3: T3
+a4: T4
private T1 a1;
protected T2 a2;
public T3 a3;
public static T4 a4;
– op1()
# op2()
+ op3()
+op4()
private ... op1(...) {...}
protected ... op2(...) {...}
public ... op3(...) {...}
public static ... op4(...) {...}
}
Prof. U. Aßmann, Softwaretechnologie
14
Datenkapselung mit Sichtbarkeiten (1) - Beispiel
►
Private Attributen für Datenkapselung (information hiding)
■
bilden die Grundlage für die Verantwortlichkeit des Objekts
Besprechungsraum-Objekt
Ort
Teilnahme
ar12: Teambesprechung
diverse
TeammitgliedObjekte
titel = "12.Abteilungsrunde"
beginn = 10.10.00 09:00
dauer = 60
leitet
verschieben(17.10.00 09:00)
Es steht nur lokale Information
zur Verfügung:
Attributwerte, assoziierte Objekte
Leitendes
Teammitglied
1. Alle Teammitglieder nach Konflikten
mit neuem Datum fragen
2. Besprechungsraum zum neuen Termin
reservieren
3. Alte Reservierung (Raum) freigeben
4. Datum ändern
Prof. U. Aßmann, Softwaretechnologie
15
Datenkapselung (2) - Beispiel im Detail
r18: Besprechungsraum
2. reservieren(neu)
Ort
3. freigeben(alt)
tm1: Teammitglied
Teilnahme
1.1 terminBestätigen(neu)
ar12: Teambesprechung
titel = "12.Abteilungsrunde"
beginn = 10.10.00 09:00
dauer = 60
tm2: Teammitglied
1.2 terminBestätigen(neu)
1.3 terminBestätigen(neu)
leitet
1. verschieben(17.10.00 09:00)
Anmerkung:
Darstellung= UML"Kommunikationsdiagramm"
tm3: Teammitglied
1. Alle Teammitglieder nach Konflikten
mit neuem Datum fragen
2. Besprechungsraum zum neuen Termin
reservieren
3. Alte Reservierung (Raum) freigeben
4. Datum ändern
Prof. U. Aßmann, Softwaretechnologie
16
Datenkapselung (3) – Wohin legt man Operationen?
Beispiel:
raumFestlegen() in Klasse Teambesprechung
Teambesprechung
titel
beginn
dauer
raumFestlegen()
einladen()
absagen()
1. Wieviele Teilnehmer?
2. Welcher Raum?
3. Reservieren.
Teilnahme
(diverse
TeammitgliedObjekte)
tb: Teambesprechung
freienRaumSuchen()
R15
Besprechungsraum
n=5
reservieren(tb)
R15: Besprechungsraum
Prof. U. Aßmann, Softwaretechnologie
17
Datenkapselung (3) – Wohin legt man Operationen?
►
Weitere Zweifelsfälle:
■
freienRaumSuchen():
♦ Operation von "Besprechungsraum" oder von "Teambesprechung"?
■
genehmigen():
♦ Operation von "Termin" oder von "Teammitglied"?
►
Modularisierungsprinzip der größen Kohäsion/geringen Kopplung:
■
Möglichst intensive Ausnutzung der Datenkapselung (große Kohäsion):
♦ da zuordnen, wo am besten von lokaler Information Gebrauch gemacht werden kann
►
■
Notwendigkeit zur Objektinteraktion möglichst minimieren (geringe Kopplung)
■
Möglichst Gebrauch von vorhandenen Operationen machen bzw. Operationen
mehrfach nutzen (geringe Redundanz)
Mit Sichtbarkeiten verbirgt man im Modell Geheimnisse (Parnas' Prinzip
des information hiding)
■
■
Stärkere “Geheimnisse” erlauben bessere Austauschbarkeit von
Implementierungen, weil die Umgebung weniger Annahmen trifft
Verbesserte Wiederverwendung
Prof. U. Aßmann, Softwaretechnologie
18
Mehr zur Sichtbarkeit von Klassen
Sichtbarkeits-Symbol
UML
Java
+
public
#
protected
–
private
Gleiche Klasse
ja
ja
ja
ja
Andere Klasse, gleiches Paket
ja
nein
ja
Andere Klasse, anderes Paket
ja
nein
nein
nein
Unterklasse, gleiches Paket
ja
ja
nein
ja
Unterklasse, anderes Paket
ja
ja
nein
nein
(default)
Sichtbar für:
*
ja / nein *
In UML und C++ “nein”, in Java “ja”.
Prof. U. Aßmann, Softwaretechnologie
19
Operationen
... auch Methoden genannt...
Softwaretechnologie, © Prof. Uwe Aßmann
20
Klassenoperation (Statische Operation)
►
Definition Eine Klassenoperation A einer Klasse K ist die Beschreibung
einer Aufgabe, die nur unter Kenntnis der aktuellen Gesamtheit der
Instanzen der Klasse ausgeführt werden kann.
Gewöhnliche Operationen heißen auch Instanzoperationen.
►
UML Notation: Unterstreichung analog zu Klassenattributen.
►
Java: Die Methode main() ist statisch, und kann vom Betriebssystem aus
aufgerufen werden
■ Klassenattribute und -operationen: Schlüsselwort static
Besprechungsraum
raumNr
kapazität
class Steuererklaerung {
reservieren()
freigeben()
freienRaumSuchen()
}
public static main (String[] args) {
Steuerzahler hans =
new Steuerzahler();
...
}
Prof. U. Aßmann, Softwaretechnologie
21
Überladung von Operationen
►
Zwei Methoden heissen überladen, wenn sie gleich heissen, sich aber in
ihrer Signatur (Zahl oder Typisierung der Parameter) unterscheiden
■
►
Auswahl aus mehreren gleichnamigen Operationen nach Anzahl und Art der
Parameter.
Klassisches Beispiel: Arithmetik
+: (Nat,Nat)Nat, (Int,Int)Int, (Real,Real)Real
►
Java-Operationen:
int f1 (int x, y) {...}
int f1 (int x) {...}
int x = f1(f1(1,2));
Arithmetic
raumNr
kapazität
plus(Nat, Nat):Nat
plus(Int, Int):Int
plus(Real, Real):Real
Prof. U. Aßmann, Softwaretechnologie
22
Überladen vs. Polymorphismus
►
Überladung wird vom Java-Übersetzer statisch aufgelöst. Aus
int f1 (int x, y) {...}
int f1 (int x) {...}
int x = f1(f1(1,2));
macht der Übersetzer
int f1_2_int_int (int x, y) {...}
int f1_1_int (int x) {...}
int x = f1_1_int( f1_2_int_int(1,2) );
■
■
►
indem er die Stelligkeit und die Typen der Parameter bestimmt und den
Funktionsnamen in der .class-Datei expandiert
Polymorphie dagegen kann nicht zur Übersetzungszeit aufgelöst werden
■
Der Merkmalssuchalgorithmus muss dynamisch laufen, da dem Übersetzer nicht
klar ist, welchen Unterklassentyp ein Objekt besitzt (es können alle Typen
unterhalb der angegebenen Klasse in Frage kommen)
Prof. U. Aßmann, Softwaretechnologie
23
Konstruktor-Operation
►
Definition: Ein Konstruktor (-operation) C einer Klasse K ist eine
Klassenoperation, die eine neue Instanz der Klasse erzeugt und initialisiert.
■
►
►
Ergebnistyp von C ist immer implizit die Klasse K.
Explizite Konstruktoroperationen werden in UML mit einem Stereotyp
"<<constructor>>" markiert.
Default-Konstruktor: Eine Konstruktoroperationen ohne Parameter wird
implizit für jede Klasse angenommen
Besprechungsraum
raumNr
kapazität
freigeben()
freienRaumSuchen()
neuerBesprechungsraum
(raumNr, kapazität) <<constructor>>
class Teammitglied {
... // ohne Konstruktor
}
Teammitglied m = new Teammitglied();
neuerBesprechungsraum (kapazität) <<constructor>>
Prof. U. Aßmann, Softwaretechnologie
24
Mehr zu Konstruktoren in Java
►
Konstruktoren werden meist überladen:
class Teammitglied {
private String name;
private String abteilung;
public Teammitglied (String n, String abt) {
name = n;
abteilung = abt;
}
public Teammitglied (String n) {
name = n;
abteilung = "";
}
... }
Teammitglied m = new Teammitglied("Max Müller", "Abt. B");
Teammitglied m2 = new Teammitglied("Mandy Schmitt");
Prof. U. Aßmann, Softwaretechnologie
25
Löschen von Objekten
►
In Java gibt es keine Operation zum Löschen von Objekten
(keine "Destruktoren").
■
►
►
Andere objektorientierte Programmiersprachen kennen Destruktoren (z.B. C+
+)
Speicherfreigabe in Java:
■
Sobald keine Referenz mehr auf ein Objekt besteht, kann es gelöscht
werden.
■
Der konkrete Zeitpunkt der Löschung wird vom Java-Laufzeitsystem
festgelegt ("garbage collection").
■
Aktionen, die vor dem Löschen ausgeführt werden müssen:
protected void finalize() (über)definieren
Fortgeschrittene Technik zur Objektverwaltung (z.B. für Caches):
■
"schwache" Referenzen (verhindern Freigabe nicht)
■
Paket java.lang.ref
Prof. U. Aßmann, Softwaretechnologie
26
Beispiel Methodenrumpf (1)
Teambesprechung
– abstimmen()
teilnahme
2..*
*
Teammitglied
+terminBestaetigen()
<<constructor>>
Teambesprechung(titel,
beginn, dauer, teilnehmer)
class Teambesprechung {
private Teammitglied[] teilnahme; ...
}
private boolean abstimmen (Hour beginn, int dauer) {
boolean ok = true;
for (int i=0; i<teilnahme.length; i++)
ok = ok &&
teilnahme[i].terminBestaetigen(beginn, dauer);
return ok;
}
Prof. U. Aßmann, Softwaretechnologie
27
Beispiel Methodenrumpf (2) – Konstruktor für
Netzaufbau
Teambesprechung
– abstimmen()
teilnahme
*
2..*
Teammitglied
+terminBestaetigen()
<<constructor>>
Teambesprechung(titel,
beginn, dauer, teilnehmer)
class Teambesprechung {
private Teammitglied[] teilnahme; ...
private boolean abstimmen (Hour beginn, int dauer) ...
public Teambesprechung (String titel,
Hour beginn, int dauer, Teammitglied[] teilnehmer) {
// ... titel, beginn, dauer lokal speichern
this.teilnahme = teilnehmer;
if (! abstimmen(beginn, dauer))
System.out.println("Termin bitte verschieben!");
else ...
} ...
}
Prof. U. Aßmann, Softwaretechnologie
28
Beispiel Methodenrumpf (3) – öffentl. Methode
Teambesprechung
– abstimmen()
teilnahme
2..*
*
Teammitglied
+terminBestaetigen()
<<constructor>>
Teambesprechung(titel,
beginn, dauer, teilnehmer)
class Teammitglied { ...
private Teambesprechung[] teilnahme;
public boolean terminBestaetigen (Hour beginn,int dauer){
boolean konflikt = false;
int i = 0;
while (i < teilnahme.length && !konflikt) {
if (teilnahme[i].inKonflikt(beginn, dauer))
konflikt = true;
else
i++;
};
return !konflikt;
} ...
}
Prof. U. Aßmann, Softwaretechnologie
29
Beispiel Netzaufbau im Java-Programm
►
Ein Programm auf höherer Ebene muss zunächst ein Objektnetz verdrahten,
bevor die Objekte kommunizieren können (Aufbauphase). Dies kann das
Hauptprogramm sein
class Terminv {
public static void main (String argv[]) {
// Aufbauphase
Besprechungsraum r1 = new Besprechungsraum("R1", 10);
Besprechungsraum r2 = new Besprechungsraum("R2", 20);
Teammitglied mm = new Teammitglied("M. Mueller", "Abt. A");
Teammitglied es = new Teammitglied("E. Schmidt", "Abt. B");
Teammitglied fm = new Teammitglied("F. Maier", "Abt. B");
Teammitglied hb = new Teammitglied("H. Bauer", "Abt. A");
Hour t1s5 = new Hour(1,5); // Tag 1, Stunde 5
Teammitglied[] tlB1 = {mm, es};
Teambesprechung tb1 =
new Teambesprechung("Bespr. 1", t1s5, 2, tlB1);
// jetzt erst Arbeitsphase
tb1.raumFestlegen();
...
}
}
Prof. U. Aßmann, Softwaretechnologie
30
Ausnahmen (Exceptions)
Softwaretechnologie, © Prof. Uwe Aßmann
31
Ausnahmebehandlung in Java
►
►
Ausnahme (Exception):
■
Objekt einer Unterklasse von java.lang.Exception
■
Vordefiniert oder und selbstdefiniert
Ausnahme
■
auslösen (to throw an exception)
♦ Erzeugen eines Exception-Objekts
♦ Löst Suche nach Behandlung aus
■
abfangen und behandeln (to catch and handle an exception)
♦ Aktionen zur weiteren Fortsetzung des Programms bestimmen
■
deklarieren
♦ Angabe, daß eine Methode außer dem normalen Ergebnis auch eine Ausnahme
auslösen kann (Java: throws)
♦ Beispiel aus java.io.InputStream:
public int read() throws IOException;
Prof. U. Aßmann, Softwaretechnologie
32
Java-Syntax für Ausnahmebehandlung
Schnittstelle
class TotalDiv {
public static int tDiv (int x, int y)
throws ArithmeticException {
Gekapselter
try {
Block
return (x / y);
}
catch (ArithmeticException e) {
System.err.println(„Division by zero“);
raise ArithmeticException;
}
}
}
AusnahmeFänger
Prof. U. Aßmann, Softwaretechnologie
33
Dynamische Suche nach Ausnahmebehandlung
►
Suche nach Abfangklausel (catch) entlang der (dynamischen)
Aufrufhierarchie:
main
m1
m2
Suchreihenfolge
/
• Bei mehreren Abfangklauseln an der gleichen Stelle der Hierarchie gilt
die zuerst defi nierte Klausel:
try { }
catch (xException e)
catch (yException e)
Suchreihenfolge
Prof. U. Aßmann, Softwaretechnologie
34
Definition neuer Ausnahmen
Benutzung von benutzerdefinierten Ausnahmen möglich und
empfehlenswert !
class TestException extends Exception {
public TestException () {
super();
}
}
class SpecialAdd {
public static int sAdd (int x, int y)
throws TestException {
if (y == 0)
throw new TestException();
else
return x + y;
}
}
Prof. U. Aßmann, Softwaretechnologie
35
Deklaration und Propagation von Ausnahmen
►
►
Wer eine Methode aufruft, die eine Ausnahme auslösen kann, muß
■
entweder die Ausnahme abfangen
■
oder die Ausnahme weitergeben (propagieren)
Propagation in Java: Deklarationspflicht mittels throws
(außer bei Error und RunTimeException)
public static void main (String[] argv){
System.out.println(SpecialAdd.sAdd(3,0));
}
Java-Compiler: Exception TestException must be caught,
or it must be declared in the throws clause of this method.
Prof. U. Aßmann, Softwaretechnologie
36
Bruch von Verträgen und Ausnahmen
►
Man kann Verträge auch mit Ausnahmetests prüfen:
class ContractViolation {..};
class ParameterContractViolation extends ContractViolation {..};
class FigureEditor{
draw (Figure figure) throws ContractViolation {
if (figure == null) throw new ParameterContractViolation();
}}
►
im Aufrufer:
try {
editor.draw(fig);
} catch (ParameterContractViolation) {
fig = new Figure();
editor.draw(fig);
}
►
Vorteil: kontrollierte Reaktion auf Vertragsbrüche.
Prof. U. Aßmann, Softwaretechnologie
37
Regeln zum Umgang mit Ausnahmen
►
Gesetz des pragmatischen Programmierers 58: Bauen Sie die
Dokumentation ein
■
■
►
Gesetz 34: Verwenden Sie Ausnahmen nur ausnahmsweise
■
►
Nur die richtige Dosierung des Einsatzes von Ausnahmen ist gut lesbar
Gesetz 35: Führen Sie zu Ende, was Sie begonnen haben
■
■
►
Ausnahmebehandlung niemals zur Behandlung normaler (d.h. häufig
auftretender) Programmsituationen einsetzen
Ausnahmen sind Ausnahmen, regulärer Code behandelt die regulären Fälle!
Auf keinen Fall Ausnahmen “abwürgen”, z.B. durch triviale
Ausnahmebehandlung
Ausnahmen zu propagieren ist keine Schande, sondern erhöht die Flexibilität
des entwickelten Codes.
Gesetz 33 Verhindern Sie das Unmögliche mit Zusicherungen
■
Vertragsüberprüfungen, generieren Ausnahmen
Prof. U. Aßmann, Softwaretechnologie
38
Wiederholung: Dynamische Suchalgorithmen in der
JVM
►
Merkmalssuchalgorithmus
■
■
►
Die JVM sucht dynamisch nach Methoden und Attributen entlang der
Vererbungshierarchie. Diese ist im .class-Datei abgespeichert und wird darin
abgesucht
Verwendung für Polymorphie und Reflektion
Ausnahmenbehandlersuche
■
Die JVM sucht dynamisch den Aufrufkeller nach oben ab, ob zur ausgelösten
Ausnahme ein Behandler definiert
Prof. U. Aßmann, Softwaretechnologie
39
Feinheiten der Vererbung
Softwaretechnologie, © Prof. Uwe Aßmann
40
Vererbung und Assoziation zusammen
Termin
class Termin {
...
protected String titel;
protected Hour beginn;
protected int dauer;
...
};
# titel
# beginn
# dauer
class Teambesprechung
extends Termin {
Teambesprechung
teilnahme
VeranstOrt
2..*
Teammitglied
1
private Teammitglied[] teilnahme;
private BesprRaum veranstOrt;
...
};
Bespr.raum
Prof. U. Aßmann, Softwaretechnologie
41
Aufruf von Oberklassen-Konstruktoren durch superKonstruktoraufruf
►
►
"super" ermöglicht Aufruf von Methoden, die in der Oberklasse definiert und
überschattet sind.
Ein Super-Konstruktoraufruf ruft den Konstruktor der Oberklasse auf und
kann damit alle Aktionen dessen übernehmen
class Termin {
protected String titel;
protected Hour beginn;
protected int dauer;
...
public Termin
(String t, Hour b, Dauer d) {
titel = t; beginn = b; dauer = d; };
};
Spezielle Syntax
für Konstruktoren:
"super" immer als
erste Anweisung!
class Teambesprechung extends Termin {
...
private Teammitglied[] teilnahme;
...
public Teambesprechung (String t, Hour b, Dauer d,
Teammitglied[] tn) {
super(t, b, d);
teilnahme = tn; ... };
};
Prof. U. Aßmann, Softwaretechnologie
42
"super" in überschriebenen Operationen
Termin
...
verschieben(neu: Date):Boolean
Teambesprechung
class Termin {
boolean verschieben
(neu: Date) {
...z.B. Aufzeichnung
in Log-datei
}
...
}
verschieben(neu: Date):Boolean
class Teambesprechung
extends Termin
"super"
ermöglicht auch den Zugriff auf
überschriebene Versionen von
Operationen, wie sie in einer
Oberklasse definiert sind.
Andere Syntax als bei Konstruktoren!
boolean verschieben
(neu: Date) {
...
super.verschieben(neu)
}
...
}
Prof. U. Aßmann, Softwaretechnologie
43
Was haben wir gelernt?
►
►
►
►
►
Kapselung und Modularisierung werden mit Sichtbarkeiten möglich
Spezielle Variablen (this, super) erlauben den Zugriff auf Attribute und
überschriebene Methoden/Operationen
Ausnahmen für Ausnahmen
Kommunikationsdiagramme ordnen die Methodenaufrufe über der Fläche an
und zeigen die Zeit durch Nummerierung an
Klassenoperationen von Objektoperationen unterscheiden
Prof. U. Aßmann, Softwaretechnologie
44
Herunterladen