O'Reilly logo

Groovy: Grundlagen und fortgeschrittene Techniken by Joachim Baumann

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

361
9 Die Groovy-Bibliotheken
In diesem Kapitel werden wir uns einen Überblick über häufig
gebrauchte Bibliotheks-Funktionalitäten und Groovy-Module ver-
schaffen.
Sie sollten die Kapitel 4, 6 und 7 überflogen haben, um ohne Pro-
bleme folgen zu können.
9.1 Einführung
Die Groovy-Bibliotheken sind reichhaltig und liefern Funktionalität
für die verschiedensten Problembereiche. Wir werden uns in diesem
Kapitel mit den wichtigsten vertraut machen.
Wir werden uns mit den verschiedenen Erbauer-Implementierun-
gen (
Builder-Klassen) in Groovy beschäftigen, uns die Unterstützung
für XML, für Ant und für Datenbanken ansehen, die Operationen, die
Groovy für Zeit- und Datumsberechnungen anbietet, und die Mög-
lichkeiten, die Groovy für den Test von Software bietet, näher betrach-
ten.
Dieser Überblick kann nicht vollständig sein, zum einen, weil es
den Rahmen dieses Buches sprengen würde, zum anderen, da die Ent-
wicklung auch neuer Module rasend schnell vorangeht.
Eine Warnung noch: In diesem Kapitel werden wir häufig mit
XML umgehen. Sofern Sie XML bisher noch gar nicht begegnet sind
und nichts mit den Begriffen DOM und SAX anfangen können, wäre
es wahrscheinlich am besten, Sie lesen eine Einführung, um die Bei-
spiele problemlos verstehen zu können.
9.2 Erbauer
Das Entwurfsmuster Erbauer (im englischen Original Builder genannt)
ist eines der ursprünglichen 23 in [Gamma et al. 1995] präsentierten
9 Die Groovy-Bibliotheken362
Entwurfsmuster. Der Zweck dieses Musters ist es, den Algorithmus für
den schrittweisen Aufbau eines komplexen Objektes von seiner tat-
sächlichen Repräsentation zu trennen.
Ein Beispiel hierfür ist die Aufbereitung einer Liste von Zutaten
und Mengenangaben für ein Rezept als Text, in einer XML-Repräsen-
tation oder in einer Datenbanktabelle. Wir haben die gleiche Informa-
tion, die in völlig unterschiedlicher Art repräsentiert werden kann.
Während es sehr viele Beispiele für komplexe Objektstrukturen
gibt, die in perfekter Weise durch das Erbauer-Muster erzeugt werden
könnten, tun sich die meisten Programmiersprachen schwer, dieses
Muster in einer auch nur annähernd natürlichen Art umzusetzen. Dies
führt im ersten Schritt dazu, dass die Anwendung schwieriger und
weniger klar wird, und im zweiten Schritt dazu, dass das Muster nur
wenig benutzt wird.
Dies ist in Groovy anders. Aufgrund der Umsetzungmöglichkeiten,
die uns Groovy über Closures und Meta Object Protocol bietet, sind
Erbauer allgegenwärtig.
9.2.1 Konzept
Das Entwurfsmuster des Erbauers unterscheidet als Teilnehmer den
Direktor und verschiedene konkrete Erbauer. Der Direktor ermöglicht
in Zusammenarbeit mit den verschiedenen Erbauern die schrittweise
Erzeugung eines Objektes. Der Klient, also das Objekt, das ein neues
Objekt erzeugen lassen möchte, kommuniziert nur mit dem Direktor.
Die vom Direktor verwendeten Erbauer-Instanzen sind abgeleitet
von einem abstrakten Erbauer, der eine Schnittstelle und eventuelle
Vorgabeimplementierungen zur Verfügung stellt. Typischerweise
erhält der Direktor die spezifischen Erbauer-Instanzen von außen, zum
Beispiel als Argumente bei der Erzeugung.
Klient
Teil
Direktor
erzeuge()
getResultat()
Abstrakter Erbauer
erzeugeTeil()
getResultat()
Konkreter Erbauer
erzeugeTeil()
getResultat()
Abb. 9–1
Entwurfsmuster des
Erbauers nach
[Gamma et al. 1995]
3639.2 Erbauer
Die eigentliche Erzeugung läuft in mehreren Schritten ab, innerhalb
derer die konkreten Erbauer (eventuell mehrfach) aufgerufen werden,
um Teile des komplexen Objektes zu erzeugen.
Hierfür kann es durchaus notwendig und sinnvoll sein, nicht
sofort die endgültige Repräsentation zu erzeugen, sondern zuerst ein
internes Zwischenformat zu verwenden, aus dem das endgültige
Resultat erzeugt werden kann.
Wenn wir in Folge die Anwendungen des Erbauer-Musters in
Groovy diskutieren, dann befinden wir uns immer in der Rolle des
Direktors, wir operieren also auf abstrakten beziehungsweise spezifi-
schen Erbauer-Instanzen.
9.2.2 Vom Konzept zur Implementierung
Die Builder-Klassen in Groovy sind ein notorisch schwieriges Thema,
das immer wieder für Fragen sorgt (wahrscheinlich weil dieses Muster
aus anderen Programmiersprachen wenig vertraut ist). Dabei sind
Builder in Groovy eigentlich sehr einfach, wenn wir einige grund-
legende Regeln verstanden haben.
Um dies zu erreichen, werden wir jetzt schrittweise von dem Kon-
zept des Erbauer-Musters ausgehend verschiedene Implementierungen
in Groovy betrachten, die mit jeder Realisierung eleganter und mächti-
ger werden. Mit der letzten Implementierung haben wir uns dann der
tatsächlichen Implementierung von Builder-Klassen in Groovy so weit
angenähert, dass die verbleibenden Unterschiede keine Probleme mehr
bereiten sollten.
Als Beispiel werden wir einen Erbauer für Rezeptzutaten wählen,
der (zu Beginn) eine Methode für das Hinzufügen einer Zutat anbietet.
Die erste Implementierung
Wenn wir uns von dem Muster leiten lassen, benötigen wir eine abs-
trakte Klasse, die die zu verwendenden Erbauer-Methoden in einer
neutralen Form implementiert, und dann verschiedene Realisierungen,
die die Methoden der abstrakten Klasse überschreiben.
Bei der ersten Implementierung erzeugen wir eine abstrakte Klasse
und zwei Implementierungen, eine für eine Textdarstellung und eine
für eine XML-Darstellung der Rezeptzutaten. Für die XML-Darstel-
lung wählen wir ein Wurzelelement
rezept, das verschiedene Zutaten
(Strukturelement
zutat) mit Namen (Strukturelement art) und Anzahl
beziehungsweise Menge enthält (Strukturelement
menge).
In Listing 9–1 definieren wir eine abstrakte Erbauer-Klasse
Abs-
traktesRezept
. Wir definieren ein Attribut resultat, das die Text-

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required