Analyse und Modellierung von Informationssystemen Diagramm

Werbung
Übersicht: Erzeugungsmuster
Strukturmuster
Vorlesung 05
Analyse und Modellierung von
Informationssystemen
Dr. Klaus Höppner
Hochschule Darmstadt – Sommersemester 2013
1 / 20
Übersicht: Erzeugungsmuster
Strukturmuster
Übersicht: Erzeugungsmuster
Strukturmuster
2 / 20
Übersicht: Erzeugungsmuster
Strukturmuster
Diagramm: Abstrakte Fabrik
Handout S. 1
3 / 20
Übersicht: Erzeugungsmuster
Strukturmuster
Vorlesung 05
Wesentliche Eigenschaften
Die abstrakte Fabrik definiert ein oder mehrere
Produkt-Interfaces, die bestimmte Operationen deklarieren.
Weiterhin wird ein Fabrik-Interface definiert, das über
Fabrikmethoden die Funktionalität zum Erzeugen von
Objekten definiert, die die Produkt-Interfaces implementieren.
Im Diagramm sind dies die Produkt-Interfaces A und B, wobei
ersteres von konkreten Klassen A1 und A2 und letzteres von
B1 und B2 implementiert werden.
Das Erzeugen der konkreten Objekte wird dabei vor der
Anwendungslogik (weitestgehend) verborgen, indem der
Konstruktoraufruf der konkreten Klassen von den in Fabrik1
bzw. Fabrik2 implementierten Fabrikmethoden erledigt wird.
Da die Anwendungslogik nur die Interfaces verwendet, kann
eine konkrete Fabrik einfach gegen eine andere ausgetauscht
werden.
4 / 20
Übersicht: Erzeugungsmuster
Strukturmuster
Diagramm: Erbauer
5 / 20
Übersicht: Erzeugungsmuster
Strukturmuster
Wesentliche Eigenschaften
Der Erbauer (Builder) ist ein Entwurfmuster, in dem ein
Direktor die Aufgabe übernimmt, über einen Erbauer Schritt
für Schritt ein Endprodukt aufzubauen.
Hierbei verwendet der Direktor ein Erbauer-Interface, das
konkrete Produkt wird über den konkreten Erbauer zusammen
gebaut.
Häufig werden innerhalb des Erbauers weitere
Entwurfsmuster verwendet, z. B. ist der Erbauer oft ein
Kompositum.
Handout S. 2
6 / 20
Übersicht: Erzeugungsmuster
Strukturmuster
Vorlesung 05
Diagramm: Singleton
7 / 20
Übersicht: Erzeugungsmuster
Strukturmuster
Wesentliche Eigenschaften
Das Singleton soll sicher stellen, dass nur eine Instanz einer
Klasse existiert, wobei besondere Vorsichtsmaßnahmen bei
Nebenläufigkeit erforderlich sind (s. 3. Vorlesung).
Das Singleton ist ein umstrittenes Entwurfsmuster und wird
häufig sogar als anti pattern bezeichnet, dessen Verwendung
vermieden werden sollte.
8 / 20
Übersicht: Erzeugungsmuster
Strukturmuster
Gründe für Anti-Pattern
• Das Singleton verstößt gegen das Single Responsibility
Principle: Ein Singleton erledigt neben der eigentlichen
Funktionalität noch das Kümmern darum, dass es nur ein
Exemplar gibt.
• Ein Singleton ist ein potenzielles Speicherloch: Wer
kümmert sich darum, dass die bereitgestellte Instanz
wieder zerstört und belegte Ressourcen freigegeben
werden?
• Ein Singleton verführt zu prozeduralem Programmierstil,
d. h. das Singleton stellt letztendlich das Gegenstück zu
globalen Variablen zur Verfügung.
Handout S. 3
9 / 20
Übersicht: Erzeugungsmuster
Strukturmuster
Vorlesung 05
Gründe für Anti-Pattern (Forts.)
• Vererbung ist bei Singletons schwierig bis unmöglich.
• Ein Singleton verschleiert Abhängigkeiten zu anderen
Objekten. Anstatt bei Operationen Referenzen auf dafür
notwendige Objekte zu übergeben (damit expliziter
Ausdruck der Abhängigkeit in der API), werden die
(unsichtbar) innerhalb der Implementation über das
Singleton geholt.
10 / 20
Übersicht: Erzeugungsmuster
Strukturmuster
Diagramm: Prototyp
11 / 20
Übersicht: Erzeugungsmuster
Strukturmuster
Wesentliche Eigenschaften
Das Prototype-Muster (prototype) dient wie die Abstrakte
Fabrik dem Erzeugen von Instanzen von verschiedenen
konkreten Produkten, die ein gemeinsames Produkt-Interface
implementieren.
Im Gegensatz zur Abstrakten Fabrik wird jedoch nicht für jede
konkrete Produktklasse eine Fabrikklasse implementiert, die
die entsprechende Erzeugungsmethode bereitstellt, sondern
hier unterstützt jedes Produkt die Operation, von sich selbst
eine Kopie zu erstellen.
Typischerweise benötigt man eine Vorlage für das Produkt
(den Prototypen), die zum Erstellen von Produkten als Kopie
dient.
Analogie: Erzeugen eines Dokumentes in einem
Office-Programm von einer Vorlage.
Handout S. 4
12 / 20
Übersicht: Erzeugungsmuster
Strukturmuster
Vorlesung 05
Beispiel
13 / 20
Übersicht: Erzeugungsmuster
Strukturmuster
Code: Interface Animal und dessen Implementation
Animal.java:
public interface Animal {
public String getDescription();
public int getLegs();
public Animal cloneAnimal();
}
AnimalImpl.java:
class AnimalImpl implements Animal, Cloneable {
private String description;
private int legs;
public void setDescription(String description) {
this.description = description;
}
public void setLegs(int legs) {
this.legs = legs;
}
14 / 20
Übersicht: Erzeugungsmuster
Strukturmuster
Code (Forts.)
AnimalImpl.java (Forts.):
@Override
public String getDescription() {
return description;
}
@Override
public int getLegs() {
return legs;
}
@Override
public Object cloneAnimal() {
try {
return (Animal) super.clone();
} catch (CloneNotSupportedException e) {
return null;
}
}
}
Handout S. 5
15 / 20
Übersicht: Erzeugungsmuster
Strukturmuster
Vorlesung 05
Einführung: Strukturmuster
Zu den von der Gang of Four präsentierten Mustern gehören
mehrere Strukturmuster, die über die Definition von
Relationen zwischen Klassen übergeordnete Strukturen
definieren:
• Adapter
• Bridge (Brücke)
• Composite (Kompositum)
• Decorator (Dekorierer)
• Facade (Fassade)
• Flyweight (Fliegengewicht)
• Proxy (Stellvertreter)
16 / 20
Übersicht: Erzeugungsmuster
Strukturmuster
Beispiel
Im Folgenden wird eine Anwendung entwickelt, die Text mit
Auszeichnungen wie Fett und Kursiv versehen kann, die dann
als HTML exportiert werden können.
Hierbei kommen folgende Elementtypen vor:
• Normaler Text ohne Auszeichnung.
• Text, der fett oder kursiv formatiert wird.
• Kombinationen aus verschieden formatierten
Textstücken.
• Wiederum fett oder kursive formatierte Kombinationen
aus formatierten Textstücken.
• Usw. usw.
Insgesamt hat der formatierte Text eine Baumartige Struktur.
17 / 20
Übersicht: Erzeugungsmuster
Strukturmuster
Beispiel
Dies ist mein Hund
ergibt: Dies ist <it>mein <b>Hund</b></it>
Handout S. 6
18 / 20
Übersicht: Erzeugungsmuster
Strukturmuster
Vorlesung 05
Klassendiagramm
19 / 20
Übersicht: Erzeugungsmuster
Strukturmuster
Verwendete Strukturmuster
In dem Beispiel werden zwei Strukturmuster verwendet:
• Das Kompositum (composite) beschreibt die baumartige
Struktur mit Verästelungen (die Kindelemente haben
können) und Blättern (die keine Kinder haben können).
Das Typische am Kompositum ist, dass es sich beliebig
häufig selbst enthalten kann.
• Der Dekorierer (decorator) beschreibt hier die Klasse
StyleDecorator, die das Interface Component
implementiert, indem sie auf einer anderen Komponente
aufsetzt, derer HTML-Code durch <b>...</b> bzw.
<it>...</it> dekoriert wird.
Die Methode getHTML() wird nicht eigenständig
implementiert, sondern leitet den Aufruf an die intern
benutzte Komponente weiter.
20 / 20
Handout S. 7
Herunterladen