# Werkzeug- und Materialansatz

Der Werkzeug- und Materialansatz (WAM-Ansatz) ist eine Methode zur Software-Entwicklung, die auf Anwendungsorientierung und hohe Gebrauchsqualität ausgerichtet ist.
Das Akronym „WAM“ steht für die Worte Werkzeug Automat Material, welche die zentralen Entwurfsmetaphern des Ansatzes bilden. Seine Analysedokumente, Leitbilder, Arbeitsplatztypen, sowie Architektur-Richtlinien unterstützen die Entwicklungsteams bei iterativen, agilen Software-Projekten mit Prototyping und der Analyse von Geschäftsprozessen. Beim WAM-Ansatz handelt es sich um einen der wenigen eigenständigen europäischen Beiträge zur objektorientierten Methodik.
Der WAM-Ansatz stützt sich auf Erkenntnisse aus der Arbeitspsychologie und Soziologie: In Fabriken und Handwerksbetrieben bearbeiten Menschen Materialien mit geeigneten Werkzeugen. Dieses Bild lässt sich auf computergestützte Arbeit übertragen.

## Geschichte

Der WAM-Ansatz wurde von Reinhard Budde und Heinz Züllighoven an der GMD in Bonn begründet. In der Folge wurde er an der Universität Hamburg von Heinz Züllighoven und seiner Gruppe weiterentwickelt und wird derzeit dort gelehrt. Der Ansatz basiert auf dem (Werk-)Zeug-Begriff von Martin Heidegger.
Unabhängig voneinander haben sich WAM-Ansatz und Domain-driven Design (DDD) entwickelt. Trotzdem haben die beiden Ansätze große Ähnlichkeiten.

## Grundlagen

Im WAM-Ansatz befindet sich eine Reihe von Metaphern aus teils handwerklichen Bereichen, die verschiedene Entwurfskonzepte modellieren. Die wichtigsten fünf Bestandteile dieser Konzepte sind hier aufgelistet.

### Fachwerte

Fachwerte sind Erweiterungen von primitiven Datentypen objektorientierter Programmiersprachen. Sie halten Informationen und sind unveränderlich, weswegen sich Fachwerte zum Beispiel für Geldbeträge anbieten: Es ergibt Sinn zwei Geldbeträge miteinander zu addieren. Hier ist es also angebracht einen unveränderlichen Geldbetrag als eigenen Fachwert zu behandeln und für jede Änderung an diesem einen neuen zu erstellen. Ein Fachwert kennt niemanden außer sich selbst und andere Fachwerte. Im DDD ist dieses Konzept als Value Object bekannt.

### Materialien

Materialien sind Gegenstände, die ein Anwender im Rahmen einer Aufgabe mit einem Werkzeug bearbeitet und aus denen seine Arbeitsergebnisse bestehen. Ein Material darf andere Materialien, sowie Fachwerte benutzen und verändern, sowie neue Fachwerte erzeugen. Viele Eigenschaften von konkreten fachlichen Gegenständen, wie beispielsweise Verträgen, Formularen, Bankkonten oder Plänen, lassen sich sinnvoll auf Software-Materialien übertragen. Materialien sind Entity im DDD-Sinne.

### Services

Services, auch als Dienstleistung bezeichnet, bieten fachlich motivierte Schnittstellen, an denen Fachwerte und Materialien entgegengenommen und zurückgeliefert werden können. Ein Service beinhaltet die Implementation der Fachlogik, welche nicht in ein Werkzeug oder einen Automaten passt. Er kennt und benutzt sowohl Fachwerte als auch Materialien, stellt diese jedoch nicht dar. Für die Bereitstellung von externen Daten (z. B. einer Netzwerkverbindung, Datenbank, Datei etc.), bietet sich meistens ein Service an.

### Automaten

Ein Automat ist einem Werkzeug sehr ähnlich, jedoch besitzt ein Werkzeug eine grafische Benutzeroberfläche, ein Automat jedoch nicht. Ein typisches Anwendungsfeld sind Hintergrundaktivitäten, bei denen er vor Ausführung seiner Tätigkeit konfiguriert wird und anschließend ohne Interaktion mit dem Benutzer arbeitet. Somit bietet er sich z. B. für Datenarchivierung, dem Herunterladen von Dateien oder anderen länger andauernden Prozessen an.

### Werkzeuge

Werkzeuge ermöglichen dem Anwender über eine grafische Benutzeroberfläche zügig und flexibel Materialien zu bearbeiten: Sie nehmen ihm lästige Routinetätigkeiten ab, indem der Benutzer einen Prozess nur noch anstößt, den die Software anschließend ausführt. Weil sich die Bedienung eines Computers jedoch grundlegend von der Bedienung manueller Werkzeuge unterscheidet, ist es notwendig, das hinter dem manuellen Werkzeug stehende Konzept von Arbeit zu erkennen. Eine direkte Abbildung (manueller) Werkzeuge in Software ist – im Gegensatz zu Materialien – daher selten sinnvoll. Ein Werkzeug kann Services, Automaten, Materialien und Fachwerte verwenden, benutzen und verändern, was bei der Implementation zu zyklischen Abhängigkeiten führen kann. Um dem vorzubeugen, ist die Verbindung zweier Subwerkzeuge (ein Werkzeug, welches selbst von einem anderen Werkzeug benutzt wird) nicht linkskomparativ.

### Hierarchie

Alle Bestandteile sind in einer bestimmten Hierarchie angeordnet, wodurch eine klare und gut wartbare Struktur entsteht. Fachwerte kennen zum Beispiel nur sich selbst und andere Fachwerte, wohingegen Werkzeuge andere Werkzeuge, Automaten, Services, Materialien und Fachwerte kennen. Um die Klassenhierarchie nicht zu brechen und keine zyklischen Abhängigkeiten zu erzeugen, wird oftmals auf das Beobachtermuster zurückgegriffen, damit Klassen unterer Hierarchie-Ebenen höheren Ebenen Zustandsänderungen mitteilen können.