Variables
Los archivos SPL importantes exigen el uso de variables. Algunas variables vienen predefinidas por el generador de código y se pueden crear variables nuevas con solo asignarles valores.
El carácter $ se usa cuando se declara o usa una variable y un nombre de variable siempre tiene el prefijo $. Los nombres de variable distinguen entre mayúsculas y minúsculas.
Tipos de variables:
•entero, que también se usa como binario, siendo 0 equivalente a false y cualquier otro valor equivale a true
•cadena de texto
•objeto, que viene dado por UModel
•iterador, ver instrucción foreach
El tipo de variable se declara en la primera asignación de valor:
[$x = 0] |
ahora x es un entero.
[$x = "cadenaDePrueba"] |
ahora x es una cadena.
Cadenas
Las constantes de cadena siempre aparecen entre comillas dobles, como en el ejemplo anterior. \n y \t dentro de comillas dobles equivalen a una línea nueva y a una tabulación, respectivamente. \" es una comilla doble literal y \\ es una barra diagonal inversa. Las constantes de cadena también puede abarcar varias líneas.
Para la concatenación de cadenas se usa el carácter &:
[$BasePath = $outputpath & "/" & $JavaPackageDir] |
Objetos
Los objetos representan la información que contiene el proyecto de UModel. Los objetos tienen propiedades, a las que puede acceder con el operador . En SPL no puede crear objetos nuevos (vienen predefinidos por el generador de código y se derivan del código de entrada), pero se pueden asignar objetos a variables.
Ejemplo:
class [=$class.Name] |
Este ejemplo reproduce la palabra "class" seguida de un espacio y el valor de la propiedad Name del objeto $class.
La tabla que aparece a continuación muestra la correspondencia entre elementos UML y propiedades SPL, junto con una breve descripción.
Variables predefinidas
elemento UML | Propiedad SPL | Multiplicidad | Atributo UML / | Atributo UModel / Asociación | Descripción |
---|---|---|---|---|---|
CaracterísticaDeComportamiento | isAbstract | isAbstract:Boolean | |||
CaracterísticaDeComportamiento | raisedException | * | raisedException:Type | ||
CaracterísticaDeComportamiento | ownedParameter | * | ownedParameter:Parameter | ||
ClasificadorConComportamiento | interfaceRealization | * | interfaceRealization:InterfaceRealization | ||
Clase | ownedOperation | * | ownedOperation:Operation | ||
Clase | nestedClassifier | * | nestedClassifier:Classifier | ||
Clasificador | namespace | * | namespace:Package | packages with code language <<namespace>> set | |
Clasificador | rootNamespace | * | project root namespace:String | VB only - root namespace | |
Clasificador | generalization | * | generalization:Generalization | ||
Clasificador | isAbstract | isAbstract:Boolean | |||
ParámetroDePlantillaDeClasificador | constrainingClassifier | * | constrainingClassifier | ||
Comentario | body | body:String | |||
TipoDeDatos | ownedAttribute | * | ownedAttribute:Property | ||
TipoDeDatos | ownedOperation | * | ownedOperation:Operation | ||
Elemento | kind | kind:String | |||
Elemento | owner | 0..1 | owner:Element | ||
Elemento | appliedStereotype | * | appliedStereotype:StereotypeApplication | applied stereotypes | |
Elemento | ownedComment | * | ownedComment:Comment | ||
ImportaciónDeElemento | importedElement | 1 | importedElement:PackageableElement | ||
Enumeración | ownedLiteral | * | ownedLiteral:EnumerationLiteral | ||
Enumeración | nestedClassifier | * | nestedClassifier::Classifier | ||
Enumeración | interfaceRealization | * | interfaceRealization:Interface | ||
LiteralDeEnumeración | ownedAttribute | * | ownedAttribute:Property | ||
LiteralDeEnumeración | ownedOperation | * | ownedOperation:Operation | ||
LiteralDeEnumeración | nestedClassifier | * | nestedClassifier:Classifier | ||
Característica | isStatic | isStatic:Boolean | |||
Generalización | general | 1 | general:Classifier | ||
Interfaz | ownedAttribute | * | ownedAttribute:Property | ||
Interfaz | ownedOperation | * | ownedOperation:Operation | ||
Interfaz | nestedClassifier | * | nestedClassifier:Classifier | ||
RealizaciónDeInterfaz | contract | 1 | contract:Interface | ||
ElementoMultiplicidad | lowerValue | 0..1 | lowerValue:ValueSpecification | ||
ElementoMultiplicidad | upperValue | 0..1 | upperValue:ValueSpecification | ||
ElementoConNombre | name | name:String | |||
ElementoConNombre | visibility | visibility:VisibilityKind | |||
ElementoConNombre | isPublic | isPublic:Boolean | visibility <public> | ||
ElementoConNombre | isProtected | isProtected:Boolean | visibility <protected> | ||
ElementoConNombre | isPrivate | isPrivate:Boolean | visibility <private> | ||
ElementoConNombre | isPackage | isPackage:Boolean | visibility <package> | ||
ElementoConNombre | namespacePrefix | namespacePrefix:String | XSD only - namespace prefix when exists | ||
ElementoConNombre | parseableName | parseableName:String | CSharp, VB only - name with escaped keywords (@) | ||
EspacioDeNombres | elementImport | * | elementImport:ElementImport | ||
Operación | ownedReturnParameter | 0..1 | ownedReturnParameter:Parameter | parameter with direction return set | |
Operación | type | 0..1 | type | type of parameter with direction return set | |
Operación | ownedOperationParameter | * | ownedOperationParameter:Parameter | all parameters excluding parameter with direction return set | |
Operación | implementedInterface | 1 | implementedInterface:Interface | CSharp only - the implemented interface | |
Operación | ownedOperationImplementations | * | implementedOperation:OperationImplementation | VB only - the implemented interfaces/operations | |
ImplementaciónDeOperación | implementedOperationOwner | 1 | implementedOperationOwner:Interface | interface implemented by the operation | |
ImplementaciónDeOperación | implementedOperationName | name:String | name of the implemented operation | ||
ImplementaciónDeOperación | implementedOperationParseableName | parseableName:String | name of the implemented operation with escaped keywords | ||
Paquete | namespace | * | namespace:Package | packages with code language <<namespace>> set | |
ElementoEmpaquetable | owningPackage | 0..1 | owningPackage | set if owner is a package | |
ElementoEmpaquetable | owningNamespacePackage | 0..1 | owningNamespacePackage:Package | owning package with code language <<namespace>> set | |
Parámetro | direction | direction:ParameterDirectionKind | |||
Parámetro | isIn | isIn:Boolean | direction <in> | ||
Parámetro | isInOut | isInOut:Boolean | direction <inout> | ||
Parámetro | isOut | isOut:Boolean | direction <out> | ||
Parámetro | isReturn | isReturn:Boolean | direction <return> | ||
Parámetro | isVarArgList | isVarArgList:Boolean | true if parameter is a variable argument list | ||
Parámetro | defaultValue | 0..1 | defaultValue:ValueSpecification | ||
Propiedad | defaultValue | 0..1 | defaultValue:ValueSpecification | ||
ElementoRedefinible | isLeaf | isLeaf:Boolean | |||
Slot | name | name:String | name of the defining feature | ||
Slot | values | * | value:ValueSpecification | ||
Slot | value | value:String | value of the first value specification | ||
AplicaciónEstereotipo | name | name:String | name of applied stereotype | ||
AplicaciónEstereotipo | taggedValue | * | taggedValue:Slot | first slot of the instance specification | |
CaracterísticaEstructural | isReadOnly | isReadOnly | |||
ClasificadorEstructurado | ownedAttribute | * | ownedAttribute:Property | ||
EnlaceDePlantilla | signature | 1 | signature:TemplateSignature | ||
EnlaceDePlantilla | parameterSubstitution | * | parameterSubstitution:TemplateParameterSubstitution | ||
ParámetroDePlantilla | paramDefault | paramDefault:String | template parameter default value | ||
ParámetroDePlantilla | ownedParameteredElement | 1 | ownedParameteredElement:ParameterableElement | ||
SustituciónDeParámetroDePlantilla | parameterSubstitution | parameterSubstitution:String | Java only - code wildcard handling | ||
SustituciónDeParámetroDePlantilla | parameterDimensionCount | parameterDimensionCount:Integer | code dimension count of the actual parameter | ||
SustituciónDeParámetroDePlantilla | actual | 1 | OwnedActual:ParameterableElement | ||
SustituciónDeParámetroDePlantilla | formal | 1 | formal:TemplateParameter | ||
FirmaDePlantilla | template | 1 | template:TemplateableElement | ||
FirmaDePlantilla | ownedParameter | * | ownedParameter:TemplateParameter | ||
ElementoQueSePuedeConvertirEnPlantillas | isTemplate | isTemplate:Boolean | true if template signature set | ||
ElementoQueSePuedeConvertirEnPlantillas | ownedTemplateSignature | 0..1 | ownedTemplateSignature:TemplateSignature | ||
ElementoQueSePuedeConvertirEnPlantillas | templateBinding | * | templateBinding:TemplateBinding | ||
Tipo | typeName | * | typeName:PackageableElement | qualified code type names | |
ElementoConTipo | type | 0..1 | type:Type | ||
ElementoConTipo | postTypeModifier | postTypeModifier:String | postfix code modifiers | ||
EspecificaciónDeValor | value | value:String | string value of the value specification |
Agregar un prefijo a los atributos de una clase durante la generación de código
Quizás sea necesario añadir el prefijo "m_" a todos los atributos nuevos del proyecto.
Todos los elementos de código nuevos se escriben usando las plantillas SPL. Por ejemplo, en el archivo Attribute.spl de la carpeta UModelSPL\C#[Java]\Default puede cambiar cómo se escriben los nombres con una simple operación de búsqueda y reemplazo. En concreto, puede remplazar
write $Property.name |
con
write "m_" & $Property.name |
Además, recomendamos actualizar inmediatamente el modelo con el código tras la generación de código. Esto garantiza que el código y el modelo estén sincronizados.
Nota: | Antes de modificarlas, recuerde copiar las plantillas SPL en un directorio de nivel superior (es decir, justo encima del directorio predeterminado UModelSPL\C#). Esto evita que las plantillas se sobrescriban cuando se instale una versión nueva de UModel. Compruebe que está marcada la casilla Las definidas por el usuario reemplazan las predeterminadas de la pestaña Sincronizar el código con el modelo del cuadro de diálogo "Configurar sincronización". |
Plantillas SPL
Por cada proyecto de UModel se pueden especificar plantillas SPL distintas, haciendo clic en la opción de menú Proyecto | Configuración del proyecto (tal y como muestra el cuadro de diálogo). También puede usar rutas de acceso relativas. Las plantillas que no se encuentren en el directorio indicado se buscan en el directorio predeterminado local.
Objetos globales
$Options | un objeto que almacena opciones globales: |
generateComments:bool genera comentarios en la documentación (true/false) | |
$Indent | una cadena utilizada para aplicar sangría al código generado y que representa el nivel de anidamiento actual |
$IndentStep | una cadena utilizada para aplicar sangría al código generado y que representa un nivel de anidamiento |
$NamespacePrefix | sólo en XSD, el prefijo de espacio de nombres de destino, si existe |
Rutinas de manipulación de cadenas
integer Compare(s) |
El valor devuelto indica la relación lexicográfica entre la cadena y s (distingue entre mayús/minús):
<0: | la cadena es menor que s |
0: | la cadena es idéntica a s |
>0: | la cadena es mayor que s |
integer CompareNoCase(s) |
El valor devuelto indica la relación lexicográfica entre la cadena y s (minúsculas entre mayús/minús):
<0: | la cadena es menor que s |
0: | la cadena es idéntica a s |
>0: | la cadena es mayor que s |
integer Find(s) |
Busca la primera aparición de la subcadena s. Devuelve el índice basado en cero del primer carácter de s o -1 si s no se encuentra.
string Left(n) |
Devuelve los primeros n caracteres de la cadena.
integer Length() |
Devuelve la longitud de la cadena.
string MakeUpper() |
Devuelve una cadena en mayúsculas.
string MakeUpper(n) |
Devuelve la cadena con los primeros n caracteres en mayúsculas.
string MakeLower() |
Devuelve una cadena en minúsculas.
string MakeLower(n) |
Devuelve la cadena con los primeros n caracteres en minúsculas.
string Mid(n) |
Devuelve la cadena empezando por la posición de índice basado en cero n
string Mid(n,m) |
Devuelve la cadena empezando por la posición de índice basado en cero n y la longitud m
string RemoveLeft(s) |
Devuelve la cadena sin la subcadena s si Left( s.Length() ) es igual a la subcadena s.
string RemoveLeftNoCase(s) |
Devuelve la cadena sin la subcadena s si Left( s.Length() ) es igual a la subcadena s (no distingue entre mayús/minús).
string RemoveRight(s) |
Devuelve la cadena sin la subcadena s si Right( s.Length() ) es igual a la subcadena s.
string RemoveRightNoCase(s) |
Devuelve la cadena sin la subcadena s si Right( s.Length() ) es igual a la subcadena s (no distingue entre mayús/minús).
string Repeat(s,n) |
Devuelve la cadena que contiene la subcadena s repetida n veces.
string Right(n) |
Devuelve los últimos n caracteres de la cadena.