Tutorial

Modellierung von Software und Systemen
mit eigenen UML Profilen und UML Lab

Tutorial

Modellierung von Software und Systemen mit eigenen UML Profilen und UML Lab

Die UML bietet diverse Konzepte zur Modellierung von Software und Systemen. Dabei werden nicht alle vorstellbaren Anwendungsbereiche ideal abgedeckt. Hierfür gibt es UML Profile, mit denen eigene Modellierungskonzepte erstellt werden können. Dieses Tutorial zeigt, wie man eigene UML Profile mit UML Lab erstellt und diese mit Round-Trip-Engineering NG verwendet.

Das Tutorial erweitert den Logger CodeStyle aus dem vorangegangenen Tutorial um einen Mechanismus zur Validierung. Der Anwendungsfall des Beispiels ist wie folgt: Source Code, der zu entsprechend annotierten Attributen des Modells generiert wird, soll eine Warnung protokollieren, sobald das entsprechende Java Feld zur Laufzeit mit einem ungültigen Wert belegt werden soll. Dazu wird in diesem Tutorial ein spezieller Stereotyp eingeführt, der bei der Modellierung zur Annotation der Modellattribute verwendet wird. Außerdem wird ein entsprechendes Template angelegt, das den Stereotyp zur Spezifizierung der Codegenerierung verwendet.

Voraussetzungen

Das Tutorial setzt voraus, dass Sie bereits mit der grundlegenden Funktionsweise von UML Lab vertraut sind. Sollte dies nicht der Fall sein, empfehlen wir Ihnen sich zunächst die UML Lab Tour anzuschauen. Sie finden die Tour unter Help > Cheat Sheets…. Wählen Sie dort bitte die UML Lab Tour.

Darüber hinaus baut dieses Tutorial auf dem CodeStyles Tutorial auf. Dieses bietet eine Einführung in das Template-Konzept von UML Lab. Es wird daher empfohlen zunächst mit diesem Tutorial zu beginnen.

Inhalt

  1. Setup
  2. Editieren eines UML Profils in UML Lab
  3. Applizieren von UML Profilen auf neue Modelle
  4. Modellierung mit dem neuen UML Profil
  5. Profile in der Code Generierung

Setup

Dieses Tutorial baut auf dem CodeStyle aus dem CodeStyles Tutorial auf. Wenn Sie mit einem neuen Workspace beginnen, sollten Sie die Beispiellösung des ersten Tutorials zunächst importieren. Wählen Sie dazu bitte File > New > Example… > Logger Code Style - stage 1.

Für dieses Tutorial benötigen Sie Beispielcode. Importieren Sie hierzu am besten das Code Style Example Projekt wie im Code Style Tutorial beschrieben. Lassen Sie den Source Code von UML Lab einlesen um automatisch ein Modell und ein Klassendiagramm zu generieren.

Editieren eines UML Profils in UML Lab

Beim Anlegen eines CodeStyle Projekts in UML Lab wird automatisch auch ein UML Profil angelegt. Dieses finden Sie im Unterverzeichnis /uml/ eines solchen Projekts. Außerdem finden Sie dort das zugehörige Klassendiagramm. Öffnen Sie dieses bitte. In unserem Logger Projekt ist dies die Datei /uml/Logger.profile.umlcd. Im leeren Klassendiagramm ziehen Sie bitte mit der rechten Maustaste ein Kästchen auf wie im Screenshot gezeigt. Beim Loslassen der Maus erscheint ein Kontextmenü, das Ihnen verschiedene Aktionsmöglichkeiten anbietet. Wählen Sie für dieses Tutorial nun bitte Create Stereotype und geben Sie dann den Namen des Stereotyps ein: in unserem Fall soll er ValueChecked heißen. Fügen Sie dem Stereotyp noch ein Attribut hinzu: geben Sie dazu min:int ein. Dadurch wird ein Attribut namens min vom Typ int angelegt. Legen Sie bitte noch ein Attribut max:int an. Mit Hilfe dieser Attribute sollen Längenrestriktionen auf annotierten Properties definiert werden.

Im nächsten Schritt muss die UML Metaklasse gewählt werden, auf die der neue Stereotyp ValueChecked applizierbar sein soll. Der Stereotyp soll für Attribute von Klassen verwendet werden - daher sollte die Metaklasse Property zunächst dem Diagramm hinzugefügt werden. Dazu rechtsklicken Sie bitte in den Editor und wählen im Kontextmenü Add/Remove metaclass.

Wählen Sie im Dialog Property in der linken Liste aus und fügen Sie den Eintrag der rechten Liste durch Doppelklicken hinzu. Um sich die Suche zu erleichtern, können Sie auch das Präfix prop in den Suchfilter eingeben. Klicken Sie auf OK um den Dialog zu beenden.

Property enthält zahlreiche Member und wird im Klassendiagramm unnötig groß dargestellt. Verbergen Sie die Member, indem Sie bei Attributen und Methoden auf das Minus-Symbol klicken.

Nun muss der Stereotyp ValueChecked mit der Metaklasse Property verbunden werden. Ziehen Sie mit der rechten Maustaste eine Verbindung vom Stereotyp auf die Metaklasse. Wählen Sie anschließend im Kontextmenü die Option Create Stereotype Extension.

Ihr UML Profil ist nun fertig. Vergleichen Sie Ihr Diagramm bitte mit dem Screenshot. Zum Schluss müssen Sie das Diagramm nur noch speichern, um das Profil weiter verwenden zu können.

Applizieren von UML Profilen auf neue Modelle

Um den neuen Stereotyp zum Beispiel in dem Code Style Example Modell zu verwenden, stellen Sie zunächst bitte sicher, dass das Logger Profil dort appliziert ist. (Nach dem CodeStyles Tutorial sollte dies bereits der Fall sein.) Öffnen Sie dafür zunächst das Klassendiagramm und klicken Sie auf den Diagrammhintergrund. Gehen Sie dann in den Properties View und wählen dort das Profiles Tab. Dort können Sie das LOGGERStyle UML Profil applizieren, falls es noch nicht in der Applied Liste auf der linken Seite enthalten ist.

Noch ein Hinweis: UML Profile werden von UML Lab automatisch appliziert, wenn Sie beim Modellieren einen CodeStyle-Stereotyp daraus verwenden. Also würde das Verwenden des Logger CodeStyles für ein Element des Diagramms automatisch das entsprechende UML Profil auf dem Modell applizieren. Dies gilt natürlich auch für die Erkennung des CodeStyles im Quelltext durch UML Labs Reverse Engineering.

Modellierung mit dem neuen UML Profil

Um jetzt den neuen ValueChecked Stereotyp im Beispielprojekt zu verwenden, wählen Sie einfach ein UML Attribut vom Typ String aus. Wählen Sie zum Beispiel das Attribut companyName in der Klasse Company, indem Sie es direkt im Klassendiagramm anklicken. Gehen Sie dann in den Properties View und wählen dort das Tab Stereotypes. Auf der rechten Seite sehen Sie nun den neu angelegten Stereotyp LOGGERStyle::ValueChecked. Doppelklicken Sie ihn um den Stereotyp zu applizieren.

Um die Eigenschaften der Stereotypapplikation zu verändern, klicken Sie anschließend auf den Stereotyp in der linken Liste. Die Stereotyp-Eigenschaften erscheinen unterhalb: beide min und max Attribute sind mit 0 initialisiert. Ändern Sie diese Werte, um Restriktionen zu konfigurieren. Wenn Sie die Werte nicht verändern, wird nur der ungleich-Null-Check in den Java Source Code generiert.

Profile in der Code Generierung

Bislang hat der neu applizierte Stereotyp noch keinen weiteren Effekt außer die Attribut-Restriktion im Modell zu annotieren. Um ihn auch in der Codegenerierung zu verwenden, öffnen Sie bitte das Template Attribute.xpt. Sie finden es im Unterverzeichnis /templates/, ebenfalls im Logger Projekt. Genau oberhalb der Zeile mit dem log.log() Statement ergänzen Sie bitte folgenden Templatecode.

«FOR ValueChecked»
   «IF type.typeString()=="String"»
      if («value» == null) {
         log.log(Level.SEVERE, "null value: «name»");
      }
      «IF min != 0»
         else if («value».length() < «min») {
            log.log(Level.SEVERE, "value too short: «name»");
         }
      «ENDIF»
      «IF max != 0»
         else if («value».length() > «max») {
            log.log(Level.SEVERE, "value too long: «name»");
         }
      «ENDIF»
   «ENDIF»
«ENDFOR»
  • Der gesamte Block wird nur verwendet, wenn der ValueChecked Stereotyp appliziert ist. Der FOR Block ist eine Kurznotation dafür. Beachten Sie bitte, dass dies kein Standard Xpand Sprachkonstrukt ist, sondern in der Spracherweiterung Xpand++ definiert ist.
  • Außerdem sollte das Template nur für primitive Attribute vom Type String verwendet werden. Der Einfachheit halber wird direkt der Name des Typs geprüft.
  • Die Variable «value» bezieht sich auf den Namen des Parameters in der Setter Methode. Er wird durch den ihn umgebenden LET Block definiert. Der Default Wert ist "value".
  • Innerhalb eines «FOR …» Blocks kann auf die Eigenschaften des entsprechenden Typs zugegriffen werden. Daher bezieht sich die Bedingung in der «IF …» Abfrage auf das Attribut min des ValueChecked Stereotyps.
  • Der generierte Java Code prüft die Länge des value Parameters und vergleicht sie mit dem Wert des min Attributs. Es wird eine Fehlermeldung protokolliert wenn der Wert kürzer ist.

Das fertige Template sollte nun wie folgt aussehen:

Wenn Sie wissen wollen, welchen Effekt der Stereotyp auf die Codegenerierung hat, schauen Sie sich die Klasse Company an. Zuerst sollten Sie sicher gehen, dass Company tatsächlich den Logger CodeStyle verwendet. Wenn Sie das Modell nicht aus dem Quelltext eingelesen haben, sollten Sie hierzu den CodeStyle im Properties View ändern. Speichern Sie anschließend das Diagramm, um mit Hilfe des angepassten Templates neuen Source Code zu generieren.

Navigieren Sie aus dem Diagramm zum Source Code der Klasse Company. Wie unten zu sehen ist enthält der Source Code nun entsprechende Checks. UML Lab verwendet das neue Template ab sofort auch für das Reverse Engineering. Das können Sie wie folgt überprüfen: Ändern Sie zum Beispiel den Längencheck im Source Code, oder entfernen Sie den Check auf Ober-/Untergrenze komplett aus dem Source Code. Beim Speichern der Java Datei wird der Source Code erneut eingelesen und das Modell entsprechend angepasst. Wenn Sie alle Wertüberprüfungen aus dem Setter entfernen, wird der ValueChecked Stereotyp auch nicht mehr im Modell auf dem entsprechenden Attribut appliziert. Wenn Sie andererseits die Überprüfungen in einen anderen String-Setter kopieren, wird der Stereotyp am entsprechenden Attribut im Modell appliziert. Sie sehen, das Round-Trip-Engineering NG bleibt voll erhalten.

Die Lösung dieses Tutorials ist in UML Lab auch als eigenes Beispielprojekt enthalten. Sie finden es unter File > New > Example… > Logger Code Style - stage 2.