Puede aplicarse el estereotipo cpp_namespace a un modelo. El atributo NamespaceName del estereotipo puede utilizarse para especificar el espacio de nombres de todos los elementos del modelo.
Los paquetes UML se convierten en carpetas en el proyecto de destino (y, del mismo modo, en carpetas en el sistema de archivos). La transformación coloca los elementos del paquete en la carpeta del paquete.
La transformación omite los paquetes que están marcados como paquetes de análisis. Un usuario marca un paquete como paquete de análisis aplicándole el estereotipo <<perspective>> o aplicando una palabra clave "analysis" o "Analysis".
De forma similar a lo que sucede con los modelos, es posible aplicar el estereotipo cpp_namespace a un paquete para especificar el espacio de nombres de todos los elementos del paquete. Actualmente, la transformación no proporciona soporte a los espacios de nombres anidados. El espacio de nombres especificado en el paquete interno sustituye el espacio de nombres especificado en el paquete externo.
Si los dos paquetes UML tienen el mismo nombre al mismo nivel de modelo, la transformación crea una única carpeta en el sistema de archivos y coloca el contenido de ambos paquetes UML en la misma.
Para las clases UML, la transformación genera un par de archivos: un archivo de cabecera y un archivo de cuerpo. En caso necesario, la transformación convierte el nombre de clase para que cumpla las reglas de C++ y se garantice que el nombre sea exclusivo. El archivo de cuerpo siempre contiene la directriz de inclusión para el archivo de cabecera correspondiente. Por omisión, el archivo de cabecera generado tiene el nombre de archivo <NombreClase>.h y el archivo de cuerpo generado tiene el nombre de archivo <NombreClase>.cpp.
Las relaciones de generalización y de asociación afectan la generación de código. Para obtener más información, consulte los apartados "Relaciones de asociación de UML " y "Relaciones de generalización de UML."
Pueden aplicarse los estereotipos siguientes a las clases UML:
· cpp_struct: Este estereotipo genera un struct C++ en vez de una clase.
· cpp_union: Este estereotipo genera una unión C++ en lugar de una clase C++. El perfil de C++ permite que una unión anidada sea anónima. Por omisión, no se genera ninguna operación estándar para las uniones.
· cpp_typedef: Este estereotipo genera una typedef de C++ en vez de una clase C++. Debe utilizarse el atributo "ImplementationType" del estereotipo para especificar la signatura del tipo que se está definiendo.
La transformación transforma una enumeración UML en "enum" de C++. El nombre de la enumeración C++ se toma de la enumeración UML. En caso necesario, la transformación convierte el nombre de la enumeración para que cumpla las normas de C++ y se garantice que el nombre sea exclusivo. La transformación genera los atributos UML como atributos C++ y aplica los valores por omisión a partir del modelo.
A diferencia de lo que sucede con las clases UML, la transformación sólo genera el archivo de cabecera para las enumeraciones.
La transformación en C++ transforma las interfaces UML en clases C++. Procesar interfaces es similar a procesar clases UML excepto que las operaciones UML se generan como puros métodos C++ virtuales. Procesar operaciones estándar (construtor por omisión, constructor de copia, destructor y operador de asignación) es igual para interfaces que para clases.
Las clases pueden tener interaces, enumeraciones y clases anidadasLa transformación genera los objetos anidados de forma similar a como lo hace con sus homólogos no anidados. Sin embargo, la transformación no crea archivos de cabecera y de cuerpo independientes para los objetos anidados; los añade a los archivos de cabecera y de cuerpo de la clase que los contiene.
Los objetos anidados también pueden presentar estas diferencias:
· El rastreo de la visibilidad de los elementos anidados se realiza en los padres de los mismos
· Las directrices de inclusión de los elementos anidados se añaden a las directrices de inclusión de las clases que los contienen
· El cuerpo de las operaciones de los elementos anidados lleva como prefijo el nombre de las clases que los contienen
· Las definiciones de los atributos estáticos para los elementos anidados también incluyen el nombre de las clases que los contienen