Sie können das Stereotyp "cpp_namespace" auf ein Modell anwenden. Sie können das Attribut "NamespaceName" des Stereotyps verwenden, um einen Namespace für alle Elemente im Modell anzugeben.
UML-Pakete werden zu Ordnern im Zielprojekt (und damit auch zu Ordnern im Dateisystem). Bei der Umsetzung werden die Elemente des Pakets in den Paketordner platziert.
Bei der Umsetzung werden Pakete ignoriert, die als Analysepakte markiert wurden. Ein Benutzer kann ein Paket als Analysepaket markieren, indem er das Stereotyp <<perspective>> darauf anwendet oder das Schlüsselwort "analysis" oder "Analysis" verwendet.
Ähnlich wie bei Modellen können Sie das Stereotyp "cpp_namespace" auch auf Pakete anwenden, um den Namespace für alle Elemente im Paket anzugeben. Die Umsetzung unterstützt gegenwärtig noch keine verschachtelten Namespaces. Der Namespace, der im inneren Paket angegeben ist, überlagert den Namespace, der im äußeren Paket angegeben ist.
Wenn zwei UML-Pakete auf derselben Modellebene denselben Namen haben, erstellt die Umsetzung nur einen Ordner im Dateisystem und speichert den Inhalt beider UML-Pakete in diesem Ordner.
Die Umsetzung generiert für UML-Klassen zwei Dateien: eine Headerdatei und eine Hauptteildatei. Bei Bedarf wandelt die Umsetzung den Namen der Klasse so ab, dass er den Regeln von C++ entspricht und eindeutig ist. Die Hauptteildatei enthält immer die "include"-Anweisung für die zugehörige Headerdatei. Standardmäßig erhält die generierte Headerdatei den Dateinamen <KlassenName>.h und die generierte Hauptteildatei den Dateinamen <KlassenName>.cpp.
Generalisierungs- und Assoziationsbeziehungen wirken sich auf die Codegenerierung aus. Weitere Informationen dazu finden Sie in den Abschnitten "UML- Assoziationsbeziehungen" und "UML- Generalisierungsbeziehungen".
Sie können folgende Stereotype auf UML-Klassen anwenden:
· cpp_struct: Dieses Stereotyp generiert anstelle einer Klasse ein C++-Struct.
· cpp_union: Dieses Stereotyp generiert eine C++-Union anstelle einer C++-Klasse. Das C++-Profil erlaubt auch, dass eine verschachtelte Union anonym ist. Standardmäßig werden für Unions keine Standardoperationen generiert.
· cpp_typedef: Dieses Stereotyp generiert ein C++-typedef anstelle einer C++-Klasse. Sie sollten das Attribut "ImplementationType" dieses Stereotyps verwenden, um die Signatur des Typs anzugeben, der definiert wird.
Die Umsetzung setzt UML-Aufzählungen in C++-"enum" um. Der Name der C++-Aufzählung wird von der UML-Aufzählung übernommen. Bei Bedarf wandelt die Umsetzung den Namen der Aufzählung so ab, dass er den Regeln von C++ entspricht und eindeutig ist. Die Umsetzung generiert UML-Attribute als C++-Attribute und wendet die Standardwerte aus dem Modell an.
Im Gegensatz zu UML-Klassen werden für Aufzählungen bei der Umsetzung nur Headerdateien generiert.
Bei der C++-Umsetzung werden UML-Schnittstellen in C++-Klassen umgesetzt. Die Verarbeitung der Schnittstellen entspricht im Wesentlichen der Verarbeitung der UML-Klassen, UML-Operationen werden jedoch als reine virtuelle C++-Methoden generiert. Die Verarbeitung von Standardoperationen (Standardkonstruktor, Copy-Konstruktor, Destruktor und Zuordnungsoperator) bei Schnittstellen entspricht der Verarbeitung dieser Operationen bei Klassen.
Klassen können über verschachtelte Klassen, Aufzählungen und Schnittstellen verfügen. Bei der Umsetzung werden verschachtelte Objekte ähnlich wie nicht verschachtelte Objekte generiert. Es werden bei der Umsetzung aber keine eigenen Header- und Hauptteildateien für verschachtelte Objekte erzeugt, sondern die Header- und Hauptteildateien der Klasse, in der sie enthalten sind, ergänzt.
Bei verschachtelten Objekten sind darüber hinaus folgende Unterschiede zu beachten:
· Die Sichtbarkeit der verschachtelten Elemente wird in den übergeordneten Elementen protokolliert.
· "Include"-Anweisungen für verschachtelte Elemente werden zu den "include"-Anweisungen der Klassen, in denen sie enthalten sind, hinzugefügt.
· Operationshauptteile für verschachtelte Elemente erhalten als Präfix die Namen der Klassen, in denen sie enthalten sind.
· Definitionen von statischen Attributen für verschachtelte Elemente enthalten auch die Namen der Klassen, in denen sie enthalten sind.