42-refinement

Werbung
Objektorientierter Entwurf
(Object-Oriented Design, OOD)
Objektorientierter Entwurf
1) Einführung in die objektorientierte Softwarearchitektur
1) Modularität und Geheimnisprinzip
2) Entwurfsmuster für Modularität
3) BCD-Architekturstil (3-tier architectures)
OOD.2) Verfeinerung des Klassenmodells
2) Verfeinerung des Entwurfsmodells zum Implementierungsmodell
(Anreicherung von Klassendiagrammen)
1) Verfeinerung von Operationen
2) Verfeinerung von Assoziationen
3) Verfeinerung von Vererbung
K
abc
xyz
abra
kadabra
3) Verfeinerung von Lebenszyklen
K
abc: T1
xyz: T2
abra (x:T1) T2
kadabra (y: T2): T1
1) Verfeinerung von verschiedenen Steuerungsmaschinen
4) Verfeinerung mit Chicken Fattening
5) Objektorientierte Rahmenwerke (frameworks)
6) Softwarearchitektur mit dem Quasar-Architekturstil
Version 10-0.1, 04.07.10
Softwaretechnologie, © Prof. Uwe Aßmann, Prof. Heinrich Hussmann
1
Softwaretechnologie
2
Was ist Verfeinerung?
Verfeinerung von Klassendiagrammen
i.G. zu Anreicherung/Detailiierung
.. durch Anreicherung von Information..
Softwaretechnologie, © Prof. Uwe Aßmann
3
Softwaretechnologie
4
Parameter und Datentypen für
Operationen
Vervollständigung von 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
Softwaretechnologie, © Prof. Uwe Aßmann
– istFrei(beginn: Date, dauer: int):boolean
5
Beispiel OOP: Ausfüllen eines
Methodenrumpfs in Java (1)
►
Beispiel Methodenrumpf (2)
Operationen aus dem Analysemodell müssen in der Implementierung
ausgefüllt werden
Teambesprechung
– abstimmen()
teilnahme
*
2..*
6
+ reservieren (für: Termin):boolean;
Softwaretechnologie
Teambesprechung
– abstimmen()
Teammitglied
teilnahme
*
2..*
Teammitglied
+terminBestaetigen()
class Teambesprechung {
+terminBestaetigen()
private Teammitglied[] teilnahme; ...
private boolean abstimmen (Hour beginn, int dauer) ...
class Teambesprechung {
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 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;
}
Softwaretechnologie
7
}
Softwaretechnologie
8
Beispiel Methodenrumpf (3)
Teambesprechung
teilnahme
2..*
*
– abstimmen()
Verfeinerung von Assoziationen
Teammitglied
+terminBestaetigen()
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;
} ...
}
9
Softwaretechnologie
Qualifizierte Assoziation
►
Termin
{abstract}
Assoziation zwischen Klassen K1 und K2, durch das die Menge der zu
einem K1-Objekt assoziierten K2-Objekte partitioniert wird.
titel
beginn
dauer
verschieben() {abstract}
Zweck der Qualifikation ist direkter Zugriff unter Vermeidung von Suche
(Beschleunigung)
K1
a
0..1
K2
Teambesprechung
K2
themen
raumFestlegen()
einladen()
absagen()
verschieben()
statt:
K1
0..*
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.
Softwaretechnologie
10
Qualifizierte Assoziation: Beispiel (1)
Definition: Eine Qualifikation (Qualifier) ist ein Attribut für eine
Notation:
Softwaretechnologie, © Prof. Uwe Aßmann
11
0..*
Besprechungsraum
raumNr
kapazität
0..1
reservieren()
Veranstalfreigeben()
tungsort
freienRaumSuchen()
istFrei()
Raum12.istFrei(start=04.05.02 10:00, dauer=60);
führt zu einer Suche über alle assoziierten Teambesprechungen !
Softwaretechnologie
12
Realisierung einer qualifizierten
Assoziation
Qualifizierte Assoziation: Beispiel (2)
Termin
{abstract}
titel
beginn
dauer
verschieben() {abstract}
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
kleinere
Multiplizität
Teambesprechung
themen
raumFestlegen()
einladen()
absagen()
verschieben()
beginn
Indizierter Zugriff
(Qualifikation)
0..1
0..1
Veranstaltungsort
beginn
Besprechungsraum
raumNr
kapazität
reservieren()
freigeben()
freienRaumSuchen()
istFrei()
Direktzugriff z.B. durch:
TeambesprechungsObjekte
wie bisher
• Hashfunktion
(Berechnung des Indexwerts aus
gegebenem Datum)
Raum12.istFrei(start=04.05.02 10:00, dauer=60);
kann direkt nach Datum abfragen, ob eine Assoziation besteht
• Sortierte Baumstruktur
13
Softwaretechnologie
►
■
Hat man eine Menge von Objekten, die verwaltet werden müssen,
kann eine Verwaltungs- oder Materialbehälterklasse identifiziert
werden
Termin
Raumverwaltung
titel
beginn
dauer
verschieben() {abstract}
freienRaumSuchen()
1
Teambesprechung
*
{abstract}
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:
■
►
►
Teilnahme 0..* Teambesprechung
{ordered}
{ordered} an einem Assoziationsende:
■
►
0..*
14
Softwaretechnologie
Verwaltungsklassen
(Materialbehälterklassen)
Geordnete und sortierte Assoziation
Teammitglied
r12: Besprechungsraum
raumNr = "r12"
kapazität = 20
– einzigeInstanz
Die assoziierten Objekte sind als Menge strukturiert.
Spezieller Einschränkungen als Annotationen möglich,
z.B. die Forderung nach Sortierung gemäß bestimmter Attribute:
0..*
Teambesprechung
Besprechungen
Teilnehmer
{sorted}
{sorted}
{key=beginn}
{key=name}
{order=ascending} {order = ascending}
Teammitglied
Softwaretechnologie
0..*
15
themen
raumFestlegen()
einladen()
absagen()
verschieben()
0..1
Bestand
{sorted} {key= kapazität}
Besprechungsraum
raumNr
beginn
kapazität
Veranstaltungsort
reservieren()
freigeben()
istFrei()
0..1
freienRaumSuchen()
Softwaretechnologie
16
Detailinformation zu abgeleiteten
Elementen
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
Modellelement {derived}
►
►
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.
oder
(Notation: Object Constraint Language OCL von UML)
Beispiele:
Teambesprechung
*
Leitung
1
/ teilnehmeranzahl
/ leiter
* Teilnahme
1
...
*
Teambesprechung * Leitung
Teammitglied
name
2..*
Teammitglied
name
2..*
<<derive>>
{leiter = Leitung.name}
{teilnehmeranzahl = Teilnahme->size}
/ istInKonfl ikt
►
1
/ teilnehmeranzahl
/leiter
* Teilnahme
...
Abhängigkeitspfeil mit <<derive>>: Optionale Angabe des
Ursprungselements einer Abhängigkeit anzugeben.
17
Softwaretechnologie
Softwaretechnologie
18
Elimination von nicht-konformer Vererbung
Verfeinerung von Vererbung
►
►
In Analysemodellen hat die Vererbungsrelation oft mehrere
Bedeutungen
Während das Analysemodell diese Feinheiten nicht unterscheiden
muss, sollte das Entwurfsmodell dies tun
■
Softwaretechnologie, © Prof. Uwe Aßmann
19
Ansonsten kann es zu Laufzeitfehlern kommen
Softwaretechnologie
20
Wiederh.: Ähnlichkeitsrelationen (Similarity
Relationships)
►
is-a: zeigt Ähnlichkeit an
■
►
►
Liskov'sches Substitutionsprinzip (Liskov substitution principle):
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
►
Konforme Vererbung stellt sicher,
■
■
21
Extravaganz (restrictedly-behaves-like)
►
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
dass Ableiten von Unterklassen niemals Fehler in eine Anwendung
einbringt (Robustheit)
dass bei der Unterklassenbildung die Semantik von Oberklassen erhalten
bleibt
instance-of: A ist aus einer Schablone B gemacht worden
Softwaretechnologie
►
Konforme Vererbung (Konformität, behaveslike)
Softwaretechnologie
Konformitätsproblem in Analysemodellen
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)
►
Leider sind nicht alle Vererbungshierarchien konform, insbesondere
nicht in Analysemodellen
■
■
■
Frage: Was passiert, wenn ein
emeritierter Professor keine Vorlesungen
mehr anbietet?
22
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
Professor
giveLecture()
Antwort: Eine Anwendung der Klasse Professor,
die dies erwartet, endet in einem fehlerhaften
Zustand.
Erklärung: ProfessorEmeritus ist eine extravagante
Unterklasse von Professor
Softwaretechnologie
Professor
Emeritus
23
Softwaretechnologie
24
Beispiel: Konforme Vererbung von
Bibliotheks- und Frameworkklassen
Beispiel: Bibliotheken, Frameworks und
Anwendungen
►
PersonManagement
►
►
►
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)
StudentManagement
►
Person
Alumnus
eat()
work()
sleep()
getName()
visitUniversity()
drinkBeer()
Employee
Student
salary
visitLecture()
drinkBeer()
ProfManagement
Professor
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
Beginner
visitNullCourse()
giveLecture()
25
Softwaretechnologie
Zusammenfassung:
UML-Klassenmodelle in Analyse und Entwurf
Softwaretechnologie
The End
►
Analyse-Modell
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
Softwaretechnologie
Entwurfs-Modell
26
Diese Folien sind eine überarbeitete Version der Vorlesungsfolien zur
Vorlesung Softwaretechnologie von © Prof. H. Hussmann, 2002.
used by permission.
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
27
Softwaretechnologie
28
Herunterladen