Vorlesung Softwaretechnik - Muster in der Softwareentwicklung PDF

Document Details

GenuineObsidian7376

Uploaded by GenuineObsidian7376

RWTH Aachen

null

Prof. Bernhard Rumpe

Tags

software engineering software development design patterns computer science

Summary

Diese Unterlagen behandeln Muster in der Softwareentwicklung. Sie beinhalten eine Einführung in die Themenstellung, Beispiele und eine praktische Anwendungsdemonstration von Design-Mustern. Die Folienshow präsentiert verschiedene Beispiele, die die Anwendung der Softwareentwicklungsprinzipien veranschaulichen.

Full Transcript

Vorlesung Softwaretechnik 5. Muster in der Softwareentwicklung Prof. Bernhard Rumpe Software Engineering RWTH Aachen http://www.se-rwth.de/ Warum, was, wie und wozu? Muster in der Analyse Warum? Was? Wie? Wozu? Bessere...

Vorlesung Softwaretechnik 5. Muster in der Softwareentwicklung Prof. Bernhard Rumpe Software Engineering RWTH Aachen http://www.se-rwth.de/ Warum, was, wie und wozu? Muster in der Analyse Warum? Was? Wie? Wozu? Bessere Was ist ein Struktur in die Softwarestrukturen Muster? Problem & Lösung Software erstellen bekommen Muster in der Analyse Effizienz, Abstraktes Prinzip Bessere Basis Wiederverwendung Betrachten 7 & Beispiel fürs Design Muster genauer 2 Software Engineering | RWTH Aachen Softwaretechnik Implemen- Test, Analyse Entwurf Wartung 5. Muster tierung Integration 5.1. Muster-Begriff Grobentwurf Feinentwurf Prof. Bernhard Rumpe Literatur: Software Engineering Gamma/Helm/Johnson/Vlissides: Design Patterns, RWTH Aachen Addison-Wesley 1994 (= „Gang of Four“, „GoF“) Buschmann/Meunier/Rohnert/Sommerlad/Stal: A System of Patterns, Wiley 1996 http://www.se-rwth.de/ Muster für besseren Entwurf / Analyse / Architektur Ein Muster ist eine schematische Lösung für eine Gruppe verwandter Probleme. Muster beschreiben Erfahrungswissen. Darstellung eines Musters (nach GoF) − Name, evtl. Synonyme − Problem ▪ Motivation, Anwendungsbereich − Lösung(en) ▪ Struktur (Klassendiagramm) ▪ Bestandteile (schematische Klassen- und Objektnamen) ▪ Beschreibung, evtl. Abläufe, z.B. Sequenzdiagramm − Diskussion ▪ Vor- und Nachteile, Abhängigkeiten, Einschränkungen − Beispielanwendungen − Verwandte Muster (Ähnlichkeiten) 4 Software Engineering | RWTH Aachen Beispiel: Text zu „Adapter“ (1) Ausschnitt aus „Design Patterns“ (Gamma et.al.): ADAPTER Also known as: Wrapper Motivation: Sometimes a toolkit class that's designed for reuse isn't reusable only because its interface doesn't match the domain-specific interface an application requires. Consider for example a drawing editor that lets users draw and arrange graphical elements (lines, polygons, text etc) into pictures and diagrams.... (eine Seite Text & Beispiel) Applicability: Use the Adapter pattern when − you want to use an existing class, and its interface does not match the one you need. − you want to create a reusable class that cooperates with unrelated or unforeseen classes... 5 Software Engineering | RWTH Aachen Beispiel: Text zu „Adapter“ (2) Ausschnitt aus „Design Patterns“: ADAPTER (Fortsetzung) Structure: (Zwei Klassendiagramme + weitere Information) Consequences: (1 Seite Text) Implementation: (2 Seiten Text mit Klassendiagrammen) Sample Code: (3 Seiten Text mit C++-Beispielen) Known Uses: (1 Seite Text; Beispiele) Related Patterns: (1/4 Seite Text; konkrete Patterns & Unterschiede) 6 Software Engineering | RWTH Aachen Strukturmuster Adapter | Variante 1: Objektadapter Name: Adapter (auch: Wrapper) Problem: − Anpassung der Schnittstelle eines vorgegebenen Objekts (adaptee) auf eine gewünschte Schnittstelle (target) Lösung: Target Adaptee CD {abstract} specificRequest() request() adaptee Adapter ruft auf: adaptee.specificRequest request() 7 Software Engineering | RWTH Aachen Objektadapter-Beispiel (1) CD Schönheitsfehler? «interface» BestellungIF discuss + Bestellung() + neuePosition(b: Bestellposition) + loeschePosition(pos: int) + sonderpreis(pos: int, preis: int) + auftragssumme(): int + print() Bestellung * Bestellposition – kunde: String – anzahl: int … 8 Software Engineering | RWTH Aachen Objektadapter Beispiel «interface» BestellungIF CD + neuePosition(b: Bestellposition) Bestellung ist Adapter für ArrayList: + loeschePosition(pos: int) bietet passende Funktionen unter Aufruf des Adaptee … 1 * Bestellung java.util.ArrayList Bestellposition liste – kunde: String – anzahl: int add(o: Object) … remove(pos: int) iterator(): Iterator … public void neuePosition (Bestellposition b) { liste.add(b); } public void loeschePosition (int pos) { liste.remove(pos); } 9 Software Engineering | RWTH Aachen Objektadapter-Beispiel in UML (3) CD Target «interface» BestellungIF + neuePosition(b: Bestellposition) Adapter + loeschePosition(pos: int) … Adapter Adaptee 1 * Bestellung java.util.ArrayList Bestellposition liste – kunde: String – anzahl: int add(o: Object) … remove(pos: int) iterator(): Iterator … 10 Software Engineering | RWTH Aachen Anwendung eines Musters Kein mechanisches „Pattern Matching“! − eher Übertragung der Idee des Musters Grundstruktur des Musters sollte sich wiederfinden lassen − ggf. vorliegenden Entwurf etwas anpassen bzw. anders darstellen Auch Verhaltensschema muss im Code ähnlich zur CD Musteridee auftreten: − Muster: Adapter.request() ruft Adaptee.specificRequest() auf (und tut nicht wesentlich mehr) − Konkreter Fall: Bestellung.neuePosition() ruft ArrayList.add() auf Bestellung.loeschePosition() ruft ArrayList.remove() auf... Intension/Zweck des Musters ist zu beachten 11 Software Engineering | RWTH Aachen Strukturmuster Adapter | Variante 2: Klassenadapter Name: Adapter (auch: Wrapper) Problem: − Anpassung der Schnittstelle eines vorgegebenen Objekts (adaptee) auf eine gewünschte Schnittstelle (target) − Viele Operationen sind identisch in Adaptee und Target haben aber unterschiedliche Namen oder Argumentreihenfolgen Lösung: CD Target Adaptee {abstract} specificRequest() request() Beachte: In vielen Mustern sind Adapter ruft auf: abstrakte Klasse und Interface synonym. specificRequest request() in Java muss Target ein Interface sein (wg. Mehrfachvererbung). 12 Software Engineering | RWTH Aachen Strukturmuster Adapter | Vergleich beider Varianten Variante 1: Variante 2: CD Objektadapter Klassenadapter Target Adaptee Target Adaptee {abstract} {abstract} specificRequest() specificRequest() request() request() adaptee Adapter Adapter request() request() Was bedeutet der Unterschied? Auswirkungen? 13 Software Engineering | RWTH Aachen Arten von Mustern Muster... Modellierungs- Organisations- Vorgehens- Muster Muster Muster (Process Pattern) Universelle Muster für Muster spezifische Aktivitäten Analyse- Architektur- Entwurfs- Sprach- Test- muster muster muster Idiome muster (Design Pattern) Weitere Unterteilung: − Allgemein anwendbare Muster (z.B. Komposition) − Domänenspezifische Muster (z.B. Kontostruktur im Finanzbereich) 14 Software Engineering | RWTH Aachen Softwaretechnik Implemen- Test, Analyse Entwurf Wartung 5. Muster tierung Integration 5.2. Muster in der Objektorientierten Analyse Anforderungs- System- ermittlung modellierung Prof. Bernhard Rumpe Literatur: Software Engineering Balzert Band I, LE 13 RWTH Aachen Martin Fowler: Analysis Patterns 1997 Scott Ambler: Building Object-Oriented Applications That Work, SIGS Books 1998 (Kap. 4) http://www.se-rwth.de/ Analyse Muster Modellierung häufiger vorkommender Strukturen Beschreibung einer Gruppe von Klassen oder Objekten mit − Festen Verantwortlichkeiten − Definierten Beziehungen − Definierten Interaktionen Beschreiben die Lösung für eine typische Teilaufgabe bei der Erstellung des fachlichen Modells Beantworten die Frage: − Wie modelliere ich diese Klassenbeziehung? 16 Software Engineering | RWTH Aachen Einige Muster Universelle/ Allgemeine Muster Spezifische Analysemuster/ Anwendungsspezifische Muster Heide Balzert 99, Balzert 96 − Liste Fowler 97 − Exemplartyp − Party (Juristische Person) − Baugruppe − Account − Stückliste (Composite) − Transaction − Koordinator − Contract − Rollen − Portfolio − Wechselnde Rollen − Money − Historie − … − Gruppe − Gruppenhistorie Coad et al. 95 − Item-Item Description (Exemplartyp) 17 Software Engineering | RWTH Aachen Muster: Exemplar und Beschreibung Universelles Muster (nach Coad et al. 95) Name: Item-Item Description (Exemplartyp) Problem: Manche Attribute nehmen bei vielen Instanzen immer wieder die gleichen Kombinationen von Werten an (Attribut-Abhängigkeit). Lösung: Einführung einer neuen Klasse und einer Aggregation. ExemplarUndBeschreibung CD Attribute mit Abhängigkeiten Exemplar 0..* 1 Beschreibung unabh. Attribute separate Attribute vgl. dieses Muster mit Normalisierung von relationalen DB-Modellen 18 Software Engineering | RWTH Aachen Beispiel: Transformation mit Mustern Typische Anwendungsform für Muster („Refactoring“): animated − Finden verbesserungswürdiger Strukturen in Modellen − Ersetzen durch besser strukturierte Fassung Veranstaltung discuss seminartitel preis CD vorkenntnisse ort datum Veranstaltung Beschreibung 0..* 1 ort seminartitel datum preis vorkenntnisse 19 Software Engineering | RWTH Aachen Muster: Koordinator Universelles Muster (nach Heide Balzert 99, Balzert 96) Problem: Eine Assoziation besitzt Attribute, die zu keiner der beteiligten Klassen gehören. Lösung: Einführung einer eigenen Koordinator-Klasse 1 * * 1 CD Klasse A Klasse K Klasse B Assoziations- attribute 20 Software Engineering | RWTH Aachen Beispiel: Koordinator CD 0..* hat gebucht 0..* Veranstaltung Kunde ort datum Buchungsdatum ? Buchungsstatus ? discuss Ein wesentliches Merkmal dieses Musters ist die beidseitige Multiplizität „0..*“, die es verhindert Attribute der einen oder anderen Klasse zuzuordnen. Typisch für Koordinatorklassen ist, dass sie selbst nur wenige Attribute und Operationen besitzen, und mit mehreren Klassen in Verbindung stehen. 21 Software Engineering | RWTH Aachen Kombination von Musteranwendungen UML-Repräsentation CD eines Musters Exemplar Beschreibung Seminartyp und Beschreibung seminartitel preis vorkenntnisse Koordinator 1 Exemplar Koordinator 0..* hält für Kunde Buchung Veranstaltung 1 0..* datum 0..* 1 ort status datum 22 Software Engineering | RWTH Aachen Muster: Abstrakte Oberklasse Universelles Muster (nach Balzert 96) Problem: Klassen enthalten Gruppen identischer Attribute und Operationen. Lösung: Separieren der identischen Bestandteile in einer abstrakten Oberklasse. CD Klasse A Klasse B Attributgruppe 1 Attributgruppe 2 Klasse C {abstract} Attributgruppe 3 Attributgruppe 3 Attributgruppe 3 Operat.gruppe 1 Operat.gruppe 2 Operat.gruppe 3 Operat.gruppe 3 Operat.gruppe 3 Klasse A Klasse B Attributgruppe 1 Attributgruppe 2 Operat.gruppe 1 Operat.gruppe 2 23 Software Engineering | RWTH Aachen Muster: Wechselnde Rolle Universelles Muster (nach Heide Balzert 99) Problem: Ein Objekt einer Unterklasse A1 kann in eine Unterklasse A2 wechseln. Lösung: Einführung einer abstrakten Rollenklasse. Variante des Musters „Rolle“ mit dynamischem Auswechseln des Rollen-Objekts CD Klasse A Klasse A 1 Rolle {abstract} Klasse A1 Klasse A2 Rolle A1 Rolle A2 24 Software Engineering | RWTH Aachen Beispiel: Wechselnde Rolle Lösung: Einführung einer abstrakten Rollenklasse. CD Kunde Kunde 1 {abstract} KundenRolle Adressat Interessent Teilnehmer Adressat Interessent Teilnehmer 25 Software Engineering | RWTH Aachen Muster: Rollen Universelles Muster (angelehnt an Heide Balzert 99) Problem: Es gibt mehrere Einsatzstellen/-arten einer Klasse. Unterklassenbildung würde „überlappende“ Vererbung und damit Mehrfachzugehörigkeit von Objekten in Klassen erfordern. Lösung: Einführung einer „Rollen“-Klasse mit Multiplizität entsprechend der Einsatzarten. Rollen enthalten die notwendigen Attribute. CD Klasse A Klasse A 1..2 Rolle Klasse A1 Klasse A2 attr11 attr21 attr12 attr22 Rolle R1 Rolle R2 attr11 attr21 attr12 attr22 26 Software Engineering | RWTH Aachen Beispiel: Rollen Lösung: Einführung einer „Rollen“-Klasse mit Multiplizität entsprechend der Einsatzarten. Rollen enthalten die notwendigen Attribute. CD Dozent Dozent 1..3 DozentenRolle Referent Seminarleiter Teilnehmer Referent Seminarleiter Teilnehmer 27 Software Engineering | RWTH Aachen Muster: Gruppenhistorie Universelles Muster (angelehnt an Heide Balzert 99) Andere Namen: Historic Mapping (engl.), (Fowler 97) Problem: Ein Objekt kann im Laufe der Zeit zu verschiedenen Gruppen gehören und die historische Entwicklung muss festgehalten werden. Lösung: Eine Assoziation, die Zugehörigkeit, wird durch eine Zwischenklasse oder eine Assoziationsklasse ersetzt. Die Dauer wird durch Attribute passend realisiert. Mitglied CD 1 * Mitglied Zugehörigkeit 1 Datum start zugehörig * Datum ende Gruppe * 1 Gruppe 28 Software Engineering | RWTH Aachen Muster: Gruppenhistorie Lösung: Eine Assoziation, die Zugehörigkeit, wird durch eine Zwischenklasse oder eine Assoziationsklasse ersetzt. Die Dauer wird durch Attribute passend realisiert. CD OD Klaus:Mitglied Mitglied 1 * :Zugehörigkeit :Zugehörigkeit Zugehörigkeit start = 1.1.2004 start = 1.1.2011 Datum start ende = 31.12.2009 ende = 31.12.2021 Datum ende * 1 TestTeam:Gruppe Gruppe 29 Software Engineering | RWTH Aachen Muster: Komposition Universelles Muster (nach Gamma et al. 95) Andere Namen: Composite (engl.), Stückliste (Heide Balzert) Problem: Tiefe und evtl. veränderliche Hierarchie von Aggregationen Lösung: Abstrakte Oberklasse mit verschiedenen Blattklassen sowie Kompositum-Klassen als Unterklassen. * CD {abstract} Komponente 1 Blatt Kompositum Komposition ist ein sehr häufig angewandtes Muster: Bäume, Teile-Ganzes-Hierarchien etc. sind damit realisierbar. 30 Software Engineering | RWTH Aachen Beispiele: Komposition Lösung: Abstrakte Oberklasse mit verschiedenen Blattklassen sowie Kompositum-Klassen als Unterklassen. CD {abstract} * Grafikelement Allgemeines Muster 1 Linie Rechteck Text Grafik Konkrete Anwendung 31 Software Engineering | RWTH Aachen Komposition - Beispiel Aus der Analyse Aufgabe: Dokument-Struktur und -Formatierung Document CD Erstes Klassendiagramm (aus Analyse) Page muss im Design umgebaut werden, um Verwaltung zu erleichtern Column Frame Image LineOfText Character 32 Software Engineering | RWTH Aachen Anwendung des Composite-Musters Aus der Analyse Im Design CD DocumentElement Document * setFont() getWidth() Page CompositeDocumentElement getChild() Character Column Frame addChild() getWidth() getWidth() Image Image getWidth() Document Column LineOfText Page Frame Character LineOfText 33 Software Engineering | RWTH Aachen Anwendung des Composite-Musters Node CD – name * flexible Zugriffsschicht auf Dateisysteme – protection − Gemeinsame Operationen auf Dateien und getName() Verzeichnissen: getProtection() − Name, Größe, Zugriffsrechte,... getChildren() read() write() Teile-Strukturen für Geräte add() remove() Ahnentafeln (Bäume...) File Directory getChildren() getChildren() read() read() write() write() add() add() remove() remove() 34 Software Engineering | RWTH Aachen Juristische Person (Party) Spezifisches Analysemuster (nach Fowler 97) Problem: Organisationen und Personen spielen ähnliche Rollen gegenüber dem System Lösung: Abstrakte Oberklasse „JuristischePerson“. CD {abstract} JuristischePerson telefonnummer anschrift emailAdresse Person Organisation 35 Software Engineering | RWTH Aachen „JuristischePerson“ vs. „Abstrakte Oberklasse“ Das Muster „JuristischePerson“ ist ein CD Spezialfall des Musters „Abstrakte Oberklasse“. {abstract} JuristischePerson Gründe für separate Darstellung: telefonnummer − Anpassung an ein Fachgebiet anschrift − Fachterminologie (!) emailAdresse − Geringerer Abstraktionsgrad: mehr Details aus dem Fachgebiet Spezifische Analysemuster sind meist Person Organisation Anwendungen und Zusammensetzungen universeller Muster Wesentlich ist auch die Vokabular-Bildung 36 Software Engineering | RWTH Aachen Was haben wir gelernt? Muster in der Muster … OO Analyse Einsatzzweck … ist eine schematische Universelle Muster sind Informationen aus der Lösung für eine Klasse ein „Leitfaden“ zur Analyse strukturieren verwandter Probleme Modellierung und bieten und besser verwendbar Bausteine für andere machen …beschreibt Muster Erfahrungswissen Wenn Ihre Erfahrungen Spezifische Muster sind mehr werden: … gibt es für fachgebietsübergreifend Systematische unterschiedliche bzw. fachgebiets- Erkennung, Bereiche: Analyse, spezifisch Kommunikation und Entwurf, Architektur, Kataloge publiziert, z.B.: Anwendung von Mustern Test, … betriebswirtschaftliche Anwendungen (Fowler) Firmen- und projektspezifische Kataloge 37 Software Engineering | RWTH Aachen

Use Quizgecko on...
Browser
Browser