• Keine Ergebnisse gefunden

Hin we is: On lin e- Re sso ur ce n!

N/A
N/A
Protected

Academic year: 2021

Aktie "Hin we is: On lin e- Re sso ur ce n!"

Copied!
22
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Softwaretechnologie, © Prof. Uwe Aßmann Technische Universit 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/11

1) Bem erkungen z um Selbststudium 2) Sichtbarkeiten 3) O perationen

1)Konstruktoren

4) Ausnahmen 5) super

Prof. U. Aßmann, Softwaretechnologie

Lite 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.html

(2)

Prof. 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, Softwaretechnologie

La 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

(3)

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, Softwaretechnologie

Java im Selb ststu d iu m Au sd 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>

(4)

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 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, Softwaretechnologie

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

(5)

Softwaretechnologie, © Prof. Uwe Aßmann Technische Universit 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, Softwaretechnologie

Zu 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 =

(6)

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)OperationAttribut Pluszeichen (öffentlich) +Operation +Attribut Kreuzzeichen (geschützt)#Operation #Attribut

(7)

Prof. 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: Schsselwortstatic

(8)

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 ändern

ar12: 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"

(9)

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

(10)

Prof. 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 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 Javaja”. Softwaretechnologie, © Prof. Uwe Aßmann Technische Universit Dresden, Fakultät Informatik20

Oper ationen ... auch Methoden genannt...

(11)

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: Schsselwortstatic Besprechungsraum raumNr kapazit 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 plus(Nat, Nat):Nat plus(Int, Int):Int plus(Real, Real):Real

(12)

Prof. 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, Softwaretechnologie

K 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();

(13)

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.ref

(14)

Prof. 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)

(15)

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(); ... } }

(16)

Softwaretechnologie, © Prof. Uwe Aßmann Technische Universit Dresden, Fakultät Informatik31

Ausnahm en ( Exceptions)

Prof. U. Aßmann, Softwaretechnologie

A 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;

(17)

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:

(18)

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; } }Benu

tzung 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.

Referenzen

ÄHNLICHE DOKUMENTE

Das bedeutet, dass zu jeder Methode (Frame) eine eigene Exception-Table zugewiesen wird. Jeder Catch-Block in der Methode erzeugt jeweils einen Eintrag in der Exception-Table.

The inability of Arab societies to make a transition from authoritarian political systems to democratic ones has been explained in two ways: (1) as a result of religious and cultural

suchen: prevElem mit prevElem.next == oldElem prevElem.next = oldElem.next;. next

– java.lang: Basis-Klassen (System, Object, Runtime, String, ...) – java.lang.reflect: Java Reflection API (Introspektion,

&lt;Ibezeichner&gt; definieren, denen Objekte von das Interface implementierenden Klassen zugeordnet werden können; damit kann Polymorphie/dynamisches Binden ausgenutzt

▪ javadoc: Werkzeug des JDK zur Generierung von HTML-Code zur Dokumentation des Protokolls einer oder mehrerer Klassen:.. ▪ Aufruf:

Dietrich Boles.

● Will oder kann man das Exceptionhandling innerhalb einer Funktion nicht ausprogrammieren, das kann ganz unterschiedliche Gründe haben, können Exceptions weitergeleitet werden.