Beispiel: Generieren von Java-Code
In diesem Beispiel wird gezeigt, wie Sie ein neues UModel-Projekt erstellen und Programmcode anhand dieses Projekts generieren (ein Prozess, der als "Forward Engineering" bezeichnet wird). Der Einfachheit halber besteht das Projekt aus nur einer Klasse. Außerdem lernen Sie, wie Sie das Projekt für die Codegenerierung vorbereiten und sicher stellen, dass im Projekt die richtige Syntax verwendet wird. Nachdem Sie Programmcode generiert haben, werden Sie diesen außerhalb von UModel ändern, indem Sie eine neue Methode zur Klasse hinzufügen. Zum Abschluss werden Sie die Codeänderungen wieder im ursprünglichen UModel-Projekt zusammenführen (ein als "Reverse Engineering" bekannter Prozess).
In diesem Tutorial wird als Codegenerierungssprache Java verwendet. Die Vorgangsweise ist aber auch bei anderen Codegenerierungssprachen ähnlich.
Erstellen eines neue UModel-Projekts
Sie können folgendermaßen ein neues UModel-Projekt erstellen:
•Klicken Sie im Menü Datei auf Neu. (Oder drücken Sie alternativ dazu Strg+N oder klicken Sie auf die Symbolleisten-Schaltfläche "Neu" .)
Das Projekt enthält zu diesem Zeitpunkt nur die Standardpakete "Root" und "Component View". Diese beiden Pakete können nicht gelöscht oder umbenannt werden. "Root" bildet die oberste Hierarchieebene für alle anderen Pakete und Elemente im Projekt. "Component View" wird für das Code Engineering benötigt; normalerweise enthält es eine oder mehrere UML-Komponenten, die von den Klassen oder Schnittstellen Ihres Projekts realisiert werden; wir haben zu diesem Zeitpunkt jedoch noch keine Klassen erstellt. Erstellen wir also zuerst die Struktur unseres Programms. Gehen Sie dazu folgendermaßen vor:
1.Klicken Sie mit der rechten Maustaste im Fenster "Modell-Struktur" auf das Paket "Root" und wählen Sie im Kontextmenü den Befehl Neues Element | Paket. Benennen Sie das neue Paket in "src" um.
2.Klicken Sie mit der rechten Maustaste auf "src" und wählen Sie im Kontextmenü den Befehl Neues Element | Paket. Benennen Sie das neue Paket in "com" um.
3.Klicken Sie mit der rechten Maustaste auf "com" wählen Sie im Kontextmenü den Befehl Neues Element | Paket. Benennen Sie das neue Paket in "nanonull" um.
4.Klicken Sie mit der rechten Maustaste auf "nanonull" wählen Sie im Kontextmenü den Befehl Neues Element | Klasse. Benennen Sie die neue Klasse in "MyClass" um.
Vorbereiten des Projekts für die Codegenerierung
Um Code anhand eines UModel-Modells zu generieren, müssen die folgenden Voraussetzungen gegeben sein:
•Es muss ein C#- oder VB.NET-Namespace-Root-Pakte definiert sein.
•Es muss eine Komponente geben, die von allen Klassen oder Schnittstellen, für die Code generiert werden muss, realisiert wird.
•Der Komponente muss ein physischer Pfad (Verzeichnis) zugewiesen worden sein. Der Code wird in diesem Verzeichnis generiert.
•Für die Komponente muss die Eigenschaft für Code Engineering verwenden aktiviert sein.
Alle diese Anforderungen werden weiter unten ausführlicher beschrieben. Beachten Sie, dass Sie jederzeit überprüfen können, ob das Projekt alle Voraussetzungen für die Codegenerierung erfüllt, indem Sie es validieren:
•Klicken Sie im Menü Projekt auf Projektsyntax überprüfen. (Drücken Sie alternativ dazu F11.)
Wenn Sie das Projekt in dieser Phase validieren, wird im Fenster "Meldungen" ein Validierungsfehler angezeigt ("Es wurde keine Namespace Root gefunden! Verwenden Sie bitte das Kontextmenü in der Modell-Struktur, um ein Paket als Namespace Root zu definieren"). Um diesen Fehler zu beheben, weisen Sie das Paket "src" als Namespace Root zu:
•Klicken Sie mit der rechten Maustaste auf das Paket "src" und wählen Sie im Kontextmenü den Befehl Code Engineering | Als Java Namespace Root definieren.
•Wenn Sie informiert werden, dass das UModel Java-Profil inkludiert wird, klicken Sie auf OK.
Beachten Sie, dass sich das Paketsymbol nun in das Symbol geändert hat, was bedeutet, dass es sich beim Paket um eine Java Namespace Root handelt. Zusätzlich dazu wurde ein Java-Profil zum Projekt hinzugefügt.
Der eigentliche Namespace kann folgendermaßen definiert werden:
1.Wählen Sie das Paket "com" im Fenster Modell-Struktur aus.
2.Aktivieren Sie im Fenster Eigenschaften die Eigenschaft <<namespace>>.
3.Wiederholen Sie die obigen Schritte für das Paket "nanonull".
Beachten Sie, dass sich das Symbol der beiden Pakete "com" und "nanonull" nun in geändert hat, was bedeutet, dass es sich nun um einen Namespace handelt.
Eine weitere Voraussetzung für die Codegenerierung ist, dass eine Komponente von mindestens einer Klasse oder Schnittstelle realisiert werden muss. Eine Komponente ist in UML ein Teilstück des Systems. In UModel können Sie über die Komponente das Verzeichnis für die Codegenerierung und andere Einstellungen definieren. Andernfalls wäre die Codegenerierung nicht möglich. Wenn Sie das Projekt zu diesem Zeitpunkt validieren, wird im Fenster Meldungen eine Warnung angezeigt: "MyClass hat keine Komponentenrealisierung zu einer Komponente - es wird kein Code generiert". Um diesen Fehler zu beheben, muss eine Komponente zum Projekt hinzugefügt werden. Gehen Sie folgendermaßen vor:
1.Klicken Sie mit der rechten Maustaste im Fenster "Modell-Struktur" auf "Component View" und wählen Sie im Kontextmenü den Befehl Neues Element | Komponente.
2.Benennen Sie die neue Komponente in "nanonull" um.
3.Ändern Sie im Fenster Eigenschaften die Eigenschaft Verzeichnis in ein Verzeichnis, in dem der Code generiert werden soll (in diesem Beispiel, "src\com\nanonull"). Beachten Sie dass die Eigenschaft für Code Engineering verwenden aktiviert ist, was eine weitere Vorbedingung für die Codegenerierung ist.
4.Speichern Sie das UModel-Projekt in einem Verzeichnis und geben Sie ihm einen beschreibenden Namen (in diesem Beispiel C:\UModelDemo\Tutorial.ump).
Anmerkung: | Der Pfad für die Codegenerierung kann absolut oder relativ zum .ump-Projekt sein. Wenn er, wie in diesem Beispiel, relativ ist, würden mit dem Pfad src\com\nanonull alle Verzeichnisse im selben Verzeichnis, in dem auch das UModel-Projekt gespeichert ist, erstellt werden. |
Wir haben uns absichtlich entschieden, Code in einem Verzeichnis zu generieren, das den Namespace-Namen enthält; andernfalls würde es zu Warnungen kommen. UModel zeigt standardmäßig Projektvalidierungswarnungen an, wenn die Komponente so konfiguriert ist, das Java-Code in einem Verzeichnis generiert wird, das nicht denselben Namen wie der Namespace hat. Die Komponente "nanonull" in diesem Beispiel hat den Pfad "C:\UModelDemo\src\com\nanonull", sodass es zu keinen Validierungswarnungen kommt. Wenn Sie eine ähnliche Überprüfung für C# oder VB.NET implementieren möchten oder wenn Sie die Namespace-Validierung für Java deaktivieren möchten, gehen Sie folgendermaßen vor:
1.Klicken Sie im Menü Extras auf Optionen.
2.Klicken Sie auf das Register Code Engineering.
3.Aktivieren Sie unter Namespace für Codedateipfad verwenden das entsprechende Kontrollkästchen.
Die Komponentenrealisierungsbeziehung kann folgendermaßen erstellt werden:
•Ziehen Sie die Maus im Fenster Modell-Struktur bei gedrückter Maustaste von der zuvor erstellten Klasse MyClass auf die Komponente nanonull.
Die Komponente wird nun von der einzigen Klasse des Projekts, nämlich MyClass realisiert. Beachten Sie, dass die oben beschriebene Methode nun eine von mehreren Möglichkeiten ist, die Komponentenrealisierung zu erstellen. Eine weitere Methode ist, sie, wie im Tutorialabschnitt Komponentendiagramme beschrieben, von einem Komponentendiagramm aus zu erstellen.
Als nächstes wird empfohlen, den an der Codegenerierung beteiligten Klassen oder Schnittstellen einen Dateinamen zu geben. Andernfalls generiert UModel die entsprechende Datei mit einem Standarddateinamen und im Fenster Meldungen wird eine Warnung angezeigt ("'Codedateiname wurde nicht definiert - es wird ein Standardname generiert."). Um diese Warnung zu entfernen, gehen Sie folgendermaßen vor:
1.Wählen Sie die Klasse MyClass im Fenster Modell-Struktur aus.
2.Ändern Sie die Eigenschaft Codedateiname im Fenster Eigenschaften in den gewünschten Datennamen (in diesem Beispiel, MyClass.java).
Inkludieren der JDK-Typen
Dieser Schritt ist zwar optional, dennoch wird empfohlen, die Java Development Kit (JDK)-Sprachentypen als Unterprojekt Ihres aktuellen UModel-Projekts zu inkludieren. Andernfalls stehen die JDK-Typen beim Erstellen von Klassen oder Schnittstellen nicht zur Verfügung. Gehen Sie dazu folgendermaßen vor (die Vorgangsweise ist für C# und VB.NET ähnlich):
1.Klicken Sie im Menü Projekt auf Unterprojekt inkludieren.
2.Klicken Sie auf das Register Java und wählen Sie das Projekt Java JDK 9 (types only) aus.
3.Wenn Sie gefragt werden, ob das Projekt über eine Referenz oder als Kopie inkludiert werden soll, wählen Sie Durch Referenz.
Generieren von Code
Nachdem nun alle Vorbedingungen erfüllt werden, kann Code folgendermaßen generiert werden:
1.Klicken Sie im Menü Projekt auf Merge Programmcode aus UModel-Projekt. (Drücken Sie alternativ dazu F12). Beachten Sie, dass dieser Befehl den Namen Überschreibe Programmcode aus UModel-Projekt hat, wenn zuvor im unten gezeigten Dialogfeld "Synchronisierungseinstellungen" die Option Code anhand von Modell überschreiben aktiviert wurde.
2.Lassen Sie die Standardsynchronisierungseinstellungen unverändert und klicken Sie auf OK. Es wird automatisch eine Projektsyntaxüberprüfung durchgeführt, deren Ergebnis im Fenster Meldungen angezeigt wird:
Ändern von Code außerhalb von UModel
Die Generierung von Programmcode ist erst der erste Schritt bei der Entwicklung Ihrer Software-Applikation oder Ihres Systems. In einem realen Szenario würde der Code mehrmals verändert, bevor das ein Programm mit allen seinen Features fertig entwickelt ist. Öffnen Sie die generierte Datei MyClass.java zu diesem Zweck in einem Text-Editor und fügen Sie eine neue Methode zur Klasse hinzu, wie unten gezeigt. Die Datei MyClass.java sollte nun folgendermaßen aussehen:
package com.nanonull; |
MyClass.java
Zusammenführen der Codeänderungen im Modell
Sie können den geänderten Code nun wieder im Modell zusammenführen. Gehen Sie folgendermaßen vor:
1.Klicken Sie im Menü Projekt auf Merge UModel-Projekt aus Programmcode (Drücken Sie alternativ dazu Ctrl + F12).
2.Lassen Sie die Standardsynchronisierungseinstellungen unverändert und klicken Sie auf OK. Es wird automatisch eine Codesyntaxüberprüfung durchgeführt, deren Ergebnis im Fenster Meldungen angezeigt wird:
Die Operation sum (die mit Reverse Engineering anhand des Codes generiert wurde) wird nun im Fenster "Modell-Struktur" angezeigt.