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