OOSE 8 Entwurfsmuster (Hörsaalübung)

Werbung
OOSE 8
Entwurfsmuster
(Hörsaalübung)
SS 2015
Birgit 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
SS 2015
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
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: Singleton
getInstance(): Singleton
Expliziter Konstruktor wird
(für andere Klassen)
unbenutzbar gemacht!
class Singleton {
private static Singleton theInstance;
private Singleton () {}
public static Singleton getInstance() {
if (theInstance == null)
theInstance = new Singleton();
return theInstance;
}
}
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
• Composite has an recursive n‐aggregation to the superclass
Client
*
Component
childObjects
commonOperation()
add(Component)
remove(Component)
getType(int)
SS 2015
}
Leaf
Composite
commonOperation()
commonOperation()
add(Component)
remove(Component)
getType(int)
Pseudo implementations
Softwaretechnologie / OOSE 8
for all g in childObjects
g.commonOperation()
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 • FactoryMethod is a variant of TemplateMethod
Creator
Product
ConcreteProduct
FactoryMethod()
anOperation()
ConcreteCreator
FactoryMethod()
SS 2015
...
Product = FactoryMethod()
...
Softwaretechnologie / OOSE 8
return new ConcreteProduct
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
TemplateMethod Pattern
•
•
•
•
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
SS 2015
AbstractClass
TemplateMethod()
primitiveOperation1()
primitiveOperation2()
ConcreteClass
primitiveOperation1()
primitiveOperation2()
Softwaretechnologie / OOSE 8
...
primitiveOperation1();
...
primitiveOperation2();
...
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)
hookObject
TemplateClass
HookClass (Strategy)
templateMethod()
hookMethod()
hookObject.hookMethod()
SS 2015
ConcreteHookValueA
ConcreteHookValueB
hookMethod()
hookMethod()
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 :
Context
request()
setState (s: State)
ruft
state.handle
auf
SS 2015
State
state
{abstract}
handle(){abstract}
State1
State2
handle()
handle()
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.
{abstract
next()}
• Lösung:
hasNext()
Aggregat
e
elements(): Iterator
SS 2015
Iterator
<<create>
>
Elemen
t
Softwaretechnologie / OOSE 8
ConcreteIterator
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 Observer
Subject
register(Observer)
unregister(Observer)
notify()
observers
*
Observer
update ()
for all b in observers {
b.update ()
}
ConcreteObserver
Subject
ConcreteSubject
update ()
ObserverState
getState()
setState()
SubjectState
return SubjectState
SS 2015
Softwaretechnologie / OOSE 8
ObserverState =
Subject.getState()
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
Client
Adapted class does
not inherit from goal
Goal
operation()
Decorator-like
inheritance
adapted
Object
Adapter
operation()
AdaptedClass
specificOperation()
adaptedObject.specificOperation()
SS 2015
Object adapters use delegation
Softwaretechnologie / OOSE 8
Class Adapter
Client
GoalClass
AdaptedClass
operation()
specificOperation()
Can also be
interface
(Implementation)
Adapter
operation()
specificOperation()
Instead of delegation, class adapters use multiple interitance
SS 2015
Softwaretechnologie / OOSE 8
Beispiel 9
mit 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)
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
U14
Würfel
Observer
SS 2015
Softwaretechnologie / OOSE 8
Praktomat
ja
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
Hinweis: Lösungen zu Part Management und Vocabulary Trainer sind in [1] , S. 336 enthalten
SS 2015
Softwaretechnologie / OOSE 8
Hilfe am Rechner gesucht?
Lernraum jeweils montags 6. DS, E065
&
Auditorium
SS 2015
Softwaretechnologie / OOSE 8
Zugehörige Unterlagen
Herunterladen