Das Ziel der Modellierung eines Systems ist, das Modell solange wie möglich unabhängig von der Zielsprache zu entwickeln und das Modell nicht abhängig von den "Fähigkeiten" der Zielsprache zu machen.
Die Code-Generierung stellt den Beginn der Implementierungsphase im Softwareentwicklungszyklus dar.
Spätestens in dieser Phase wird es notwendig, das erstellte Modell in ein Zielsystem umzusetzen.
Dabei übernimmt der Code-Generator, die Umsetzung der Modellnotation in die Zielsprachennotation, d.h. das erstellte Modell wird mit seinen Modellkomponenten in eine Zielsprache "konvertiert".
In dieser Situation entsteht das Problem, daß sich keine zielsprachenspezifische Informationen im erstellten Modell befinden, da diese Informationen aufgrund der Unabhängigkeit vom Zielsystem nicht benötigt werden.
Die Code-Generation-Properties beinhalten nun diese sprachspezifische Informationen, die für die Code-Generierung in die Zielsprache notwendig sind.
Die Code-Generation-Properties stellen also eine Verbindung zwischen der Modellnotation und der Zielsprache dar, denn mit Hilfe dieser Eigenschaften kann eingestellt werden, wie der Source-Code der Modellkomponenten in die Zielsprachennotation umgesetzt wird.
Es existieren Eigenschaften,
Im Abschnitt der Optionen und Einstellungen wurde bereits darauf hingewiesen, daß sich sogenannte Property-Sets abspeichern und laden lassen.
Diese Eigenschaften stellen zunächst die Voreinstellungen für eine Modellkomponente bei Ihrer Erstellung dar.
Im Spezifikationsfenster der Modellkomponenten können dann individuell die cg-Eigenschaften eingestellt werden, falls diese von den Voreinstellungen abweichen.
Im folgenden wird ein kleiner Ausschnitt über die Einstellmöglichkeiten der cg-Properties gegeben :
Die Code-Generierung wird über das Menü Tools-C++-Code Generation gestartet.
Vorher muß jedoch mindestens eine Modellkomponente ausgewählt werden, für die Source-Code generiert werden soll.
Diese Modellkomponente muß eine Klasse, ein Paket oder ein Modul sein.
Es erscheint ein Dialog-Fenster, in dem man den Fortschritt des Generierungsprozesses verfolgen kann. Außerdem wird angezeigt, wieviele Warnungen und Fehler sich in dem Modell befinden. Genaure Informationen zu den Warnungen und Fehlern erhält man in den Log-Fenster, in dem der Generierungsprozeß protokolliert wird.
Für die ausgewählte Komponente wird entsprechend der Modell-Eigenschaften, der Code-Generation-Eigenschaften und der Spezifikation Source-Code generiert.
Der C++-Code Generator erzeugt keine komplette Implementierung der Modellkomponente, sondern generiert lediglich das Gerüst für die Implementierung der ausgewählten Komponente.
Die erzeugten Source-Code-Dateien müssen also mit der Implementierung der einzelnen Methoden ergänzt werden.
Ausnahmen bilden hier die set- und get-Methoden für die Klassenattribute. Hierfür wird die Basis-Implementierung vorgenommen, falls dieses in den cg-Eigenschaften eingestellt wurde.
Modellinformationen, die nicht in C++-Code umgesetzt werden können, z.B. Dokumentationen zur Komponente, werden als strukturierter Kommentar in den Source-Code übernommen.
Das Modell wurde im component view" nicht in Subsysteme unterteilt.
In diesem Fall nimmt der C++-Code-Generator implizit an, daß das physische Modell dem logische Modell entspricht.
Das Modell wurde im component view" in Subsysteme unterteilt und die logischen Pakete wurde den Subsystemen zugeordnet.
Als Besonderheiten der erzeugten Dateien sind die Code-Bereiche hervorzuheben.
Sie sind als Kommentar
//## begin ... preserve=yes|no
//## end ....
gekennzeichnet.
Diese Code-Bereiche werden vor der Neugenerierung des Codes berücksichtigt. Ist ein Code-Bereich mit preserve=yes gekennzeichnet, so wird dieser bei der Neugenerierung nicht überschrieben.
Die Implementierungen sollten zwischen diesen gekennzeichneten Code-Bereichen vorgenommen werden.
Außerdem sollten keine Code-Bereiche manuell beim Editieren des Source-Codes gelöscht werden, sondern es reicht aus, wenn aus einem geschützten ein ungeschützer Code-Bereich durch Änderung des preserve-Statements durchgeführt wird.
Bei der Neugenerierung wird dieser Bereich dann gelöscht.
Der Generierungsprozeß wird über das Menü Tools - Generate DDL gestartet.
Über das Menü Browse-Browse DDL Skript kann die erzeugte DDL Skript-Datei angezeigt werden.
Rational Rose unterstützt die Generierung von SQL DDL Source Code für relationale Datenbanken der Hersteller
Die DDL Source Code Generierung kann mit den Einstellungen in den Projekteigenschaften (project properties) weiter angepaßt werden hinsichtlich
Das Ergebnis des Generierungsprozesses kann dann in die Datenbank importiert werden.
Am einfachsten wäre es, die persistenten Objekte in einem objektorientierten Datenbanksystem zu speichern, denn so ließen sich die persistenten Objekte 1:1 in ein objektorientiertes Datenbankschema transformieren. Die Entwicklung der objektorientierten Datenbanken befindet sich aber noch im Anfangsstadium.
(Laut neueren Nachrichten existiert bereits Rational Rose/Oracle 8, die wohl die Datenbankanbindung nicht mehr mit RDBMS, sondern mit OODBMS realisiert.)
Aus diesem Grunde versucht man weiterhin relationale Datenbanksysteme für die Speicherung der Daten für persistente Objekte zu nutzen.
Im Allgemeinen existieren 3 Strategien, das Objektmodell in ein Datenbankschema zu transformieren :
Die 3. Strategie wird in der Praxis häufig implementiert, da diese einen akzeptablen Kompromiß zwischen Implementierungsaufwand und Leistungsfähigkeit darstellt.
Im CASE-Tool Rational Rose hat man sich für die 2. Strategie zur Datenbankanbindung an ein RDBMS entschieden.
IDL = Interface Definition Language
Der Generierungsprozeß wird über das Menü Tools - Generate IDL gestartet.
Über das Menü Browse-Browse Header kann die erzeugte IDL Skript-Datei angezeigt werden.
Mit Hilfe des Rose IDL-Code Generator läßt sich IDL Source Code von Modellkomponenten für die Unterstützung von Broker-Systemen, wie z.B. CORBA, erzeugen.
Bei der Generierung werden Informationen, die nicht in IDL dargestellt werden können, als strukturierter Kommentar hinzugefügt.