• Keine Ergebnisse gefunden

Objektorientierter Entwurf 42) Verfeinerung des Klassenmodells

N/A
N/A
Protected

Academic year: 2021

Aktie "Objektorientierter Entwurf 42) Verfeinerung des Klassenmodells"

Copied!
26
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Objektorientierter Entwurf 42) Verfeinerung des

Klassenmodells

K

abra kadabra

abc xyz

K

abra (x:T1) T2 kadabra (y: T2): T1

abc: T1 xyz: T2

Version 11-0.1, 10.07.11

(2)

Prof. U. Aßmann, Softwaretechnologie 2

Objektorientierter Entwurf

(Object-Oriented Design, OOD)

1) Einführung in die objektorientierte Softwarearchitektur

1) Modularität und Geheimnisprinzip 2) Entwurfsmuster für Modularität

3) BCD-Architekturstil (3-tier architectures)

2) Verfeinerung des Entwurfsmodells zum Implementierungsmodell (Anreicherung von Klassendiagrammen) (42)

1) Verfeinerung von Operationen 2) Verfeinerung von Assoziationen 3) Verfeinerung von Vererbung

3) Verfeinerung von Lebenszyklen

1) Verfeinerung von verschiedenen Steuerungsmaschinen

4) Verfeinerung mit Object Fattening

5) Objektorientierte Rahmenwerke (frameworks)

6) Softwarearchitektur mit dem Quasar-Architekturstil

(3)

42.1 Vervollständigung von Operationen

Zum Selbststudium

(4)

Prof. U. Aßmann, Softwaretechnologie 4

Parameter und Datentypen für Operationen

Analysephase:

oft Operationsname ausreichend

ggf. Parameternamen ohne weitere Information

Entwurfsphase:

Parameter und Datentypen der Operationen genau festlegen

Zu einem Aktionsdiagramm (Statechart, Aktivitätsdiagramm) oder

Interaktionsdiagramm (Sequenzdiagramm, Kommunikationsdiagramm) zuordnen

Implementierung:

Methodenrumpf schreiben

Beispiele (Klasse Besprechungsraum):

+ freienRaumSuchen

(plaetze: int, start: Date, dauer: int=60, raum: Besprechungsraum):

Besprechungsraum

– istFrei(beginn: Date, dauer: int):boolean + reservieren (für: Termin):boolean;

(5)

Beispiel OOP: Ausfüllen eines Methodenrumpfs in Java (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()

*

Operationen aus dem Analysemodell müssen in der Implementierung ausgefüllt werden

(6)

Prof. U. Aßmann, Softwaretechnologie 6

Beispiel Methodenrumpf (2)

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

*

(7)

Beispiel Methodenrumpf (3)

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

*

(8)

Softwaretechnologie, © Prof. Uwe Aßmann

Technische Universität Dresden, Fakultät Informatik 8

42.2 Verfeinerung von Assoziationen

Zum Selbststudium

(9)

Qualifizierte Assoziation

Definition: Eine Qualifikation (Qualifier) ist ein Attribut für eine

Assoziation zwischen Klassen K1 und K2, durch das die Menge der zu einem K1-Objekt assoziierten K2-Objekte partitioniert wird.

Zweck der Qualifikation ist direkter Zugriff unter Vermeidung von Suche (Beschleunigung)

Notation:

K1 0..* K2

a 0..1

K1 K2

statt:

Hinweis: Qualifizierte Assoziationen werden von vielen UML-Werkzeugen nicht oder nur schlecht unterstützt.

Bedeutung vor allem im Zusammenhang mit Datenbanken (Indizes), aber auch mit geeigneten Datenstrukturen nach Java abbildbar.

(10)

Prof. U. Aßmann, Softwaretechnologie 10

Qualifizierte Assoziation: Beispiel (1)

Teambesprechung themen

Termin titel beginn

dauer

verschieben() {abstract}

raumFestlegen() einladen() absagen() verschieben()

{abstract}

Raum12.istFrei(start=04.05.02 10:00, dauer=60);

Veranstal- tungsort

0..1 0..*

Besprechungsraum raumNr

kapazität reservieren()

freigeben()

freienRaumSuchen() istFrei()

führt zu einer Suche über alle assoziierten Teambesprechungen !

(11)

Qualifizierte Assoziation: Beispiel (2)

Teambesprechung themen

Termin titel beginn

dauer

verschieben() {abstract}

raumFestlegen() einladen() absagen() verschieben()

{abstract}

Raum12.istFrei(start=04.05.02 10:00, dauer=60);

Veranstal- tungsort

0..1 0..1

Besprechungsraum raumNr

kapazität reservieren()

freigeben()

freienRaumSuchen() istFrei()

kann direkt nach Datum abfragen, ob eine Assoziation besteht beginn

wie bisher kleinere

Multiplizität

Indizierter Zugriff (Qualifikation)

(12)

Prof. U. Aßmann, Softwaretechnologie 12

Realisierung einer qualifizierten Assoziation

r12: Besprechungsraum raumNr = "r12"

kapazität = 20 04.05.02 09:00

10.05.02 10:00 10.05.02 11:00 10.05.02 12:00 11.05.02 09:00 12.05.02 15:00 12.05.02 17:00

Teambesprechungs- Objekte

Direktzugriff z.B. durch:

Hashfunktion

(Berechnung des Indexwerts aus gegebenem Datum)

Sortierte Baumstruktur beginn

(13)

Geordnete und sortierte Assoziation

{ordered} an einem Assoziationsende:

Es besteht eine feste Reihenfolge, in der die assoziierten Objekte durchlaufen werden können (Sequenz).

Mehrfachvorkommen eines Objekts sind verboten

Keine Angabe an einem Assoziationsende:

Die assoziierten Objekte sind als Menge strukturiert.

Spezieller Einschränkungen als Annotationen möglich,

z.B. die Forderung nach Sortierung gemäß bestimmter Attribute:

Teammitglied 0..* Teilnahme 0..* Teambesprechung {ordered}

Teammitglied 0..* 0..* Teambesprechung

Teilnehmer {sorted}

{key=name}

{order=ascending}

Besprechungen {sorted}

{key=beginn}

{order = ascending}

(14)

Prof. U. Aßmann, Softwaretechnologie 14

Raumverwaltung – einzigeInstanz

* 1

freienRaumSuchen()

Bestand

{sorted} {key= kapazität}

Verwaltungsklassen (Materialbehälterklassen)

Teambesprechung themen

Termin titel beginn

dauer

verschieben() {abstract}

raumFestlegen() einladen() absagen() verschieben()

Besprechungsraum raumNr

kapazität reservieren()

freigeben() istFrei() Veranstal-

tungsort

0..1

{abstract}

beginn

0..1

freienRaumSuchen()

Hat man eine Menge von Objekten, die verwaltet werden müssen, kann eine Verwaltungs- oder Materialbehälterklasse identifiziert werden

(15)

Identifikation von abgeleiteten (redundanten) Elemente

Definition Ein abgeleitetes Modellelement (z.B. Attribut,

Assoziation) ist ein Modell-Element, das jederzeit aus anderen (nicht abgeleiteten) Elementen rekonstruiert werden kann.

Notation

/ Modellelement oder Modellelement {derived}

Beispiele:

Teambesprechung

Teammitglied Leitung

Teilnahme 1

*

2..*

... *

/ teilnehmeranzahl name / leiter

Abhängigkeitspfeil mit <<derive>>: Optionale Angabe des Ursprungselements einer Abhängigkeit anzugeben.

/ istInKonfl ikt

1

* <<derive>>

(16)

Prof. U. Aßmann, Softwaretechnologie 16

Detailinformation zu abgeleiteten Elementen

Zweck: Durch Ableitung kann Redundanz ausdem Model eliminiert werden, und das führt zu einer besseren Konsistenz

Man kann die Ableitungsregel für abgeleitete Elemente explizit angeben.

(Notation: Object Constraint Language OCL von UML)

{leiter = Leitung.name}

{teilnehmeranzahl = Teilnahme->size}

Teambesprechung

Teammitglied Leitung

Teilnahme 1

*

/ teilnehmeranzahl /leiter

... *

name

2..*

(17)

42.3 Verfeinerung von Vererbung

(18)

Prof. U. Aßmann, Softwaretechnologie 18

Elimination von nicht-konformer Vererbung

In Analysemodellen hat die Vererbungsrelation oft mehrere Bedeutungen

Während das Analysemodell diese Feinheiten nicht unterscheiden muss, sollte das Entwurfsmodell dies tun

Ansonsten kann es zu Laufzeitfehlern kommen

(19)

Wiederh.: Ähnlichkeitsrelationen (Similarity Relationships)

is-a: zeigt Ähnlichkeit an

is-a ist azyklische Relation, bei einfacher Vererbung baumförmig

is-structured-like: zeigt ähnliche Struktur an (structurelle Ähnlichkeit oder Gleichheit)

behaves-like: Verhaltensähnlichkeit

always-behaves-like: Konformanz (conformance), Ersetzbarkeit (substitutability)

sometimes-behaves-like: gelegentlich verhaltensgleich

restrictedly-behaves-like: im allgemeinen konformant, aber nicht in speziellen Situationen (extravagance, restriction inheritance)

Achtung: is-a, is-structured-like, behaves-like werden alle Vererbung genannt

instance-of: A ist aus einer Schablone B gemacht worden

(20)

Prof. U. Aßmann, Softwaretechnologie 20

Konforme Vererbung (Konformität, behaves- like)

Konforme Vererbung stellt sicher,

dass Ableiten von Unterklassen niemals Fehler in eine Anwendung einbringt (Robustheit)

dass bei der Unterklassenbildung die Semantik von Oberklassen erhalten bleibt

Liskov'sches Substitutionsprinzip (Liskov substitution principle):

Eine Unterklasse U heisst verhaltenskonform zu einer Oberklasse O, wenn jedes Objekt aus U jedes Objekt aus O ersetzen kann, ohne

eine Anwendungsklasse, die O verwendet, in einen fehlerhaften Zustand zu versetzen

(21)

Extravaganz (restrictedly-behaves-like)

Eine Unterklasse U heisst extravagant (eingeschränkt) zu einer Oberklasse O, wenn nicht alle Objekte aus U alle Objekte aus O ersetzen können, ohne dass in einer Anwendung, die O verwendet, Fehler auftreten

Aka: Eingeschränkte Vererbung (restriction inheritance)

Professor Emeritus

giveLecture()

Professor Frage: Was passiert, wenn ein

emeritierter Professor keine Vorlesungen mehr anbietet?

Antwort: Eine Anwendung der Klasse Professor, die dies erwartet, endet in einem fehlerhaften Zustand.

Erklärung: ProfessorEmeritus ist eine extravagante Unterklasse von Professor

(22)

Prof. U. Aßmann, Softwaretechnologie 22

Konformitätsproblem in Analysemodellen

Leider sind nicht alle Vererbungshierarchien konform, insbesondere nicht in Analysemodellen

Sowohl in UML als auch in Java drückt die Vererbungsrelation nicht unbedingt Konformität aus

Man muss jede einzelne Vererbung daraufhin untersuchen :-(

Und im Entwurfsmodell Konformität herstellen

(23)

ProfManagement

Beispiel: Bibliotheken, Frameworks und Anwendungen

Bibliotheken, Frameworks sind vorgefertigte Pakete mit Vererbungshierarchien von einem anderen

Hersteller

Anwendungen leiten

speziellere Unterklassen davon ab

Beispiele:

Java Development Kit

C++ Standard Template Library (STL)

eat() work() sleep() getName()

Person

giveLecture()

Professor

visitLecture() drinkBeer()

Student

salary

Employee

visitUniversity() drinkBeer()

Alumnus

visitNullCourse()

Beginner

PersonManagement

StudentManagement

(24)

Prof. U. Aßmann, Softwaretechnologie 24

Beispiel: Konforme Vererbung von Bibliotheks- und Frameworkklassen

Verwendet man beim Entwurf eine zugekaufte Klassenbibliothek, stelle man sicher, dass man Anwendungsklassen nur mit konformer Vererbung ableitet

Ansonsten treten Laufzeitfehler in Klassen der Klassenbibliothek auf

Deren Fehlermeldungen sind völlig unverständlich, da sie nicht die eigentlichen Fehlerursache vermitteln können

(25)

Analyse-Modell Entwurfs-Modell

Zusammenfassung:

UML-Klassenmodelle in Analyse und Entwurf

Skizze: Teilweise unvollständig in Attributen und Operationen

Datentypen und Parameter können noch fehlen Noch kaum Bezug zur

Realisierungssprache Keine Überlegungen zur Realisierung von Assoziationen

Nicht-konforme Vererbung

Vollständige Angabe aller Attribute und Operationen

Vollständige Angabe von Datentypen und Parametern Auf Umsetzung in gewählter Programmiersprache bezogen Navigationsangaben, Qualifi kation,

Ordnung, Verwaltungsklassen Entscheidung über Datenstrukturen

Vorbereitung zur Anbindung von Benutzungsoberfl äche und Datenhaltung an fachlichen Kern

Konforme Vererbung

(26)

Prof. U. Aßmann, Softwaretechnologie 26

The End

Diese Folien sind eine überarbeitete Version der Vorlesungsfolien zur Vorlesung Softwaretechnologie von © Prof. H. Hussmann, 2002.

used by permission.

Referenzen

ÄHNLICHE DOKUMENTE

Soufre mouillable (Xi) 11 Andermatt Biocontrol, Burri, Hoko, Intertoresa, Leu-Gygax, Méoc, Schneiter, Sintagro. Soufre FL 11

Produits chimiques pouvant avoir des effets dangereux sur la santé ou être mortels à des doses plus élevées..

Kopfschmerzen, vorübergehende Hautveränderungen, selten allergische Reaktionen (Hautrötung/Flush, Juckreiz), Arrhythmieneigung (bes. nach Herzinfarkt)

In einer ganzen Klasse oder einer Fördergruppe könnte ein Wettbewerb veranstaltet werden, indem jedes Kind dasselbe Spielfeld und dieselbe Buchstabenanweisung erhält; Gewinner ist,

Damit schließt man Hosen, Blusen

Dort gibt es ausführliche Musterlösungen, Proben, Lernzielkontrollen, Schulaufgaben und Klassenarbeiten für alle Schularten, Klassen und Fächer, passend zum aktuellen

(Die Konstruktion muss sichtbar sein.) Markiere dann den Drehpunkt mit rot. b) Zeichne den kleinsten Drehwinkel mit blau ein. c) Berechne den Drehwinkel und schreibe das

nicht selten mehr, als er zu