Erstellen und Verwenden von Templates
Das Template-Konzept der UML bietet die Möglichkeit, die Konstrukte "Generische Datentypen" (Generics) von Java und C# bzw. "Templates" von C++ in Modellen abzubilden. Klassentemplates bieten einen Mechanismus, um Klassen zu parametrieren. Damit haben Sie die Möglichkeit, ähnliche Verhaltensweisen in einer Klasse zusammenzufassen.
Abbildung generischer Datentypen in UML-Modellen
Parametrisierung von Klassen
Einige Programmiersprachen ermöglichen eine Parametrisierung von Klassen, um Objekte basierend auf diesen Schablonenparametern zu erzeugen. So kennen z.B. die Programmiersprachen Java und C# die Konstrukte der "Generischen Datentypen" (Generics). In der Programmiersprache C++ existiert mit den "Templates" ein ähnliches Konzept.
Um die generischen Datentypen bzw. C++-Templates in UML-Modellen abzubilden, bietet die UML eine Erweiterung für UML-Templates an.
UML-Templates und formale Templateparameter
In der UML werden Classifier als Templates bezeichnet, wenn sie formale Templateparameter besitzen.
Formale Templateparameter werden an einem Classifier definiert. Sie dienen als Platzhalter für die tatsächlichen Templateparameter, die in der Templatebindung zugewiesen werden.
Den formalen Templateparametern können einschränkende Classifier zugewiesen werden. Dadurch wird die Menge der möglichen tatsächlichen Templateparameter auf solche Classifier eingeschränkt, die mindestens einem einschränkenden Classifier entsprechen oder eine Spezialisierung davon sind.
Das Hinzufügen eines formalen Templateparameters zu einem Classifier in einem UML-Modell entspricht dem Hinzufügen von formalen Typparametern zu einer Klassen- oder Schnittstellendeklaration in Java oder C#.
Templatebindung und tatsächliche Templateparameter
Für die Verwendung der Templates bei der Typisierung von Attributen und Operationsparametern muss es möglich sein, den formalen Templateparametern des Typs tatsächliche Templateparameter zuzuweisen. Diese Zuweisung muss bei jeder Typisierung separat einstellbar sein. Dies wird in der UML erreicht, indem Classifier über eine gerichtete Beziehungskante vom Typ Templatebindung an das Template gebunden werden. Die Templatebindung enthält die Informationen, welche tatsächlichen Templateparameter welchen formalen Templateparametern zugewiesen werden.
Sind für einen formalen Templateparameter einschränkende Classifier angegeben, so muss der in der Templatebindung zugewiesene tatsächliche Templateparameter mindestens einem einschränkenden Classifier entsprechen oder davon erben.
Das Erzeugen einer Templatebindung und die Angabe der tatsächlichen Templateparameter in einem UML-Modell entsprechen der Angabe der Typparameter während der Deklaration einer Variable in Java oder C#.
Umsetzung des Templatekonzepts der UML in Innovator
Definition von Templates
Die UML bietet eine Notation für Templateparameter an. Dabei werden die Templateparameter in einem gestrichelten Rechteck überlappend an der rechten oberen Ecke der Klasse eingetragen. Innovator nutzt im Unterschied dazu einen speziellen Abschnitt, wie er auch für Attribute und Operationen verwendet wird.
Erstellen eines formalen Templateparameters zu einer Klasse
Um einen Classifier in Innovator als Template verwenden zu können, müssen diesem Classifier formale Templateparameter hinzugefügt werden.
Die Konfiguration muss das Hinzufügen von formalen Templateparametern für das Stereotyp der Klasse oder der Schnittstelle zulassen.
Einschränken formaler Templateparameter
Einem formalen Templateparameter können einschränkende Classifier zugewiesen werden.
Dem Stereotyp des formalen Templateparameters müssen in der Konfiguration Stereotype für Classifier als einschränkende Classifier zugeordnet sein.
Verwendung von Templateparameterklassen zur Typisierung von Attributen und Operationsparametern
Für jeden formalen Templateparameter wird automatisch eine Templateparameterklasse erstellt, deren Besitzer der Templateparameter ist. Diese Templateparameterklasse kann für die Typisierung von Attributen und Operationsparametern dieses Templates verwendet werden. Die Templateparameterklasse hat immer den Namen des entsprechenden formalen Templateparameters.
Existenz von gebundenen Classifiern
Werden den formalen Templateparametern eines Templates während der Typisierung eines Attributs oder eines Operationsparameters tatsächliche Templateparameter zugewiesen, so erstellt Innovator im Hintergrund automatisch einen gebundenen Classifier mit dem Typ und dem Stereotyp des Templates.
Besitzer des gebundenen Classifiers ist das Template. Der gebundene Classifier ist mit einer gerichteten Beziehungskante vom Typ Templatebindung mit dem Template verbunden. Die Templatebindung enthält die Informationen über die Zuordnung der tatsächlichen Templateparameter zu den formalen Templateparametern.
Die automatisch erstellten gebundenen Classifier sind im Modell nicht sichtbar. Im Dialog zur Auswahl eines Typs stehen sie jedoch zur Verfügung und können für die Typisierung weiterer Attribute verwendet werden. Wird die letzte Verwendung eines gebundenen Classifiers als Typ eines Attributs oder Operationsparameters entfernt, so wird der gebundene Classifier automatisch von Innovator gelöscht.
Verwendung des Templatekonzepts der UML in Innovator
Verwendung von Templates
Templates verwenden Sie bei der Typisierung von Attributen und Operationsparametern. Dabei weisen Sie den formalen Templateparameter des Templates tatsächliche Templateparameter zu.
Die Verwendung von Templates bei der Typisierung von Attributen und Operationsparametern in Innovator entspricht der Deklaration von Variablen mit parametrisierten Typen in Java oder C#.
Beispiel
Im Modell ist ein Template "Map" mit den formalen Templateparametern "K" und "V" definiert. Sie möchten bei der Typisierung eines Attributs ausdrücken, dass der formale Templateparameter "K" durch den tatsächlichen Templateparameter "String" und der formale Templateparameter "V" durch den tatsächlichen Templateparameter "Integer" ersetzen werden soll. Das Attribut wird also durch einen Typ "Map<String, Integer>" typisiert.
Gegenüberstellung der Generics und Templates in Innovator
Die folgende Tabelle stellt die Begriffe des UML-Templatekonzepts, die in Innovator verwendeten Begriffe und die Begriffe der Programmiersprache Java gegenüber.
Begriff in UML | Begriff in Innovator | Begriff in Java | Beispiel in Java |
---|---|---|---|
template | Template | generischer Typ | interface Map<K, V> |
formal template parameter | formaler Templateparameter | formaler Typparameter | K; V |
templateable element | gebundener Classifier | parametrisierter Typ | Map<String, Integer> mapVar = new […] |
actual template parameter | tatsächlicher Templateparameter | Typparameter | String; Integer |
template parameter class | Templateparameterklasse | Typvariable | public V get(K key) |
constraining classifier | einschränkender Classifier | einfache Einschränkung | interface MyMap<K, V extends Person> |
In diesem Kapitel finden Sie die Themen: