Softwaretechnologie, © Prof. Uwe Aßmann Technische Universität Dresden, Fakultät Informatik1
5) W eiter e Java- Konstr ukte
Prof. Dr. rer. nat. Uwe Aßmann Institut für Software- und Multimediatechnik Lehrstuhl Softwaretechnologie Fakultät für Informatik TU Dresden Version 11-0.1, 4/16/111) Bem erkungen z um Selbststudium 2) Sichtbarkeiten 3) O perationen
1)Konstruktoren4) Ausnahmen 5) super
Prof. U. Aßmann, SoftwaretechnologieLite ra tu r
►Obligatorisch: ■Balzert, verschiedene Abschnitte ■Boles Kap. 8, 13, 14 ►The Java Language Reference Manual. ►Freies Java Buch (leider nur Version 1.1, für Grundlagen): ■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.htmlProf. U. Aßmann, Softwaretechnologie
Hin we is: On lin e- Re sso ur ce n!
►Ü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, SoftwaretechnologieLa ufe nd es B eisp ie l T er m in ve rwa ltu ng
class Teambesprechung extends Termin { private Teammitglied[] teilnahme; private BesprRaum veranstOrt; ... };
Termin # titel # beginn # dauer
class Termin {
... protected String titel; protected Hour beginn; protected int dauer; ... }; Teambesprechung teilnahme VeranstOrt Team- mitgliedBespr.- raum
2..* 1
Prof. U. Aßmann, Softwaretechnologie
Hin we is: M ate ria l zu m S elb ststu diu m
►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, SoftwaretechnologieJava im Selb ststu d iu m Au sd rü 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>) ►Arrayinstanziierungnew <BasisTypName> [<n>] ►Konditionalausdruck <BoolExp> ? <Exp1> : <Exp2> ►Cast-Ausdruck (<TypName>) <Exp>Prof. U. Aßmann, Softwaretechnologie
Java im Selb ststu d iu m An weisu n g en (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> } Prof. U. Aßmann, SoftwaretechnologieJava im Selb ststu d iu m An weisu n g en (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>Softwaretechnologie, © Prof. Uwe Aßmann Technische Universität Dresden, Fakultät Informatik9
V erfei ne ru ng von K lass en - Da ten kap sel ung mi t Sic htba rke it von M er km alen
Prof. U. Aßmann, SoftwaretechnologieZu gr iff a uf A ttr ib utwe rte in Ja va
►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(Typ ist Date) ■Leseoperation:… x.beginn … ■Schreiboperation:x.beginn = …Prof. U. Aßmann, Softwaretechnologie
Die im plizit d efin ie rte V ar ia ble "Th is"
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");►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. Prof. U. Aßmann, Softwaretechnologie
Da te nka pse lu ng u nd S ich tb ar ke it
►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 #AttributProf. U. Aßmann, Softwaretechnologie
B eisp ie l: V er er bu ng u nd S ich tb ar ke it in jUM L
K1 – a1 # a2 – op1() + op2() # op3()op2 kann verwenden: a1, a2, op1, op3 K2 op4() •Alle Attribute und Operationen werden als Bestandteil der Objektstruktur vererbt. •In der Unterklasse sichtbar sind nur öffentliche und geschützte Attribute und Operationen.
op4 kann verwenden: a2, op2, op3 Sichtbarkeitssymbole: –private +public #protected
K3 op5() op5 kann verwenden: op2 Prof. U. Aßmann, Softwaretechnologie
M od ifika to re n ( M od ifie r) fü r De kla ra tio ne n in Ja va
C – a1: T1 # a2: T2 + a3: T3 +a4: T4 – op1() # op2() + op3() +op4()class C { private T1 a1; protected T2 a2; public T3 a3; public static T4 a4; private ... op1(...) {...} protected ... op2(...) {...} public ... op3(...) {...} public static ... op4(...) {...} }
►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üsselwortstatic
Prof. U. Aßmann, Softwaretechnologie
Da te nka pse lu ng m it S ich tb ar ke ite n ( 1) - B eisp ie l
ar12: Teambesprechung titel = "12.Abteilungsrunde"beginn = 10.10.00 09:00 dauer = 60
Teilnahme leitet
diverse Teammitglied- Objekte
OrtBesprechungsraum-Objekt 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 ändernEs steht nur lokale Information zur Verfügung: Attributwerte, assoziierte Objekte
►Private Attributen für Datenkapselung (information hiding) ■bilden die Grundlage für die Verantwortlichkeit des Objekts Leitendes Teammitglied Prof. U. Aßmann, Softwaretechnologie
Da te nka pse lu ng ( 2) - B eisp ie l im De ta il
1. verschieben(17.10.00 09:00) 4. Datum ändernar12: Teambesprechung titel = "12.Abteilungsrunde"
beginn = 10.10.00 09:00 dauer = 60
leitet
Ort tm1: Teammitglied tm2: Teammitglied tm3: Teammitglied
Teilnahme
r18: Besprechungsraum 1. Alle Teammitglieder nach Konflikten mit neuem Datum fragen
1.1 terminBestätigen(neu) 1.2 terminBestätigen(neu) 1.3 terminBestätigen(neu) 2. Besprechungsraum zum neuen Termin reservieren
2. reservieren(neu) 3. Alte Reservierung (Raum) freigeben
3. freigeben(alt) Anmerkung: Darstellung= UML- "Kommunikationsdiagramm"
Prof. U. Aßmann, Softwaretechnologie
Da te nka pse lu ng ( 3) – W oh in le gt m an Op er atio ne n?
Beispiel:raumFestlegen() in Klasse Teambesprechung Teambesprechung titel beginn dauer raumFestlegen() einladen() absagen()1. Wieviele Teilnehmer? 2. Welcher Raum? 3. Reservieren. tb: Teambesprechung
Teilnahme (diverse Teammitglied- Objekte) n=5 Besprechungsraum
freienRaumSuchen() R15 R15: Besprechungsraum
reservieren(tb) Prof. U. Aßmann, Softwaretechnologie
Da te nka pse lu ng ( 3) – W oh in le gt m an Op er atio ne n?
►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 WiederverwendungProf. U. Aßmann, Softwaretechnologie
Sichtbarkeits-Symbol UML Java
M eh r zu r S ich tb ar ke it vo n K la sse n
Sichtbar für: Gleiche Klasse Andere Klasse, gleiches Paket Andere Klasse, anderes Paket Unterklasse, gleiches Paket Unterklasse, anderes Paket+ public# protected– private(default) ja ja ja ja ja
ja ja ja
jaja ja ja
nein
nein nein nein nein
nein nein
neinja/* *In UML und C++ “nein”, in Java “ja”. Softwaretechnologie, © Prof. Uwe Aßmann Technische Universität Dresden, Fakultät Informatik20
Oper ationen ... auch Methoden genannt...
Prof. U. Aßmann, Softwaretechnologie
K la sse no pe ra tio n (S ta tisch e Op er atio n)
►Definition Eine KlassenoperationA 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üsselwortstatic Besprechungsraum raumNr kapazität reservieren() freigeben() freienRaumSuchen()class Steuererklaerung { public static main (String[] args) { Steuerzahler hans = new Steuerzahler(); ... } } Prof. U. Aßmann, Softwaretechnologie
Üb er la du ng vo n Op er atio ne n
►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):RealProf. U. Aßmann, Softwaretechnologie
Üb er la de n vs. P olym or ph ism us
►Ü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, SoftwaretechnologieK on str ukto r- Op er atio n
►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:EineKonstruktoroperationen ohne Parameter wird implizit für jede Klasse angenommen Besprechungsraum raumNr kapazität freigeben() freienRaumSuchen() neuerBesprechungsraum (raumNr, kapazität) <<constructor>> neuerBesprechungsraum (kapazität) <<constructor>>class Teammitglied {
... // ohne Konstruktor } Teammitglied m = new Teammitglied();
Prof. U. Aßmann, Softwaretechnologie
M eh r zu K on str ukto re n in Ja va
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");
►Konstruktoren werden meist überladen: Prof. U. Aßmann, Softwaretechnologie
Lö sch en vo n Ob je kte n
►In Java gibt eskeine 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.refProf. U. Aßmann, Softwaretechnologie
B eisp ie l M eth od en ru m pf ( 1)
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; } }TeambesprechungTeammitglied – abstimmen()
teilnahme2..* +terminBestaetigen()* <<constructor>> Teambesprechung(titel, beginn, dauer, teilnehmer) Prof. U. Aßmann, Softwaretechnologie
B eisp ie l M eth od en ru m pf ( 2) – K on str ukto r fü r Ne tza ufb au
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 ... } ... }
TeambesprechungTeammitglied – abstimmen()
teilnahme2..* +terminBestaetigen()* <<constructor>> Teambesprechung(titel, beginn, dauer, teilnehmer)
Prof. U. Aßmann, Softwaretechnologie
B eisp ie l M eth od en ru m pf ( 3) – ö ffe ntl. M eth od e
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; } ... }
TeambesprechungTeammitglied – abstimmen()
teilnahme2..* +terminBestaetigen()* <<constructor>> Teambesprechung(titel, beginn, dauer, teilnehmer) Prof. U. Aßmann, Softwaretechnologie
B eisp ie l Ne tza ufb au im Ja va -P ro gr am m
►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(); ... } }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(); ... } }Softwaretechnologie, © Prof. Uwe Aßmann Technische Universität Dresden, Fakultät Informatik31
Ausnahm en ( Exceptions)
Prof. U. Aßmann, SoftwaretechnologieA usn ah m eb eh an dlu ng in Ja va
►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
Ja va -S yn ta x fü r A usn ah m eb eh an dlu ng
classTotalDiv{ publicstaticinttDiv(intx,inty) throwsArithmeticException{ try{ return(x/y); } catch(ArithmeticExceptione){ System.err.println(„Divisionbyzero“); thrownewArithmeticException(); } } }Gekapselter Block Ausnahme- Fänger
Schnittstelle Prof. U. Aßmann, Softwaretechnologie
Dyn am isch e S uch e n ach A usn ah m eb eh an dlu ng
main m1 m2 /Suchreihenfolge •Bei mehreren Abfangklauseln an der gleichen Stelle der Hierarchie gilt die zuerst definierte Klausel:
try { } catch (xException e) catch (yException e)
Suchreihenfolge
►Suche nach Abfangklausel (catch) entlang der (dynamischen) Aufrufhierarchie:
Prof. U. Aßmann, Softwaretechnologie
De fin itio n n eu er A usn ah m en
classTestExceptionextendsException{ publicTestException(){ super(); } } classSpecialAdd{ publicstaticintsAdd(intx,inty) throwsTestException{ if(y==0) thrownewTestException(); else returnx+y; } }Benutzung von benutzerdefinierten Ausnahmen möglich und empfehlenswert ! Prof. U. Aßmann, Softwaretechnologie
De kla ra tio n u nd P ro pa ga tio n vo n A usn ah m en
►Wer eine Methode aufruft, die eine Ausnahme auslösen kann, muß ■entweder die Ausnahme abfangen ■oder die Ausnahme weitergeben (propagieren) ►Propagation in Java: Deklarationspflicht mittelsthrows (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.