► ► ► ► 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