Softwaretechnologie, © Prof. Uwe Aßmann Technische Universität Dresden, Fakultät Informatik1
Objek tor ientier ter Entw ur f 42) V er fein er ung des Klas senmodells
K abra kadabraabc xyz
K abra (x:T1) T2 kadabra (y: T2): T1
abc: T1 xyz: T2 Version 11-0.1, 10.07.11 Prof. U. Aßmann, Softwaretechnologie
O bj ekt or ient ier ter E nt w ur f (O bj ect -O rient ed D esi gn, O O D )
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-ArchitekturstilSoftwaretechnologie, © Prof. Uwe Aßmann Technische Universität Dresden, Fakultät Informatik3
42.1 V er volls tändigu ng von Oper ationen Zum Se lb st st ud ium Prof. U. Aßmann, Softwaretechnologie
P ar am et er und D at ent ypen für O per at ionen
►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;Prof. U. Aßmann, Softwaretechnologie
B ei sp ie l O O P : A usf ül le n ei ne s M et hodenr um pf s 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;} } TeambesprechungTeammitglied – abstimmen()
teilnahme2..* +terminBestaetigen()*
►Operationen aus dem Analysemodell müssen in der Implementieru ausgefüllt werden Prof. U. Aßmann, Softwaretechnologie
B ei spi el M et hodenr um pf ( 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 ... } ... }
TeambesprechungTeammitglied – abstimmen()
teilnahme2..* +terminBestaetigen()*
Prof. U. Aßmann, Softwaretechnologie
B ei spi el M et hodenr um pf ( 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; } ... }
TeambesprechungTeammitglied – abstimmen()
teilnahme2..* +terminBestaetigen()* Softwaretechnologie, © Prof. Uwe Aßmann Technische Universität Dresden, Fakultät Informatik8
42.2 V er fein eru ng von As soz iationen Zum Se lb st st ud ium
Prof. U. Aßmann, Softwaretechnologie
Q ual ifi zi er te A ssozi at ion
►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: K1K20..*0..1 aK1K2 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
. Prof. U. Aßmann, Softwaretechnologie
Q ual ifi zi er te A ssozi at ion: B ei spi el ( 1)
Teambesprechung themenTermin titel beginn dauer verschieben() {abstract} raumFestlegen() einladen() absagen() verschieben()
{abstract} Raum12.istFrei(start=04.05.02 10:00, dauer=60);
Veranstal- tungsort
0..10..*
Besprechungsraum raumNr kapazität reservieren() freigeben() freienRaumSuchen() istFrei() führt zu einer Suche über alle assoziierten Teambesprechungen !
Prof. U. Aßmann, Softwaretechnologie
Q ual ifi zi er te A ssozi at ion: B ei spi el ( 2)
Teambesprechung themenTermin titelbeginn dauer
verschieben() {abstract} raumFestlegen()
einladen() absagen()
verschieben()
{abstract} Raum12.istFrei(start=04.05.02 10:00, dauer=60);
Veranstal- tungsort
0..10..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) Prof. U. Aßmann, Softwaretechnologie
R eal isi er ung ei ner qual ifi zi er ten A ssozi at ion
r12: Besprechungsraum raumNr = "r12" kapazität = 2004.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
Prof. U. Aßmann, Softwaretechnologie
G eor dnet e und sor tier te A ssozi at ion
►{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:TeammitgliedTeambesprechung0..*0..*Teilnahme {ordered} TeammitgliedTeambesprechung0..*0..* Teilnehmer {sorted} {key=name} {order=ascending}
Besprechungen {sorted} {key=beginn} {order = ascending} Prof. U. Aßmann, Softwaretechnologie
Raumverwaltung – einzigeInstanz *1frei
enRaumSuchen()
Bestand {sorted} {key= kapazität}
V er w al tungskl assen (M at er ial behäl ter kl assen)
Teambesprechung themenTermin titel beginn dauer verschieben() {abstract} raumFestlegen() einladen() absagen() verschieben()
Besprechungsraum
raumNr kapazität
reservieren() freigeben() istFrei()
Veranstal- tungsort
0..1
{abstract} beginn0..1 freienRaumSuchen()
►Hat man eine Menge von Objekten, die verwaltet werden müssen, kann eine Verwaltungs- oderMaterialbehälterklasse identifiziert werden
Prof. U. Aßmann, Softwaretechnologie
Id en tif ika tio n von ab ge lei te te n (r edu nd an te n) E lem ent e
►Definition EinabgeleitetesModellelement (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 TeammitgliedLeitung Teilnahme1* 2..*...*name/ teilnehmeranzahl / leiter ►Abhängigkeitspfeil mit <<derive>>: Optionale Angabe des Ursprungselements einer Abhängigkeit anzugeben.
/ istInKonflikt
1 * <<derive>> Prof. U. Aßmann, Softwaretechnologie
D et ai linf or m at ion zu abgel ei tet en E lem ent en
►Zweck: Durch Ableitung kann Redundanz ausdem Model eliminie 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 TeammitgliedLeitung Teilnahme
1* / teilnehmeranzahl /leiter ...*name 2..*
Softwaretechnologie, © Prof. Uwe Aßmann Technische Universität Dresden, Fakultät Informatik17
42.3 V er feiner ung v on V er er bung
Prof. U. Aßmann, SoftwaretechnologieE lim inat ion von ni cht -konf or m er V er er bung
►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 kommenProf. U. Aßmann, Softwaretechnologie
Wi ed er h. : Ä hn lichke itsr el at io ne n (S im ila rit y R el at ionshi ps)
►is-a: zeigt Ähnlichkeit an is-a ist azyklische Relation, bei einfacher Vererbung baumförmig ►is-structured-like: zeigt ähnliche Struktur an (structurelle Ähnlichke 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 Prof. U. Aßmann, SoftwaretechnologieK onf or m e V er er bung (K onf or m itä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 erhalte bleibtLiskov'sches Substitutionsprinzip (Liskov substitution principle): Eine Unterklasse U heisstverhaltenskonform zu einer Oberklasse O wenn jedes Objekt aus U jedes Objekt aus O ersetzen kann, ohn eine Anwendungsklasse, die O verwendet, in einen fehlerhaften Zustand zu versetzen
Prof. U. Aßmann, Softwaretechnologie
E xt ravaganz (r est rict edl y- behaves- like)
►Eine Unterklasse U heisstextravagant (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 verwende Fehler auftreten ►Aka: Eingeschränkte Vererbung (restriction inheritance) Professor EmeritusgiveLecture()
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 Prof. U. Aßmann, Softwaretechnologie
K onf or m ität spr obl em in A nal ysem odel len
►Leider sind nicht alle Vererbungshierarchien konform, insbesonder 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 herstellenProf. U. Aßmann, Softwaretechnologie
ProfManagement
B ei spi el : B ib liot heke n, Fr am ew or ks und A nw endungen
►Bibliotheken, Frameworks sind vorgefertigte Pakete mit Vererbungshierarchien von einem anderen Hersteller ►Anwendungenleiten speziellereUnterklassen 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 Prof. U. Aßmann, Softwaretechnologie
B ei sp iel : K onf or m e V er er bun g von B ibl io th ek s- und Fr am ew or kkl assen
►Verwendet man beim Entwurf eine zugekaufte Klassenbibliothek, stelle man sicher, dass man Anwendungsklassen nur mit konforme Vererbung ableitet ►Ansonsten treten Laufzeitfehler in Klassen der Klassenbibliothek Deren Fehlermeldungen sind völlig unverständlich, da sie nicht die eigentlichen Fehlerursache vermitteln könnenProf. U. Aßmann, Softwaretechnologie
Analyse-ModellEntwurfs-Modell
Zusam m enf assung: U M L- K lassenm odel le in A nal yse und E nt w ur f
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 VererbungVollständige Angabe aller Attribute und Operationen Vollständige Angabe von Datentypen und Parametern Auf Umsetzung in gewählter Programmiersprache bezogen Navigationsangaben, Qualifikation Ordnung, Verwaltungsklassen Entscheidung über Datenstrukture Vorbereitung zur Anbindung von Benutzungsoberfläche und Datenhaltung an fachlichen Kern Konforme Vererbung Prof. U. Aßmann, Softwaretechnologie