• Keine Ergebnisse gefunden

1) Bemerkungen zum Selbststudium 2) Sichtbarkeiten 3) Operationen

N/A
N/A
Protected

Academic year: 2021

Aktie "1) Bemerkungen zum Selbststudium 2) Sichtbarkeiten 3) Operationen"

Copied!
11
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Softwaretechnologie, © Prof. Uwe Aßmann

Technische Universität Dresden, Fakultät Informatik 1

5) Weitere Java-Konstrukte

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) Bemerkungen zum Selbststudium 2) Sichtbarkeiten 3) Operationen

1)Konstruktoren

4) Ausnahmen 5) super

Prof. U. Aßmann, Softwaretechnologie 2

Literatur

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

Prof. U. Aßmann, Softwaretechnologie 3

Hinweis: Online-Ressourcen!

Ü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 4

Laufendes Beispiel Terminverwaltung

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-

mitglied Bespr.-

raum 2..*

1

(2)

Prof. U. Aßmann, Softwaretechnologie 5

Hinweis: Material zum Selbststudium

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 6

Java im Selbststudium Ausdrü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>)

Arrayinstanziierung new <BasisTypName> [<n>]

Konditionalausdruck <BoolExp> ? <Exp1> : <Exp2>

Cast-Ausdruck (<TypName>) <Exp>

Prof. U. Aßmann, Softwaretechnologie 7

Java im Selbststudium

Anweisungen (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, Softwaretechnologie 8

Java im Selbststudium

Anweisungen (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>

(3)

Softwaretechnologie, © Prof. Uwe Aßmann

Technische Universität Dresden, Fakultät Informatik 9

Verfeinerung von Klassen -

Datenkapselung mit Sichtbarkeit von Merkmalen

Prof. U. Aßmann, Softwaretechnologie 10

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 :

Attribut: x.beginn (Typ ist Date)

Leseoperation: … x.beginn …

Schreiboperation: x.beginn = …

Prof. U. Aßmann, Softwaretechnologie 11

Die implizit definierte Variable "This"

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 12

Datenkapselung und Sichtbarkeit

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 # Attribut

(4)

Prof. U. Aßmann, Softwaretechnologie 13

Beispiel: Vererbung und Sichtbarkeit in jUML

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 14

Modifikatoren (Modifier) für Deklarationen in Java

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üsselwort static

Prof. U. Aßmann, Softwaretechnologie 15

Datenkapselung mit Sichtbarkeiten (1) - Beispiel

ar12: Teambesprechung titel = "12.Abteilungsrunde"

beginn = 10.10.00 09:00 dauer = 60

Teilnahme

leitet

diverse Teammitglied- Objekte Ort

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

Es 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 16

Datenkapselung (2) - Beispiel im Detail

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"

(5)

Prof. U. Aßmann, Softwaretechnologie 17

Datenkapselung (3) – Wohin legt man Operationen?

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 18

Datenkapselung (3) – Wohin legt man Operationen?

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 Wiederverwendung

Prof. U. Aßmann, Softwaretechnologie 19

Sichtbarkeits-Symbol UML

Java

Mehr zur Sichtbarkeit von Klassen

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

ja ja

ja

ja nein

nein nein nein nein

nein

nein nein

ja/ *

* In UML und C++ “nein”, in Java “ja”.

Softwaretechnologie, © Prof. Uwe Aßmann

Technische Universität Dresden, Fakultät Informatik 20

Operationen

... auch Methoden genannt...

(6)

Prof. U. Aßmann, Softwaretechnologie 21

Klassenoperation (Statische Operation)

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

Klassenattribute und -operationen: Schlüsselwort static

Besprechungsraum raumNr kapazität reservieren()

freigeben() freienRaumSuchen()

class Steuererklaerung {

public static main (String[] args) { Steuerzahler hans =

new Steuerzahler();

...

} }

Prof. U. Aßmann, Softwaretechnologie 22

Überladung von Operationen

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

Prof. U. Aßmann, Softwaretechnologie 23

Überladen vs. Polymorphismus

Ü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 24

Konstruktor-Operation

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: Eine Konstruktoroperationen 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();

(7)

Prof. U. Aßmann, Softwaretechnologie 25

Mehr zu Konstruktoren in Java

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 26

Löschen von Objekten

In Java gibt es keine 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

Prof. U. Aßmann, Softwaretechnologie 27

Beispiel Methodenrumpf (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;

} }

Teambesprechung Teammitglied

– abstimmen()

teilnahme 2..*

+terminBestaetigen()

*

<<constructor>>

Teambesprechung(titel, beginn, dauer, teilnehmer)

Prof. U. Aßmann, Softwaretechnologie 28

Beispiel Methodenrumpf (2) – Konstruktor für Netzaufbau

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

} ...

}

Teambesprechung Teammitglied

– abstimmen()

teilnahme 2..*

+terminBestaetigen()

*

<<constructor>>

Teambesprechung(titel, beginn, dauer, teilnehmer)

(8)

Prof. U. Aßmann, Softwaretechnologie 29

Beispiel Methodenrumpf (3) – öffentl. Methode

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;

} ...

}

Teambesprechung Teammitglied

– abstimmen()

teilnahme 2..*

+terminBestaetigen()

*

<<constructor>>

Teambesprechung(titel, beginn, dauer, teilnehmer)

Prof. U. Aßmann, Softwaretechnologie 30

Beispiel Netzaufbau im Java-Programm

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 Informatik 31

Ausnahmen (Exceptions)

Prof. U. Aßmann, Softwaretechnologie 32

Ausnahmebehandlung in Java

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;

(9)

Prof. U. Aßmann, Softwaretechnologie 33

Java-Syntax für Ausnahmebehandlung

class TotalDiv {

public static int tDiv (int x, int y) throws ArithmeticException {

try {

return (x / y);

}

catch (ArithmeticException e) {

System.err.println(„Division by zero“);

throw new ArithmeticException();

} }

}

Gekapselter Block

Ausnahme- Fänger Schnittstelle

Prof. U. Aßmann, Softwaretechnologie 34

Dynamische Suche nach Ausnahmebehandlung

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

Suche nach Abfangklausel (catch) entlang der (dynamischen) Aufrufhierarchie:

Prof. U. Aßmann, Softwaretechnologie 35

Definition neuer Ausnahmen

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 !

Prof. U. Aßmann, Softwaretechnologie 36

Deklaration und Propagation von Ausnahmen

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.

(10)

Prof. U. Aßmann, Softwaretechnologie 37

Bruch von Verträgen und 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:

try {

editor.draw(fig);

} catch (ParameterContractViolation) { fig = new Figure();

editor.draw(fig);

}

Vorteil: kontrollierte Reaktion auf Vertragsbrüche.

Prof. U. Aßmann, Softwaretechnologie 38

Regeln zum Umgang mit Ausnahmen

Gesetz des pragmatischen Programmierers 58: Bauen Sie die Dokumentation ein

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

Nur die richtige Dosierung des Einsatzes von Ausnahmen ist gut lesbar

Gesetz 35: Führen Sie zu Ende, was Sie begonnen haben

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

Vertragsüberprüfungen, generieren Ausnahmen

Prof. U. Aßmann, Softwaretechnologie 39

Wiederholung: Dynamische Suchalgorithmen in der JVM

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

Softwaretechnologie, © Prof. Uwe Aßmann

Technische Universität Dresden, Fakultät Informatik 40

Feinheiten der Vererbung

(11)

Prof. U. Aßmann, Softwaretechnologie 41

Vererbung und Assoziation zusammen

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-

mitglied

Bespr.- raum 2..*

1

Prof. U. Aßmann, Softwaretechnologie 42

class Teambesprechung extends Termin { ...

private Teammitglied[] teilnahme;

...

public Teambesprechung (String t, Hour b, Dauer d, Teammitglied[] tn) { super(t, b, d);

teilnahme = tn; ... };

};

Aufruf von Oberklassen-Konstruktoren durch super-Konstruktoraufruf

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

};

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

Prof. U. Aßmann, Softwaretechnologie 43

"super" in überschriebenen Operationen

Termin

verschieben(neu: Date):Boolean ...

Teambesprechung

verschieben(neu: Date):Boolean

class Termin {

boolean verschieben (neu: Date) { ...z.B. Aufzeichnung in Log-datei }

...}

class Teambesprechung extends Termin boolean verschieben (neu: Date) { ...

super.verschieben(neu) }

...

}

"super"

ermöglicht auch den Zugriff auf überschriebene Versionen von Operationen, wie sie in einer

Oberklasse definiert sind.

Andere Syntax als bei Konstruktoren!

Prof. U. Aßmann, Softwaretechnologie 44

Was haben wir gelernt?

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

Referenzen

ÄHNLICHE DOKUMENTE

Naturpapier braun / grau; Hasenstallgitter (Ich hatte Reste – es gibt aber auch Gittergewebe aus Kunststoff im Baumarkt), Wollreste in Herbstfarben, „Herbstschätze“, die die

a) Informiere dich auf den Buchseiten 64/65 über die Schritte zum Zeichnen eines Profils (etwas Ähnliches haben wir bereits im Unterricht zum Gleit- und Prallhang besprochen). Im

–&#34; Ein Objekt ist eine Instanz einer Klasse K, wenn es Element der Menge aller Objekte der Klasse K ist.!. !&#34; Künftig werden wir die Klasse weniger als Menge von Objekten

• dient nur als Schablone für abgeleitete Klassen I abstrakte Klassen können nicht instanziert werden. • Compiler

Definition Objekte sind alle Elemente, die erstellt, gespeichert oder bearbeitet werden können.. B Elemente eines Textes, die mit einem Programm bearbeitet

► Definition Für eine Operation OP einer Klasse K wird eine Sichtbarkeit definiert, z.B.. privat (Regelfall)

► Def.: Eine Operation einer Klasse K ist die Beschreibung einer Aufgabe, die jede Instanz der Klasse K ausführen kann. ►

Wir bauen sechs kongruente Treppenkörper in den Farben rot, grün, blau, zyan, magen- ta und gelb.. Diese fügen wir so zusammen, dass das Ganze in einen Würfel der Kanten- länge 2n