Upload
others
View
9
Download
0
Embed Size (px)
Citation preview
StructuralStructural PatternsPatternsB. Sc. Andreas Meißner
Seminar Software-EntwurfFachgebiet Software Engineering, Institut für Angewandte Systeme,
Universität Hannover
11/16/2004
2B. Sc. Andreas Meißner: Strukturmuster
GliederungGliederung
1. Wiederholung Entwurfsmuster
2. Strukturmuster- Allgemein- einzelne Strukturmuster
- Beispiel (Motivation)- allgemeiner Aufbau- evtl. Diskussion / Abgrenzung
3. Fazit
3B. Sc. Andreas Meißner: Strukturmuster
EntwurfsmusterEntwurfsmuster
„Entwurfsmuster sind Beschreibungen zusam-menarbeitender Objekte und Klassen, die maß-geschneidert sind, um ein allgemeines Entwurfs-problem in einem bestimmten Kontext zu lösen.“
• Schablonen für guten Entwurf• benennen, abstrahieren und identifizieren relevante Aspekte
einer allgemeinen Entwurfsstruktur
• Ziel: bessere Flexibilität, Wiederverwendbarkeit, Modularität und Verständnis eines Entwurfs
4B. Sc. Andreas Meißner: Strukturmuster
EntwurfsmusterEntwurfsmuster
Aufgabe Entwurfsmuster
Creational Patterns(Erzeugungsmuster)
Abstract Factory (Abstrakte Fabrik), Builder (Erbauer),Factory Method (Fabrikmethode), Prototype (Prototyp),Singleton
Structural Patterns(Strukturmuster)
Adapter, Bridge (Brücke), Composite (Kompositum), Decorator (Dekorierer), Facade (Fassade), Flyweight (Fliegengewicht), Proxy
Behavioral Patterns(Verhaltensmuster)
Observer (Beobachter), Command (Befehl), Chain of Responsibility (Zuständigkeitskette), Interpreter,Iterator, Mediator (Vermittler), Memento, State (Vermittler), Strategy (Strategie),Template Method (Schablonenmethode), Visitor (Besucher),
5B. Sc. Andreas Meißner: Strukturmuster
StrukturmusterStrukturmuster
„Strukturmuster befassen sich mit der Zusammen-setzung bzw. Komposition von Klassen und Objekten, um größere Strukturen zu bilden.“
• bei klassenbasierten Strukturmustern wird Vererbung benutzt, um Schnittstellen oder Implementierungen zusammenzuführen
• bei objektbasierte Strukturmuster werden Objekte zusammengeführt, um neue Funktionalität zu gewinnen
6B. Sc. Andreas Meißner: Strukturmuster
Willis Willis BurgerShopBurgerShop
Willi
7B. Sc. Andreas Meißner: Strukturmuster
Problem No. 1Problem No. 1
• Implementation von Willi
8B. Sc. Andreas Meißner: Strukturmuster
Problem No. 1 Problem No. 1 -- LLöösungsung
• Variante 1: Vererbung • Variante 2: Delegation
9B. Sc. Andreas Meißner: Strukturmuster
Adapter Adapter ((WrapperWrapper))
• passt Schnittstelle einer Klasse an eine andere (erwartete) an• lässt Klassen zusammenarbeiten, die wegen inkompatibler Schnittstellen
dazu nicht in der Lage wären
• Klassenadapter
• lediglich ein Objekt• Methoden können überschrieben werden• Schnittstelle des Adapters evtl. größer als
benötigt• nicht immer möglich
• Objektadapter
• zusätzliches (delegierendes) Objekt• Adapter kann an mehrere Adaptees
anbinden
10B. Sc. Andreas Meißner: Strukturmuster
Wiederholung Wiederholung –– SingletonSingleton
• Willi ist „einzigartig“ !!!
public class Willi implements Angestellter {
private static Willi singleton = null;
public static Willi createWilli() {if (singleton == null)
return new Willi();return singleton;
}
private Willi() {…
}
public void buletteBraten {…}public void kaffeeKochen {…}public void sauberMachen {…}
}
11B. Sc. Andreas Meißner: Strukturmuster
Problem No. 2Problem No. 2
• Implementation der BurgerShop-Geräte
12B. Sc. Andreas Meißner: Strukturmuster
Problem No. 2 Problem No. 2 -- LLöösungsung
13B. Sc. Andreas Meißner: Strukturmuster
FacadeFacade (Fassade)(Fassade)
• vereinfacht die Verwendung von (Sub-)Systemen• bietet einheitliche Schnittstelle zu einer Menge von Schnittstellen eines
(Sub-)Systems
• Konsequenzen:– Subsystem kann unabhängig von den Klienten angepasst werden– Funktionalität der Subsystemkomponenten kann nicht endgültig verborgen
werden
14B. Sc. Andreas Meißner: Strukturmuster
Adapter vs. Adapter vs. FacadeFacade
• Unterschied zwischen Adapter und Fassade ist subtil
Frage Adapter FacadeGibt es bereits existierende Klassen mit unpassender Schnittstelle?
Wird ein Objekt erzeugt, welches die gewünschte Schnittstelle aufweist?
Muss dieses Objekt polymorph verwendet werden können?
Gibt es Vorgabe für eine Schnittstelle, die erfüllt werden müssen?
Ist eine vereinfachte Schnittstelle notwendig?
JaJa
Ja Ja
Möglich Nein
Ja Nein
Nein Ja
15B. Sc. Andreas Meißner: Strukturmuster
Problem No. 3Problem No. 3
• Implementation der Burger
+
+
+
16B. Sc. Andreas Meißner: Strukturmuster
Problem No. 3 Problem No. 3 -- LLöösungsung
• jede Garnierung als Dekoration betrachten
17B. Sc. Andreas Meißner: Strukturmuster
Problem No. 3 Problem No. 3 -- LLöösungsung
Burger burger = new TomatenDekorierer(new SalatDekorierer(
new KaeseDekorierer(new Hamburger())));
18B. Sc. Andreas Meißner: Strukturmuster
DecoratorDecorator (Dekorierer)(Dekorierer)
• erweitert Objekte dynamisch um Zuständigkeiten• flexible Alternative zur Unterklassenbildung
• Konsequenzen– mehrfaches Hinzufügen der Funktionalität möglich– Objektidentität des Dekorierers und dessen Komponente ist unterschiedlich– viele kleine Dekorierobjekte möglich Entwurf evtl. schwerer zu verstehen
19B. Sc. Andreas Meißner: Strukturmuster
Wiederholung Wiederholung –– BuilderBuilder (Erbauer)(Erbauer)
Burger burger = new TomatenDekorierer(new SalatDekorierer(
new KaeseDekorierer(new Hamburger())));
BurgerBuilder bb = new BurgerBuilder();bb.startBurger();bb.addKaese();bb.addSalat();bb.addTomate();Burger burger = bb.getResult();
public class BurgerBuilder {
private Burger burger = null;
public void startBurger() {burger = new Hamburger();
}
public void addKaese() {burger = new KaeseDekorierer(burger);
}
public void addSalat() {burger = new SalatDekorierer(burger);
}
public void addTomate() {…}
public Burger getResult() {return burger;
}}
20B. Sc. Andreas Meißner: Strukturmuster
Problem No. 4Problem No. 4
• Implementation von Menus
21B. Sc. Andreas Meißner: Strukturmuster
Problem No. 4 Problem No. 4 -- LLöösungsung
22B. Sc. Andreas Meißner: Strukturmuster
CompositeComposite (Kompositum)(Kompositum)
• repräsentiert Teil-Ganzes-Hierarchien• primitive Objekte und Kompositionen von diesen können
einheitlich betrachtet werden
• Konsequenzen– unbegrenzte Tiefe/Komplexität möglich– Komponenten eines Kompositums sind schwierig einschränkbar– Implementationsfragen (Schnittstellen, Elternobjekte referenzieren)
23B. Sc. Andreas Meißner: Strukturmuster
DekoratorDekorator vs. vs. CompositeComposite
• Dekorierer kann als degeneriertes Kompositum angesehen werden
• aber– Dekorierer fügt zusätzliche Funktionalität hinzu– Kompositum ist für Objektaggregation vorgesehen
24B. Sc. Andreas Meißner: Strukturmuster
Problem No. 5Problem No. 5
• Implementation der Anzeigetafel
25B. Sc. Andreas Meißner: Strukturmuster
Problem No. 5 Problem No. 5 -- LLöösungsung
• jedes Zeichen als eigenes Objekt• Problem: hohe Speicherkosten
• jedes Zeichen einmal vorhanden gemeinsame Nutzung • Trennung des intrinsischen und extrinsischen Zustandes
notwendig
26B. Sc. Andreas Meißner: Strukturmuster
Problem No. 5 Problem No. 5 -- LLöösungsung
27B. Sc. Andreas Meißner: Strukturmuster
FlyweightFlyweight (Fliegengewicht)(Fliegengewicht)
• gemeinsame Nutzung großer Mengen leichtgewichtiger Objekte
• Anwendbarkeit– große Mengen von Objekten– viele Gruppen von Objekten können gemeinsam genutzt werden– Großteil des Objektzustandes ist extrinsisch
• Konsequenzen– gemeinsame Nutzung gemeinsame Objektidentität
28B. Sc. Andreas Meißner: Strukturmuster
Bridge Bridge (Br(Brüücke)cke)
• entkoppelt eine Abstraktion von ihrer Implementierung, so dass beide unabhängig verändert werden können
• Konsequenzen– Implementierung kann zur Laufzeit ausgewählt und gewechselt
werden– eine Implementierung kann von mehreren Objekten genutzt werden– übersichtlichere Klassenhierarchien
29B. Sc. Andreas Meißner: Strukturmuster
ProxyProxy
• stellt ein vorgelagertes Stellvertreterobjekt dar• kontrolliert bzw. steuert den Zugriff auf das eigentliche
Objekt
• Anwendbarkeit– Remote-Proxy: Stellvertreter für Objekte in einem anderen Adressraum– Virtuelle Proxy: erzeugt teure Objekte erst auf Verlangen– Schutzproxy: kontrolliert den Zugriff auf das Objekt
30B. Sc. Andreas Meißner: Strukturmuster
FazitFazit
• Entwurfsmuster sind nicht kompliziert• stellen einfache Lösungsstrategien für Entwurfsprobleme
• Strukturmuster zeigen interessante Möglichkeiten für die Komposition von Objekten auf
• aber– Muster sind keine Silberkugel– Muster können den Entwurf auch unnötig aufblähen
nur benötigte Flexibilität mit Mustern begegnen
31B. Sc. Andreas Meißner: Strukturmuster
Vielen Dank für Eure Aufmerksamkeit!
32B. Sc. Andreas Meißner: Strukturmuster
LiteraturLiteratur
• Eilebrecht, K., Starke, G. (2004). „Patterns kompakt: Entwurfsmuster für effektive Software-Entwicklung“ (Spektrum 2004).
• Gamma, E., Helm, R., Johnson, R., Vlissides, J. (1996). „Entwurfsmuster: Elemente wiederverwendbarer objekt-orientierter Software“ (Addison-Wesley 1996).
• Goldfedder, B. (2002). „Entwurfsmuster einsetzen: Einstieg in die Anwendungsentwicklung mit Design Patterns“ (Addison-Wesley 2002).
• Shalloway, A., Trott, J. R. (2003). „Entwurfsmuster verstehen“ (mitP-Verlag 2003).
• Vlissides, J. (1999). „Entwurfsmuster anwenden: Die Fortsetzung des Klassikers der Gang of Four“ (Addison-Wesley 1999).