Literatur 5) Weitere Java-Konstrukte ► Obligatorisch: Balzert, verschiedene Abschnitte Boles Kap. 8, 13, 14 ■ ■ ► ► Prof. Dr. rer. nat. Uwe Aßmann Institut für Software- und Multimediatechnik Lehrstuhl Softwaretechnologie Fakultät für Informatik Version 11-0.1, 4/16/11 ■ ► 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/ ■ ■ ■ 1) Konstruktoren Softwaretechnologie, © Prof. Uwe Aßmann Technische Universität Dresden, Fakultät Informatik http://www.computer-books.us/java_8.php http://www.computer-books.us/java.php ■ 1) Bemerkungen zum Selbststudium 2) Sichtbarkeiten 3) Operationen ■ 4) Ausnahmen 5) super TU Dresden uml2_communicationdiagram.html 1 Prof. U. Aßmann, Softwaretechnologie Über die Homepage der Lehrveranstaltung (bei "Vorlesungen") finden Sie die Datei Termin 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 ■ class Termin { ... protected String titel; protected Hour beginn; protected int dauer; ... }; # titel # beginn # dauer ► ■ 2 Laufendes Beispiel Terminverwaltung Hinweis: Online-Ressourcen! ► The Java Language Reference Manual. Freies Java Buch (leider nur Version 1.1, für Grundlagen): class Teambesprechung extends Termin { Teambesprechung teilnahme Kritisieren VeranstOrt 2..* Teammitglied Prof. U. Aßmann, Softwaretechnologie 3 1 private Teammitglied[] teilnahme; private BesprRaum veranstOrt; ... }; Bespr.raum Prof. U. Aßmann, Softwaretechnologie 4 Java im Selbststudium Ausdrücke <Exp> Hinweis: Material zum Selbststudium 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 ► ► ► ► ► ► ► ► ► ► ► ► ► Prof. U. Aßmann, Softwaretechnologie 5 Java im Selbststudium Anweisungen (1) <Statement> ► Variablendeklaration <Typ> <variable>; Konstruktoraufruf new <ClassName> (<parameterList>) Arrayinstanziierung new <BasisTypName> [<n>] Konditionalausdruck <BoolExp> ? <Exp1> : <Exp2> Cast-Ausdruck (<TypName>) <Exp> Prof. U. Aßmann, Softwaretechnologie 6 ► mit Wertsemantik (für primitive Typen) mit Referenzsemantik für Referenztypen (Klassen, Interfaces, Enumerations) Methodenaufruf mit Semikolon o.m(...); Konstruktoraufruf mit Semikolon ► Zuweisung <variable> = <wert>; ► Leere Anweisung ; Block {<StatementList> } • 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> ■ new <ClassName> (<parameterList>); ► Operator in Ausdruck Attributzugriff o.a / super.a / this.a Methodenaufruf o.m(...) / super.m(...) / this.m(...) Array-Zugriff a[i] / a[i][j] / ... Java im Selbststudium Anweisungen (2) Auswahl von Kontrollstrukturen ■ ► Literal Variable, spezielle Variable this Prof. U. Aßmann, Softwaretechnologie 7 Prof. U. Aßmann, Softwaretechnologie 8 Verfeinerung von Klassen Datenkapselung mit Sichtbarkeit von Merkmalen 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 : Softwaretechnologie, © Prof. Uwe Aßmann Technische Universität Dresden, Fakultät Informatik 9 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. Attribut: x.beginn ■ Leseoperation: … x.beginn … (Typ ist Date) ■ Schreiboperation: x.beginn = … Prof. U. Aßmann, Softwaretechnologie Die implizit definierte Variable "This" ► ■ 10 Datenkapselung und Sichtbarkeit ► Definition Für eine Operation OP einer Klasse K wird eine Sichtbarkeit definiert, z.B. privat (Regelfall) oder öffentlich. ■ ► 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: class Teammitglied { private String name; private String abteilung; public Teammitglied (String name, String abteilung) { this.name = name; this.abteilung = abteilung; } ... }; Die Sichtbarkeit eines Attributes ist gleichbedeutend mit der Sichtbarkeit seiner impliziten Operationen. ■ Minuszeichen (privat) ■ Pluszeichen (öffentlich) + Operation + Attribut – Operation – Attribut ■ Kreuzzeichen (geschützt) # Operation # Attribut Teammitglied m = new Teammitglied("Max Müller", "Abt. B"); Prof. U. Aßmann, Softwaretechnologie 11 Prof. U. Aßmann, Softwaretechnologie 12 Modifikatoren (Modifier) für Deklarationen in Java Beispiel: Vererbung und Sichtbarkeit in jUML ► K1 – a1 # a2 op2 kann verwenden: a1, a2, op1, op3 – op1() + op2() # op3() K2 K3 ■ op5() op5 kann verwenden: op2 op4 kann verwenden: a2, op2, op3 Bsp.: public static void main(...) ► Modifikatoren für Sichtbarkeiten: Umsetzung der UML-Sichtbarkeiten ► Klassenattribute und -operationen: Schlüsselwort static class C { C Sichtbarkeitssymbole: – private + public # protected op4() • 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 – 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(...) {...} } 13 Datenkapselung mit Sichtbarkeiten (1) Beispiel ► Java: Vor den Deklarationen von Attributen und Operationen oft längere Ketten von Schlüsselworten Prof. U. Aßmann, Softwaretechnologie 14 Datenkapselung (2) - Beispiel im Detail Private Attributen für Datenkapselung (information hiding) ■ r18: Besprechungsraum bilden die Grundlage für die Verantwortlichkeit des Objekts 2. reservieren(neu) 3. freigeben(alt) Besprechungsraum-Objekt Ort ar12: Teambesprechung leitet Es steht nur lokale Information zur Verfügung: Attributwerte, assoziierte Objekte Teilnahme titel = "12.Abteilungsrunde" beginn = 10.10.00 09:00 dauer = 60 diverse TeammitgliedObjekte titel = "12.Abteilungsrunde" beginn = 10.10.00 09:00 dauer = 60 tm1: Teammitglied 1.1 terminBestätigen(neu) ar12: Teambesprechung Teilnahme verschieben(17.10.00 09:00) Ort 1.2 terminBestätigen(neu) 1.3 terminBestätigen(neu) leitet Leitendes Teammitglied 1. verschieben(17.10.00 09:00) 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 tm2: Teammitglied Anmerkung: Darstellung= UML"Kommunikationsdiagramm" 15 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? Datenkapselung (3) – Wohin legt man Operationen? ► Beispiel: raumFestlegen() in Klasse Teambesprechung ■ 2. Welcher Raum? 3. Reservieren. ■ ► Modularisierungsprinzip der größen Kohäsion/geringen Kopplung: ■ (diverse TeammitgliedObjekte) n=5 Besprechungsraum reservieren(tb) ► R15: Besprechungsraum ■ 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) ■ Prof. U. Aßmann, Softwaretechnologie 17 Mehr zur Sichtbarkeit von Klassen ■ + public # protected – private (default) ... auch Methoden genannt... Sichtbar für: Gleiche Klasse ja ja ja / nein * ja ja nein ja Andere Klasse, gleiches Paket ja Andere Klasse, anderes Paket ja nein nein nein Unterklasse, gleiches Paket ja ja nein ja Unterklasse, anderes Paket ja ja nein nein * Stärkere “Geheimnisse” erlauben bessere Austauschbarkeit von Prof. U. Aßmann, Softwaretechnologie Implementierungen, weil die Umgebung weniger Annahmen trifft Verbesserte Wiederverwendung Operationen Sichtbarkeits-Symbol UML Java Möglichst intensive Ausnutzung der Datenkapselung (große Kohäsion): ♦ da zuordnen, wo am besten von lokaler Information Gebrauch gemacht werden kann tb: Teambesprechung R15 genehmigen(): ♦ Operation von "Termin" oder von "Teammitglied"? Teilnahme freienRaumSuchen() freienRaumSuchen(): ♦ Operation von "Besprechungsraum" oder von "Teambesprechung"? Teambesprechung titel beginn dauer raumFestlegen() einladen() absagen() 1. Wieviele Teilnehmer? Weitere Zweifelsfälle: In UML und C++ “nein”, in Java “ja”. Prof. U. Aßmann, Softwaretechnologie 19 Softwaretechnologie, © Prof. Uwe Aßmann Technische Universität Dresden, Fakultät Informatik 20 18 Klassenoperation (Statische Operation) ► Überladung von Operationen 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 ■ ► ■ ► ► } 21 Prof. U. Aßmann, Softwaretechnologie ► int f1 (int x, y) {...} int f1 (int x) {...} int x = f1(f1(1,2)); macht der Übersetzer ► ► 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 ■ Definition: Ein Konstruktor (-operation) C einer Klasse K ist eine Klassenoperation, die eine neue Instanz der Klasse erzeugt und initialisiert. ■ 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) ); ► 22 Konstruktor-Operation Überladung wird vom Java-Übersetzer statisch aufgelöst. Aus ■ Arithmetic raumNr kapazität plus(Nat, Nat):Nat plus(Int, Int):Int plus(Real, Real):Real Überladen vs. Polymorphismus ■ Java-Operationen: public static main (String[] args) { Steuerzahler hans = new Steuerzahler(); ... } Prof. U. Aßmann, Softwaretechnologie ► Klassisches Beispiel: Arithmetik int f1 (int x, y) {...} int f1 (int x) {...} int x = f1(f1(1,2)); class Steuererklaerung { reservieren() freigeben() freienRaumSuchen() Auswahl aus mehreren gleichnamigen Operationen nach Anzahl und Art der Parameter. +: (Nat,Nat)Nat, (Int,Int)Int, (Real,Real)Real Klassenattribute und -operationen: Schlüsselwort static Besprechungsraum raumNr kapazität Zwei Methoden heissen überladen, wenn sie gleich heissen, sich aber in ihrer Signatur (Zahl oder Typisierung der Parameter) unterscheiden 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 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) 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 23 Prof. U. Aßmann, Softwaretechnologie 24 Mehr zu Konstruktoren in Java ► Löschen von Objekten ► 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 = ""; } teilnahme 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: 2..* * Fortgeschrittene Technik zur Objektverwaltung (z.B. für Caches): ■ "schwache" Referenzen (verhindern Freigabe nicht) ■ Paket java.lang.ref 25 Prof. U. Aßmann, Softwaretechnologie 26 Beispiel Methodenrumpf (2) – Konstruktor für Netzaufbau Beispiel Methodenrumpf (1) Teambesprechung ■ protected void finalize() (über)definieren Teammitglied m = new Teammitglied("Max Müller", "Abt. B"); Teammitglied m2 = new Teammitglied("Mandy Schmitt"); Prof. U. Aßmann, Softwaretechnologie Andere objektorientierte Programmiersprachen kennen Destruktoren (z.B. C++) Speicherfreigabe in Java: ... } ► – abstimmen() In Java gibt es keine Operation zum Löschen von Objekten (keine "Destruktoren"). Teammitglied Teambesprechung +terminBestaetigen() – abstimmen() <<constructor>> Teambesprechung(titel, beginn, dauer, teilnehmer) teilnahme * 2..* Teammitglied +terminBestaetigen() <<constructor>> Teambesprechung(titel, beginn, dauer, teilnehmer) class Teambesprechung { private Teammitglied[] teilnahme; ... private boolean abstimmen (Hour beginn, int dauer) ... class Teambesprechung { private Teammitglied[] teilnahme; ... } 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 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 Prof. U. Aßmann, Softwaretechnologie 28 Beispiel Methodenrumpf (3) – öffentl. Methode Teambesprechung – abstimmen() teilnahme 2..* * Beispiel Netzaufbau im Java-Programm Teammitglied ► +terminBestaetigen() Ein Programm auf höherer Ebene muss zunächst ein Objektnetz verdrahten, bevor die Objekte kommunizieren können (Aufbauphase). Dies kann das Hauptprogramm sein <<constructor>> Teambesprechung(titel, beginn, dauer, teilnehmer) 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); 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 // jetzt erst Arbeitsphase // jetzt erst Arbeitsphase tb1.raumFestlegen(); tb1.raumFestlegen(); ... ... } } 29 Prof. U. Aßmann, Softwaretechnologie 30 Ausnahmebehandlung in Java Ausnahmen (Exceptions) ► ► 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) ■ deklarieren ♦ Aktionen zur weiteren Fortsetzung des Programms bestimmen ♦ 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; Softwaretechnologie, © Prof. Uwe Aßmann Technische Universität Dresden, Fakultät Informatik 31 Prof. U. Aßmann, Softwaretechnologie 32 Dynamische Suche nach Ausnahmebehandlung 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“); throw new ArithmeticException(); } } Ausnahme} Fänger Prof. U. Aßmann, Softwaretechnologie 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 33 Definition neuer Ausnahmen Prof. U. Aßmann, Softwaretechnologie 34 Deklaration und Propagation von 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 ► 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. 35 Prof. U. Aßmann, Softwaretechnologie 36 Bruch von Verträgen und Ausnahmen ► Regeln zum Umgang mit 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: ► ■ ► Prof. U. Aßmann, Softwaretechnologie 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 ■ 37 Nur die richtige Dosierung des Einsatzes von Ausnahmen ist gut lesbar Gesetz 35: Führen Sie zu Ende, was Sie begonnen haben ■ 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! Gesetz 34: Verwenden Sie Ausnahmen nur ausnahmsweise ■ try { editor.draw(fig); } catch (ParameterContractViolation) { fig = new Figure(); editor.draw(fig); } ► Gesetz des pragmatischen Programmierers 58: Bauen Sie die Dokumentation ein Vertragsüberprüfungen, generieren Ausnahmen Prof. U. Aßmann, Softwaretechnologie Wiederholung: Dynamische Suchalgorithmen in der JVM ► ■ ■ ► Feinheiten der Vererbung 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 Softwaretechnologie, © Prof. Uwe Aßmann Technische Universität Dresden, Fakultät Informatik 40 38 Aufruf von Oberklassen-Konstruktoren durch super-Konstruktoraufruf Vererbung und Assoziation zusammen ► Termin class Termin { ... protected String titel; protected Hour beginn; protected int dauer; ... }; # titel # beginn # dauer 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; }; }; class Teambesprechung extends Termin { Teambesprechung private Teammitglied[] teilnahme; private BesprRaum veranstOrt; ... teilnahme VeranstOrt 2..* Teammitglied ► 1 Bespr.raum 41 verschieben(neu: Date):Boolean Teambesprechung 42 Was haben wir gelernt? "super" in überschriebenen Operationen Termin ... 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 }; Prof. U. Aßmann, Softwaretechnologie "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 { ► boolean verschieben (neu: Date) { ...z.B. Aufzeichnung in Log-datei } ... } ► ► ► ► verschieben(neu: Date):Boolean 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 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 Prof. U. Aßmann, Softwaretechnologie 44