# Stereotyp (UML)

Ein Stereotyp (das; -s, -e; engl. stereotype) ist eine Erweiterung vorhandener Modellelemente in der Unified Modeling Language (UML). In der Praxis geben Stereotype vor allem die möglichen Verwendungszusammenhänge (Verwendungskontext) einer Klasse, einer Beziehung oder eines Paketes an.
Stereotype sind ein wichtiger Bestandteil von UML-Profilen, einem leichtgewichtigen Mechanismus für die Erweiterung des UML-Metamodells. Ein Stereotyp spezifiziert, wie eine bereits durch das Metamodell der UML vorgegebene Metaklasse für ein spezifisches Einsatzgebiet angepasst werden kann.
Stereotyp ist in der UML 1.x und der UML2 nicht genau gleich definiert. Dieser Artikel bezieht sich auf Stereotyp, wie es in der UML2 gilt.

## Stereotype als spezielle Klassen

Ein Stereotyp ist eine spezielle Klasse. Um es von anderen Klassen zu unterscheiden, wird das Schlüsselwort stereotype zwischen Guillemets («stereotype») angegeben. Wie jede Klasse kann es über Attribute verfügen, die bei Stereotypen jedoch auch als Eigenschaftsdefinitionen (engl. tag definition) bezeichnet werden. Die UML schließt nicht aus, dass ein Stereotyp auch Operationen deklarieren kann, obschon Operationen auf einem Stereotyp insofern nutzlos sind, als sie bei der Anwendung des Stereotyps nie eine Rolle spielen. Abstrakte Stereotype sind erlaubt und oft auch sinnvoll, wenn mehrere Stereotype in Generalisierungshierachien angeordnet werden, wobei die Einschränkung zu berücksichtigen ist, dass Stereotype ausschließlich andere Stereotype, also keine anderen Arten von Klassen, spezialisieren dürfen.
Das Stereotyp OrganisationsEinheit in der Abbildung rechts umfasst zum Beispiel zwei Eigenschaftsdefinitionen, nämlich kostenstelle und leiter.

## Erweiterung von Metaklassen durch Stereotype

Ein Stereotyp erweitert immer ein Modellelement der UML, also eine Metaklasse aus dem UML-Metamodell. Um diese Beziehung zwischen einer Metaklasse und einem Stereotyp zu modellieren, bietet die UML das Modellelement Erweiterung (engl. extension) an, eine spezielle Form von Assoziation zwischen der Metaklasse und dem Stereotyp. Eine Erweiterung bindet eine Metaklasse und ein Stereotyp zu einem Bündel zusammen. Grundsätzlich gilt, dass immer eine Instanz des Stereotyps angelegt wird, wenn in einem UML-Modell eine Instanz der Metaklasse angelegt wird. Von dieser Regel wird nur abgewichen, wenn die Erweiterung als optional markiert bzw. wenn das Stereotyp als abstrakt markiert ist.
In der Abbildung rechts ist eine Erweiterung der Metaklasse Class durch das Stereotyp OrganisationsEinheit als durchgezogene Linie mit einer geschlossenen Pfeilspitze dargestellt, im Unterschied zur Generalisierung ist die Pfeilspitze jedoch ausgefüllt.
Eine Erweiterung modelliert die Möglichkeit, ein Stereotyp auf eine bestimmte Metaklasse anwenden zu können. Nur wenn eine Erweiterung im Profil, zu dem das Stereotyp gehört, explizit modelliert ist, darf das Stereotyp auch tatsächlich im Rahmen dieses Profils auf die entsprechende Metaklasse angewendet werden. Das Stereotyp OrganisationsEinheit aus dem Beispiel rechts dürfte also nicht auf ein Paket angewendet werden, weil ein Paket keine Klasse ist.

## Anwenden von Stereotypen in einem UML-Modell

Ein UML-Modell besteht aus Instanzen der Metaklassen des UML-Metamodells. Falls ein Profil auf ein Modell angewendet wird, können die Stereotype aus diesem Profil entsprechend ihrer Definition eingesetzt werden. Weil das Stereotyp OrganisationsEinheit zum Beispiel die Metaklasse Class erweitert, kann es mit der Klasse Finanzabteilung kombiniert werden, denn Finanzabteilung ist eine Instanz der Metaklasse Class. In Klassendiagrammen wird der Name des Stereotyps dabei über dem Namen des Elements, auf den das Stereotyp angewendet wird, durch Guillemets eingeschlossen dargestellt.
Für jede Eigenschaftsdefinition (engl. tag definition) des Stereotyps kann nun ein Eigenschaftswert (engl. tagged value) ergänzt werden. Graphisch werden die Eigenschaftswerte in einem Kommentar gezeichnet, der mit dem Element verbunden ist, auf den das Stereotyp angewendet wurde.