oose entwurfsmuster (hörsaalübung)st.inf.tu-dresden.de/files/teaching/ss15/st/oose8 slides.pdf ·...
TRANSCRIPT
OOSE 8Entwurfsmuster(Hörsaalübung)
SS 2015Birgit Demuth
SS 2015 Softwaretechnologie / OOSE 8
Entwurfsmuster in Softwaretechnologie 2015
Prüfungsrelevant• Composite• Iterator• Factory Method• Class Adapter• Object Adapter• Observer • Singleton• State• Strategy (Template Class)• Template Method
Weitere in Vorlesung• MVC• Decorator• Abstract Factory (Factory Class)• Bridge (Dimensional Class Hierarchies)• Varianten des Observers
– Callback (push und pull)– Pull Observer (Event Bridge)– Push Observer– Observer with ChangeManager (EventBus)
• Visitor• Facade• Proxy
SS 2015 Softwaretechnologie / OOSE 8
Beispiel 1
• Stellt sicher, dass nur genau eine Instanz von GlobalResource erzeugt wird. Um welches Muster handelt es sich?
SS 2015 Softwaretechnologie / OOSE 8
Strukturmuster Singleton• Name: Singleton (dt.: Einzelinstanz)• Problem:
– Sicherstellung, daß von einer Klasse genau ein Objekt besteht.• Lösung:
Singleton– theInstance: SingletongetInstance(): Singleton
class Singleton {
private static Singleton theInstance;
private Singleton () {}
public static Singleton getInstance() {if (theInstance == null)theInstance = new Singleton();
return theInstance;}
}
Expliziter Konstruktor wird(für andere Klassen)
unbenutzbar gemacht!
SS 2015 Softwaretechnologie / OOSE 8
Beispiel 2
• Es sollen alle Elemente (Einzelelemente und Elementgruppierungen) in einer verschachtelten Struktur gleich behandelt werden, so dass aus Sicht des Clients keine explizite Unterscheidung notwendig ist. Um welches Muster handelt es sich?
SS 2015 Softwaretechnologie / OOSE 8
Structure Composite
Component
commonOperation()add(Component)remove(Component)getType(int)
Composite
commonOperation()add(Component)remove(Component)getType(int)
Leaf
commonOperation()
ClientchildObjects
for all g in childObjectsg.commonOperation()
} Pseudo implementations
*
• Composite has an recursive n‐aggregation to the superclass
SS 2015 Softwaretechnologie / OOSE 8
Beispiel 3
• Es wird eine Schnittstelle für die Erzeugung von Objekten definiert. Die Entscheidung, welche konkrete Klasse zu instanziieren, zu konfigurieren und schließlich zurückzugeben ist, wird konkreten (Unter‐)Klassen überlassen, die diese Schnittstelle implementieren. Um welches Muster handelt es sich?
SS 2015 Softwaretechnologie / OOSE 8
Structure for FactoryMethod
Creator
FactoryMethod()anOperation()
ConcreteCreator
FactoryMethod()
Product
ConcreteProduct
return new ConcreteProduct
...Product = FactoryMethod()...
• FactoryMethod is a variant of TemplateMethod
SS 2015 Softwaretechnologie / OOSE 8
Beispiel 4
• Es wird die Struktur eines Algorithmus definiert, wobei einzelne, konkrete Schritte in Unterklassen verlagert werden. Das Muster erlaubt es, bestimmte Operationen eines Algorithmus zu überschreiben, ohne dessen Struktur zu ändern. Um welches Muster handelt es sich?
SS 2015 Softwaretechnologie / OOSE 8
• Define the skeleton of an algorithm (template method)– The template method is
concrete• Delegate parts to abstract hook
methods that are filled by subclasses
• Implements template and hook with the same class, but different methods
• Allows for varying behavior– Separate invariant from variant
parts of an algorithm
TemplateMethod Pattern
...primitiveOperation1();...primitiveOperation2();...
AbstractClass
TemplateMethod()primitiveOperation1()primitiveOperation2()
ConcreteClass
primitiveOperation1()primitiveOperation2()
SS 2015 Softwaretechnologie / OOSE 8
Beispiel 5
• Sie wollen einen Sortieralgorithmus unabhängig von nutzenden Clients austauschen. Um welches Muster handelt es sich?
SS 2015 Softwaretechnologie / OOSE 8
Strategy (also called Template Class)
HookClass (Strategy)
hookMethod()
ConcreteHookValueA
hookMethod()
ConcreteHookValueB
hookMethod()
TemplateClass
templateMethod()
hookObject
hookObject.hookMethod()
SS 2015 Softwaretechnologie / OOSE 8
Beispiel 6
• Es wird einem Objekt ermöglicht, sein Verhalten zu ändern, wenn sein interner Zustand ändert. Um welches Muster handelt es sich?
SS 2015 Softwaretechnologie / OOSE 8
Strukturmuster State • Name: State (auch: Zustandsobjekte, Objects for States)• Problem:
– Flexible und anpaßbare Möglichkeit, das Objektverhalten zu ändern, wenn sich ein interner Zustand ändert.
• Lösung :
State{abstract}
...
handle()
State1
handle()
{abstract}
State2
handle()
Context
request()setState (s: State)
state
ruft state.handle
auf
SS 2015 Softwaretechnologie / OOSE 8
Beispiel 7
• Sie müssen nacheinander alle Elemente einer aggregierten Struktur (z.B. Baum oder Liste) bearbeiten. Dazu müssen diese sequenziell geliefert werden, wobei unterschiedliche Traversierungsvarianten zum Einsatz kommen können. Die entsprechende Logik sollte außerhalb des Clients realisiert werden, um diesen von der Struktur zu entkoppeln. Um welches Muster handelt es sich?
SS 2015 Softwaretechnologie / OOSE 8
Verhaltensmuster Iterator• Name: Iterator (auch: Stream, Cursor, Enumeration)
• Problem:–Sequentielles Durchlaufen der Elemente eines zusammengesetzten Objekts.
• Lösung:
elements(): Iterator
Aggregate
Element
next()hasNext()
Iterator
ConcreteIterator
{abstract}
<<create>>
SS 2015 Softwaretechnologie / OOSE 8
Beispiel 8
• Sobald sich der Zustand eines bestimmten Objekts ändert, sollen andere Objekte ihren Zustand automatisch anpassen. Um welches Muster handelt es sich?
SS 2015 Softwaretechnologie / OOSE 8
Structure ObserverSubject
register(Observer)unregister(Observer)notify()
Observerobservers
ConcreteSubject
getState()setState()
update ()
ConcreteObserver
update ()
ObserverState
for all b in observers {b.update ()
}
SubjectObserverState =
Subject.getState()
return SubjectStateSubjectState
*
SS 2015 Softwaretechnologie / OOSE 8
Beispiel 9
• Spezielle Listen sollen unter Wiederverwendung eines Collection‐Frameworks (hier java.util.*) implementiert werden. Um welche Muster handelt es sich?
SS 2015 Softwaretechnologie / OOSE 8
Object Adapter
Goal
operation()
Client
AdaptedClass
specificOperation()
Adapter
operation()
adaptedObject.specificOperation()
Object adapters use delegation
adaptedObject
Decorator-likeinheritance
Adapted class doesnot inherit from goal
SS 2015 Softwaretechnologie / OOSE 8
Class Adapter
GoalClass
operation()
Client AdaptedClass
specificOperation()
Adapter
operation()
(Implementation)
specificOperation()
Instead of delegation, class adapters use multiple interitance
Can also be interface
SS 2015 Softwaretechnologie / OOSE 8
Beispiel 9mit eingezeichneten Mustern
SS 2015 Softwaretechnologie / OOSE 8
Lösung
Beispiel Entwurfsmuster
1 Singleton
2 Composite
3 Factory Method
4 Template Method
5 Strategy (Template Class)
6 State
7 Iterator
8 Observer
9 Object Adapter und Class Adapter
SS 2015 Softwaretechnologie / OOSE 8
Aufgabenübersicht SS 2015Übung/Hausaufgabe
Aufgabe Design Pattern(s) Praktomat
U07 Bauteil Composite
U07 MyCollection Iterator
HA07 Stücklistenverwaltung Composite
HA07 MyMatrix Objektadapter, Iterator ja
HA07 RenovationProject Composite, Template Method ja
U08 AudioClipManager Singleton
U08 Queue Factory Method, Objektadapter, Klassenadapter(, Strategy)
ja
HA08 CoolIdeas State, Observer ja
U12 EPost Template Method
U13 Garagentor (Garage Door) State ja
U14 Würfel Observer
SS 2015 Softwaretechnologie / OOSE 8
Weitere Praktomatsaufgaben
Aufgabe Design Pattern(s)
Predicate Iterator Factory Method, Iterator, Strategy(, Object Adapter)
Vehicle Queue Factory Method, Singleton, Observer
Part Management Factory Method, Observer
Vocabulary Trainer State, Strategy
Desktop Search Engine Iterator, Strategy
Pricing Factory Method, Composite, Strategy
Project Management Objektadapter, Composite , Strategy, Templete Method
COOLIdeas State, Observer
SS 2015 Softwaretechnologie / OOSE 8
Hinweis: Lösungen zu Part Management und Vocabulary Trainer sind in [1] , S. 336 enthalten
Hilfe am Rechner gesucht?
Lernraum jeweils montags 6. DS, E065&
Auditorium
SS 2015 Softwaretechnologie / OOSE 8