El CTF consiste en una gran cantidad de plantillas base. Cada plantilla base transforma los aspectos particulares del UML a las partes correspondientes de los lenguajes orientados a objetos.
La siguiente tabla lista y describe brevemente las plantillas base que se usan en el CTF.
Plantilla
|
Descripción
|
Attribute
|
Plantilla de alto nivel para generar variables miembros desde los atributos UML
|
Attribute Declaration
|
Usada por la plantilla Attribute para generar la declaración de las variables miembro
|
Attribute Notes
|
Usada por la plantilla Attribute para generar notas de variables miembro
|
Class
|
Plantilla de alto nivel para generar clases desde las clases UML
|
Class Base
|
Usada por la plantilla Class para generar un nombre de clase base en la lista de herencia de una clase derivada
|
Class Body
|
Usada por la plantilla Class para generar el cuerpo de una clase
|
Class Declaration
|
Usada por la plantilla Class para generar la declaración de una clase
|
Class Interface
|
Usada por la plantilla Class para generar un nombre de interfaz en la lista de herencia de una clase derivada
|
Class Notes
|
Usada por la plantilla Class para generar las notas de las clases
|
File
|
Plantilla de alto nivel para generar el archivo fuente. Para lenguajes tales como C++ corresponde al archivo de cabecera.
|
Import Section
|
Usado en la plantilla File para generar dependencias externas
|
Linked Attribute
|
Plantilla de alto nivel para generar los atributos derivados desde las asociaciones UML.
|
Linked Attribute Notes
|
Usado por la plantilla Linked Attribute para generar las notas de los atributos
|
Linked Attribute Declaration
|
Usada por la plantilla Linked Attribute para generar la declaración de los atributos
|
Linked Class Base
|
Usada por una plantilla de Clase para generar un nombre de clase base en la lista de herencia de una clase derivada para un elemento de clase en el modelo que es un padre de la clase actual.
|
Linked Class Interface
|
Usada por una plantilla de Clase para generar un nombre de interfaz en la lista de herencia de una clase derivada para un elemento de interfaz en el modelo que es un padre de la clase actual.
|
Namespace
|
Plantilla de alto nivel para generar Espacios de Nombres para los paquetes UML (aunque no todos los lenguajes tienen espacios de nombres, esta plantilla se puede usar para generar una construcción equivalente, tal como los packages en Java.)
|
Namespace Body
|
Usada por la plantilla Namespace para generar el cuerpo de un espacio de nombres
|
Namespace Declaration
|
Usada por la plantilla Namespace para generar la declaración de un espacio de nombres
|
Operation
|
Plantilla de alto nivel para generar las operaciones desde las operaciones de las clases UML
|
Operation Body
|
Usada por la plantilla Operation para generar el cuerpo de las operaciones UML
|
Operation Declaration
|
Usada por la plantilla Operation para generar la declaración de las operaciones
|
Operation Notes
|
Usada por la plantilla Operation para generar la documentación para una operación
|
Parameter
|
Usada por la plantilla Operation Declaration para generar los parámetros
|
La segunda tabla lista las plantillas que se usan para la generación de código para los lenguajes que tienen secciones separadas de interfaz y de implementación.
Plantilla
|
Descripción
|
Class Impl
|
Plantilla de alto nivel para generar la implementación de una clase
|
Class Body Impl
|
Usada por la plantilla Class Impl para generarla implementación de los miembros de las clases.
|
File Impl
|
Plantilla de alto nivel para generar el archivo de implementación.
|
File Notes Impl
|
Usada por la plantilla the File Impl para generar notas en el archivo fuente
|
Import Section Impl
|
Usada por la plantilla the File Impl para generar las dependencias externas
|
Operation Impl
|
Plantilla de alto nivel para generar las operaciones desde las operaciones de las clases UML
|
Operation Body Impl
|
Usada por la plantilla Operation para generar el cuerpo de las operaciones UML
|
Operation Declaration Impl
|
Usada por la plantilla Operation para generar la declaración de operaciones
|
Operation Notes Impl
|
Usada por la plantilla Operation para generar la documentación para una operación
|
Las plantillas base forman una jerarquía, que varía levemente a través de los diferentes lenguajes de programación. Abajo se muestra una jerarquía de típica plantilla relevante a un lenguaje como C# o Java (que no tiene archivos de cabecera). En esta figura modelamos las plantillas como clases (en realidad ellas sólo son texto plano). Esta jerarquía sería levemente más complicada para lenguajes como C++ y Delphi, que tienen plantillas de implementación separadas.
Cada una de estas plantillas base necesita ser especializada para usarse en ingeniería de código. En particular, cada plantilla se especializa para el lenguaje que soporta (o para los "productos"). Por ejemplo, hay una plantilla ClassBody definida para C++, y otra para C#, y otra aun para Java y así sucesivamente. Al especializar las plantillas, podemos personalizar el código que se genera para la entidad UML correspondiente.
Una vez que se especializaron las plantillas base para un lenguaje dado, se pueden especializar un poco más en base a:
• | El estereotipo de una clase |
• | El estereotipo de una característica (donde la característica puede ser una operación o un atributo) |
Este tipo de especialización permite a una operación C#, por ejemplo, que está estereotipada como «property» tener una plantilla OperationBody diferente que la de una operación ordinaria. La plantilla OperationBody se puede especializar aun más, basada en el estereotipo de la clase.
Tenga en cuenta: El modelo de clases anterior muestra la jerarquía de las plantillas de Generación de Código para un lenguaje tal como C# o Java. Los vínculos de agregación denotan referencias entre plantillas.
|