5) W eitere Java-Konstrukte

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