Beispiel: Generieren von C++-Code

www.altova.com Dieses Kapitel drucken Vorherige Seite Eine Ebene nach oben Nächste Seite

Startseite >  Projekte und Code Engineering > Generieren von Programmcode >

Beispiel: Generieren von C++-Code

In diesem Beispiel wird gezeigt, wie Sie mit UModel C++-Code generieren. Zuerst werden wir ein einfaches UModel-Projekt erstellen, es für die Codegenerierung konfigurieren und anschließend den eigentlichen Code generieren.

 

Erstellen eines neue UModel-Projekts und seiner Struktur

Klicken Sie im Menü Datei auf Neu. Daraufhin wird ein leeres Projekt mit zwei Standardpaketen ("Root" und "Component View") erstellt. Klicken Sie als nächstes auf das "Root"-Paket und erstellen Sie einige weitere Pakete, wie unten gezeigt. (Wenn Sie mit der grafischen Benutzeroberfläche von UModel noch nicht vertraut sind, lesen Sie zuerst die Kapitel UModel Tutorial und Anleitung zur Modellierung von....)

um_cpp_codegen01

 

In diesem Beispiel dient das Paket "Design-Ansicht" als Container für alles, was das Design Ihres Modells betrifft (z.B. Klassen und Klassendiagramme), während das Paket "MeinNamespace" als Namespace für alle Klassen, die erstellt werden sollen, verwendet wird. Die Paketstruktur ist jedoch nicht vorgeschrieben, Sie können Ihre Pakete bei Bedarf auch anders strukturieren.

 

Klicken Sie mit der rechten Maustaste auf das Paket "Design-Ansicht" und wählen Sie im Kontextmenü den Befehl Code Engineering | Als C++ Namespace Root definieren. Wenn Sie gefragt werden, ob das C++-Profil auf das Paket angewendet werden soll, klicken Sie zur Bestätigung auf OK. Das in UModel vordefinierte C++-Profil wird nun in das Projekt inkludiert.

um_cpp_codegen02

 

Klicken Sie als nächstes auf das Paket "MeinNamespace" und aktivieren Sie im Fenster "Eigenschaften" das Kontrollkästchen <<namespace>>. Dadurch wird das "namespace"-Stereotyp auf das Paket angewendet und sein Symbol ändert sich in ic-code-pack. Sie können jetzt unter diesem Namespace Klassen erstellen.

 

Erstellen von C++-Klassen

Sie können Klassen entweder direkt über das Fenster "Modell-Struktur" oder über ein Klassendiagramm erstellen. In diesem Beispiel werden wir über das Fenster "Diagramm-Struktur" ein Klassendiagramm erstellen, wie unten gezeigt.

 

um_cpp_codegen03

 

In diesem Beispiel wird vorausgesetzt, dass alle Ihre Klassen unter dem Namespace "MeinNamespace" generiert werden. Wenn Sie daher aufgefordert werden, einen Owner für das Diagramm auszuwählen, wählen Sie das Paket "MeinNamespace" (wie unten gezeigt) aus. Wenn Sie ein anderes Paket auswählen, gehören alle Elemente, die Sie zum Diagramm hinzufügen zum selben Paket wie das Diagramm (was nicht notwendigerweise beabsichtigt ist).

 

um_cpp_codegen04

 

Erstellen Sie als nächstes die Klassen, Typen und andere in Ihrem Modell benötigte Elemente, z.B. ein einfaches Diagramm, in dem eine Klasse namens Car dargestellt wird:

um_cpp_codegen05

 

Beachten Sie im Diagramm oben die Enumeration ColorType und den Datentyp string. Diese Typen sind keine C++-Grundtypen, daher sind sie im C+-Profil, das in UModel vordefiniert ist, nicht enthalten. Aus diesem Grund müssen sie im Modell explizit mit Hilfe der Symbolleisten-Schaltflächen Enumeration um_ic_enumeration bzw. Datentyp um_ic_datatype erstellt werden. Im Gegensatz dazu stehen Grundtypen (wie int oder bool) automatisch während der Eingabe zur Auswahl, siehe auch Typ-Autokomplettierung in Klassen. Eine schrittweise Anleitung zum Erstellen von Klassen und ihren Mitgliedern finden Sie in den Kapiteln Klassendiagramme und Anleitung zur Modellierung von....

 

Konfigurieren des Projektcodes für das Code Engineering

Klicken Sie mit der rechten Maustaste auf das Paket "Component View" und fügen Sie eine neue Komponente um_ic_component (d.h. eine Software-Komponente) hinzu. Klicken Sie auf die neue Software-Komponente und definieren Sie im Fenster "Eigenschaften" die folgenden Eigenschaften:

 

Codesprache der Komponente (in diesem Beispiel "C++ 14")
Codegenerierungsverzeichnis (in diesem Beispiel "C:\codegen").

 

Stellen Sie außerdem sicher, das die Eigenschaft "für Code-Engineering verwenden" auf True gesetzt ist.

um_cpp_codegen06

 

Erstellen Sie als nächstes zwischen den Klassen, anhand welcher C++-Code generiert werden muss (in diesem Beispiel Car und ColorType) und der Code Engineering-Komponente eine Komponentenrealisierungsbeziehung um_ic_realization . Sie können dies entweder von einem Komponentendiagramm aus oder auf die folgende, einfachere Weise tun:

 

Klicken Sie im Fenster "Modell-Struktur" auf die Klasse, die von der Komponente realisiert werden soll (in diesem Beispiel Car und ColorType) und ziehen Sie sie mit der Maus auf die Code Engineering-Komponente (Komponente1).

um_cpp_codegen07

Führen Sie denselben Schritt auch für die Klasse ColorType durch.

 

Anmerkung: Falls Sie vergessen haben, für eine Klasse eine Komponentenrealisierungsbeziehung um_ic_realization zu erstellen, generiert UModel dennoch die entsprechende Codedatei, gibt im Fenster "Meldungen" aber Warnungen aus. Diese Einstellung kann über Extras | Optionen | Register Code Engineering konfiguriert werden (Name des Kontrollkästchens ist Fehlende Komponentenrealisierungen generieren).

 

Generieren von C++-Code

Sie können den eigentlichen C++-Code nun generieren. Gehen Sie dazu folgendermaßen vor:

 

1.Klicken Sie im Menü Projekt auf Merge Programmcode aus UModel-Projekt. (oder drücken Sie alternativ dazu F12). Daraufhin wird ein Dialogfeld angezeigt, in dem Sie einstellen können, ob Änderungen im Modell mit denjenigen im Code zusammengeführt oder diese gegebenenfalls überschreiben sollen. Die Codeeinstellungen können für dieses Beispiel unverändert übernommen werden, da der Code hier zum ersten Mal generiert wird. Nähere Informationen dazu finden Sie unter Codesynchronisierungseinstellungen.
2.Klicken Sie auf OK. Das Ergebnis des Code Engineering wird im Fenster "Meldungen" angezeigt.

um_cpp_codegen08


© 2019 Altova GmbH