Objektorientierter Entwurf (Object-Oriented Design, OOD) Objektorientierter Entwurf 1) Einführung in die objektorientierte Softwarearchitektur OOD.2) Anreicherung des Klassenmodells 2) Verfeinerung des Entwurfsmodells zum Implementierungsmodell (Anreicherung von Klassendiagrammen) 1) Modularität und Geheimnisprinzip 2) Entwurfsmuster für Modularität 3) BCED-Architekturstil (3-tier architectures) 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 09-0.2,02.01.09 Softwaretechnologie, © Prof. Uwe Aßmann, Prof. Heinrich Hussmann 1 Softwaretechnologie Verfeinerung von UML von der Analyse zum Entwurf zur Implementierung Was bedeutet Verfeinerung? ► Verfeinerung vom Analysemodell zum Entwurfsmodell ■ Operationen: . . Analyse-Modell Entwurfs-Modell Implementierungsmodell Notation: aUML Notation: dUML Notation: jUML (Java) Objekte: Fachgegenstände Objekte: Softwareeinheiten Klassen: Fachbegriffe Klassen: Schemata konforme Vererbung Vererbung: Begriffsstruktur Vererbung: Programmableitung Sichtbarkeiten für Geheimnisse ■ ■ Annahme perfekter Technologie Erfüllung konkreter Rahmenbedingungen Verfeinerung von Assoziationen zu Collections Funktionale Essenz Gesamtstruktur des Systems Völlig projektspezifisch Ähnlichkeiten zwischen verwandten Projekten Einziehen von Rollen und Schnittstellen Grobe Strukturskizze Genaue Strukturdefinition Mehr Struktur & mehr Details Softwaretechnologie 2 . . ■ ► Strukturierung Detaillierung Flachklopfen (lowering) Integration von Unterobjekten Kriterium hier: Resultat ist noch in UML darstellbar Verfeinerung vom Entwurfsmodell zur Implementierung ■ ■ Gleiche Operationen, aber Sichtbarkeiten Umorganisieren von nicht-konformer in konforme Vererbung Auswahl einer Implementierungssprache Kriterium hier: Resultat ist nicht mehr in UML darstellbar, sondern in der Programmiersprache, also hier Java Mehr Struktur & mehr Details 3 Softwaretechnologie 4 Schritte beim Übergang zum Entwurfsmodell ► Strukturierung ■ ■ ■ ► ► Einziehen von Paketen zur Strukturierung Einschränkung von Sichtbarkeiten, um Wiederverwendung zu erhöhen Identifikation von abgeleiteten Modellelementen zur Elimination von Redundanz (Verschlankung) Detaillierung ■ ■ ■ ■ ■ ■ ■ ► Schritte beim Übergang zum Implementierungsmodell (Feinentwurf) Strukturierung ■ ■ ► Detaillierung ■ Einziehen von Navigationsrichtungen, um Platz zu sparen Einziehen von Qualifikationen, um Suchen zu beschleunigen Einziehen von abgeleiteten Relationen, um Zugriffe, Navigationen und Abfragen zu beschleunigen (Verfettung) Annotation von geordneten und sortierten Assoziationen Verfeinerung der Typisierung Verfeinerung der Vererbungsrelation zu konformer Vererbung zur Elimination von Fehlern Einziehen von Schnittstellen zur Sicherstellung von homogenem Verhalten Verwaltungsklassen 5 Softwaretechnologie Verfeinerung von Klassendiagrammen Auflösen von Mehrfachvererbung Paketierung, damit verbunden das Einziehen von Sichtbarkeiten, um die Datenkapselung und Austauschbarkeit zu erhöen ■ ■ ■ ■ Einziehen von Navigationsrichtungen, um Platz zu sparen Einziehen von Qualifikationen, um Suchen zu beschleunigen Annotation von geordneten und sortierten Assoziationen Verfeinerung der Typisierung Verfeinerung der Vererbungsrelation zu konformer Vererbung zur Elimination von Fehlern 6 Softwaretechnologie Verfeinerung von Operationen .. durch Anreicherung von Information.. Softwaretechnologie, © Prof. Uwe Aßmann 7 Softwaretechnologie, © Prof. Uwe Aßmann 8 Parameter und Datentypen für Operationen ► ► ► Analysephase: ► ■ oft Operationsname ausreichend ■ ggf. Parameternamen ohne weitere Information – abstimmen() ■ Parameter und Datentypen der Operationen genau festlegen ! ■ Statechart, Aktivitätsdiagramm, oder Kollaborationsdiagramm zuordnen Implementierung: + freienRaumSuchen (plaetze: int, start: Date, dauer: int=60, raum: Besprechungsraum): Besprechungsraum – istFrei(beginn: Date, dauer: int):boolean + reservieren (für: Termin):boolean; } 9 Softwaretechnologie Beispiel Methodenrumpf (2) – abstimmen() * 2..* * Teammitglied +terminBestaetigen() private Teammitglied[] teilnahme; ... Beispiele (Klasse Besprechungsraum): teilnahme teilnahme class Teambesprechung { Methodenrumpf schreiben Teambesprechung Operationen aus dem Analysemodell müssen in der Implementierung ausgefüllt werden Teambesprechung Entwurfsphase: ■ ► Beispiel OOP: Ausfüllen eines Methodenrumpfs in Java (1) 2..* 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; } 10 Softwaretechnologie Beispiel Methodenrumpf (3) Teammitglied Teambesprechung +terminBestaetigen() – abstimmen() teilnahme * 2..* Teammitglied +terminBestaetigen() class Teammitglied { ... class Teambesprechung { private Teambesprechung[] teilnahme; private Teammitglied[] teilnahme; ... private boolean abstimmen (Hour beginn, int dauer) ... 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; } ... 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 ... } ... } } Softwaretechnologie 11 Softwaretechnologie 12 Qualifizierte Assoziation Verfeinerung von Assoziationen ► 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..1 a K2 statt: 0..* K1 K2 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, © Prof. Uwe Aßmann 13 Qualifizierte Assoziation: Beispiel (1) Qualifizierte Assoziation: Beispiel (2) Termin Termin titel beginn dauer verschieben() {abstract} titel beginn dauer verschieben() {abstract} {abstract} {abstract} Teambesprechung themen raumFestlegen() einladen() absagen() verschieben() 14 Softwaretechnologie 0..* Besprechungsraum raumNr kapazität 0..1 reservieren() Veranstalfreigeben() tungsort freienRaumSuchen() istFrei() Indizierter Zugriff (Qualifikation) kleinere Multiplizität Teambesprechung themen raumFestlegen() einladen() absagen() verschieben() 0..1 0..1 beginn Veranstaltungsort Besprechungsraum raumNr kapazität reservieren() freigeben() freienRaumSuchen() istFrei() wie bisher Raum12.istFrei(start=04.05.02 10:00, dauer=60); kann direkt nach Datum abfragen, ob eine Assoziation besteht Raum12.istFrei(start=04.05.02 10:00, dauer=60); führt zu einer Suche über alle assoziierten Teambesprechungen ! Softwaretechnologie 15 Softwaretechnologie 16 Realisierung einer qualifizierten Assoziation Geordnete und sortierte Assoziation Teammitglied beginn 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 ► r12: Besprechungsraum raumNr = "r12" kapazität = 20 ► TeambesprechungsObjekte ► • Hashfunktion (Berechnung des Indexwerts aus gegebenem Datum) ■ 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: 0..* Teambesprechung Besprechungen Teilnehmer {sorted} {sorted} {key=beginn} {key=name} {order=ascending} {order = ascending} Teammitglied • Sortierte Baumstruktur 17 Softwaretechnologie Verwaltungsklassen (Materialbehälterklassen) ► Termin Raumverwaltung titel beginn dauer verschieben() {abstract} – einzigeInstanz {abstract} themen raumFestlegen() einladen() absagen() verschieben() freienRaumSuchen() ► 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} ► * * Leitung 1 / teilnehmeranzahl / leiter * Teilnahme 1 ... Bestand {sorted} {key= kapazität} Besprechungsraum raumNr beginn kapazität Veranstaltungsort reservieren() freigeben() istFrei() oder Beispiele: Teambesprechung 0..1 freienRaumSuchen() Softwaretechnologie 18 Softwaretechnologie 1 0..1 0..* Identifikation von abgeleiteten (redundanten) Elemente Hat man eine Menge von Objekten, die verwaltet werden müssen, kann eine Verwaltungs- oder Materialbehälterklasse identifiziert werden Teambesprechung Teilnahme 0..* Teambesprechung {ordered} {ordered} an einem Assoziationsende: ■ Direktzugriff z.B. durch: 0..* * Teammitglied name 2..* <<derive>> / istInKonfl ikt ► 19 Abhängigkeitspfeil mit <<derive>>: Optionale Angabe des Ursprungselements einer Abhängigkeit anzugeben. Softwaretechnologie 20 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. Verfeinerung von Vererbung (Notation: Object Constraint Language OCL von UML) Teambesprechung * Leitung 1 / teilnehmeranzahl /leiter * Teilnahme ... Teammitglied name 2..* {leiter = Leitung.name} {teilnehmeranzahl = Teilnahme->size} Softwaretechnologie 21 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 Softwaretechnologie, © Prof. Uwe Aßmann Wiederh.: Ähnlichkeitsrelationen (Similarity Relationships) ► is-a: zeigt Ähnlichkeit an ■ ► ► ■ ■ ■ ► 23 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 ■ Softwaretechnologie 22 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 Softwaretechnologie 24 Konforme Vererbung (Konformität, behaveslike) Extravaganz (restrictedly-behaves-like) ► Liskov'sches Substitutionsprinzip (Liskov substitution principle): Eine Unterklasse U heisst verhaltenskonform wenn jedes Objekt aus U jedes Objekt aus O ersetzen kann, ohne eine Anwendungsklasse, die O verwendet, in einen fehlerhaften Zustand zu versetzen ► 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 ► 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) Frage: Was passiert, wenn ein emeritierter Professor keine Vorlesungen mehr anbietet? 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 25 Beispiel: Bibliotheken, Frameworks und Anwendungen Leider sind nicht alle Vererbungshierarchien konform, insbesondere nicht in Analysemodellen ■ ■ ■ 26 Softwaretechnologie Konformitätsproblem in Analysemodellen ► Professor Emeritus 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 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 Beginner visitNullCourse() giveLecture() Softwaretechnologie 27 Softwaretechnologie 28 Beispiel: Konforme Vererbung von Bibliotheks- und Frameworkklassen ► ► Zusammenfassung: UML-Klassenmodelle in Analyse und Entwurf 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 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 29 The End ► Diese Folien sind eine überarbeitete Version der Vorlesungsfolien zur Vorlesung Softwaretechnologie von © Prof. H. Hussmann, 2002. used by permission. Softwaretechnologie 31 Softwaretechnologie Entwurfs-Modell 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 30