Variablen
Jede etwas komplexere SPL-Datei enthält Variablen. Einige Variablen sind vom Code Generator vordefiniert. Sie können jederzeit neue Variablen erstellen, indem Sie diesen Werte zuweisen.
Das $-Zeichen wird zur Deklarierung oder Verwendung einer Variablen verwendet. Vor der Variable muss immer ein $ stehen. Bei Variablennamen muss die Groß- und Kleinschreibung beachtet werden.
Variablentypen:
•Integer - wird auch als Boolescher Wert verwendet, wobei 0 false ist und alle anderen Werte true.
•String
•Objekt - wird von UModel bereitgestellt
•Iterator (siehe foreach-Anweisung)
Variablentypen werden durch die erste Zuweisung deklariert.
[$x = 0] |
x ist nun ein Integer.
[$x = "teststring"] |
x wird nun als String behandelt.
Strings
String-Konstanten müssen wie im oben gezeigten Beispiel immer innerhalb von doppelten Anführungszeichen stehen. \n und \t innerhalb von doppelten Anführungszeichen werden als neue Zeile und Tabulator interpretiert, \" ist ein literales doppeltes Anführungszeichen und \\ ist ein umgekehrter Schrägstrich. String-Konstanten können auch mehrere Zeilen einnehmen.
Bei der Verkettung von Strings wird das & Zeichen verwendet.
[$BasePath = $outputpath & "/" & $JavaPackageDir] |
Objekte
Objekte stehen für die Informationen, die im UModel-Projekt enthalten sind. Objekte haben Eigenschaften, die über den . Operator aufgerufen werden können. In SPL können keine neuen Objekte erstellt werden (sie werden durch den Code Generator vordefiniert, aus der Input-Komponente abgeleitet). Sie können Objekte jedoch Variablen zuweisen.
Beispiel:
class [=$class.Name] |
In diesem Beispiel wird das Wort "class" ausgegeben, gefolgt von einem Leerzeichen und dem Wert der Eigenschaft Name des Objekts $class.
In der folgenden Tabelle sehen Sie die Beziehung zwischen UML-Elementen und ihren SPL-Entsprechungen sowie eine kurze Beschreibung dazu.
Vordefinierte Variablen
UML-Element | SPL-Eigenschaft | Multiplizität | UML-Attribut / | UModel-Attribut / Assoziation | Beschreibung |
---|---|---|---|---|---|
BehavioralFeature | isAbstract | isAbstract:Boolean | |||
BehavioralFeature | raisedException | * | raisedException:Type | ||
BehavioralFeature | ownedParameter | * | ownedParameter:Parameter | ||
BehavioredClassifier | interfaceRealization | * | interfaceRealization:InterfaceRealization | ||
Class | ownedOperation | * | ownedOperation:Operation | ||
Class | nestedClassifier | * | nestedClassifier:Classifier | ||
Classifier | namespace | * | namespace:Package | packages with code language <<namespace>> set | |
Classifier | rootNamespace | * | project root namespace:String | VB only - root namespace | |
Classifier | generalization | * | generalization:Generalization | ||
Classifier | isAbstract | isAbstract:Boolean | |||
ClassifierTemplateParameter | constrainingClassifier | * | constrainingClassifier | ||
Comment | body | body:String | |||
DataType | ownedAttribute | * | ownedAttribute:Property | ||
DataType | ownedOperation | * | ownedOperation:Operation | ||
Element | kind | kind:String | |||
Element | owner | 0..1 | owner:Element | ||
Element | appliedStereotype | * | appliedStereotype:StereotypeApplication | applied stereotypes | |
Element | ownedComment | * | ownedComment:Comment | ||
ElementImport | importedElement | 1 | importedElement:PackageableElement | ||
Enumeration | ownedLiteral | * | ownedLiteral:EnumerationLiteral | ||
Enumeration | nestedClassifier | * | nestedClassifier::Classifier | ||
Enumeration | interfaceRealization | * | interfaceRealization:Interface | ||
EnumerationLiteral | ownedAttribute | * | ownedAttribute:Property | ||
EnumerationLiteral | ownedOperation | * | ownedOperation:Operation | ||
EnumerationLiteral | nestedClassifier | * | nestedClassifier:Classifier | ||
Feature | isStatic | isStatic:Boolean | |||
Generalization | general | 1 | general:Classifier | ||
Interface | ownedAttribute | * | ownedAttribute:Property | ||
Interface | ownedOperation | * | ownedOperation:Operation | ||
Interface | nestedClassifier | * | nestedClassifier:Classifier | ||
InterfaceRealization | contract | 1 | contract:Interface | ||
MultiplicityElement | lowerValue | 0..1 | lowerValue:ValueSpecification | ||
MultiplicityElement | upperValue | 0..1 | upperValue:ValueSpecification | ||
NamedElement | name | name:String | |||
NamedElement | visibility | visibility:VisibilityKind | |||
NamedElement | isPublic | isPublic:Boolean | visibility <public> | ||
NamedElement | isProtected | isProtected:Boolean | visibility <protected> | ||
NamedElement | isPrivate | isPrivate:Boolean | visibility <private> | ||
NamedElement | isPackage | isPackage:Boolean | visibility <package> | ||
NamedElement | namespacePrefix | namespacePrefix:String | XSD only - namespace prefix when exists | ||
NamedElement | parseableName | parseableName:String | CSharp, VB only - name with escaped keywords (@) | ||
Namespace | elementImport | * | elementImport:ElementImport | ||
Operation | ownedReturnParameter | 0..1 | ownedReturnParameter:Parameter | parameter with direction return set | |
Operation | type | 0..1 | type | type of parameter with direction return set | |
Operation | ownedOperationParameter | * | ownedOperationParameter:Parameter | all parameters excluding parameter with direction return set | |
Operation | implementedInterface | 1 | implementedInterface:Interface | CSharp only - the implemented interface | |
Operation | ownedOperationImplementations | * | implementedOperation:OperationImplementation | VB only - the implemented interfaces/operations | |
OperationImplementation | implementedOperationOwner | 1 | implementedOperationOwner:Interface | interface implemented by the operation | |
OperationImplementation | implementedOperationName | name:String | name of the implemented operation | ||
OperationImplementation | implementedOperationParseableName | parseableName:String | name of the implemented operation with escaped keywords | ||
Package | namespace | * | namespace:Package | packages with code language <<namespace>> set | |
PackageableElement | owningPackage | 0..1 | owningPackage | set if owner is a package | |
PackageableElement | owningNamespacePackage | 0..1 | owningNamespacePackage:Package | owning package with code language <<namespace>> set | |
Parameter | direction | direction:ParameterDirectionKind | |||
Parameter | isIn | isIn:Boolean | direction <in> | ||
Parameter | isInOut | isInOut:Boolean | direction <inout> | ||
Parameter | isOut | isOut:Boolean | direction <out> | ||
Parameter | isReturn | isReturn:Boolean | direction <return> | ||
Parameter | isVarArgList | isVarArgList:Boolean | true if parameter is a variable argument list | ||
Parameter | defaultValue | 0..1 | defaultValue:ValueSpecification | ||
Property | defaultValue | 0..1 | defaultValue:ValueSpecification | ||
RedefinableElement | 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 | ||
StereotypeApplication | name | name:String | name of applied stereotype | ||
StereotypeApplication | taggedValue | * | taggedValue:Slot | first slot of the instance specification | |
StructuralFeature | isReadOnly | isReadOnly | |||
StructuredClassifier | ownedAttribute | * | ownedAttribute:Property | ||
TemplateBinding | signature | 1 | signature:TemplateSignature | ||
TemplateBinding | parameterSubstitution | * | parameterSubstitution:TemplateParameterSubstitution | ||
TemplateParameter | paramDefault | paramDefault:String | template parameter default value | ||
TemplateParameter | ownedParameteredElement | 1 | ownedParameteredElement:ParameterableElement | ||
TemplateParameterSubstitution | parameterSubstitution | parameterSubstitution:String | Java only - code wildcard handling | ||
TemplateParameterSubstitution | parameterDimensionCount | parameterDimensionCount:Integer | code dimension count of the actual parameter | ||
TemplateParameterSubstitution | actual | 1 | OwnedActual:ParameterableElement | ||
TemplateParameterSubstitution | formal | 1 | formal:TemplateParameter | ||
TemplateSignature | template | 1 | template:TemplateableElement | ||
TemplateSignature | ownedParameter | * | ownedParameter:TemplateParameter | ||
TemplateableElement | isTemplate | isTemplate:Boolean | true if template signature set | ||
TemplateableElement | ownedTemplateSignature | 0..1 | ownedTemplateSignature:TemplateSignature | ||
TemplateableElement | templateBinding | * | templateBinding:TemplateBinding | ||
Type | typeName | * | typeName:PackageableElement | qualified code type names | |
TypedElement | type | 0..1 | type:Type | ||
TypedElement | postTypeModifier | postTypeModifier:String | postfix code modifiers | ||
ValueSpecification | value | value:String | string value of the value specification |
Hinzufügen eines Präfixes zu Attributen einer Klasse bei der Codegenerierung
Eventuell müssen Sie allen neuen Attributen in Ihrem Projekt die Zeichen "m_" voranstellen.
Alle neuen Kodierungselemente werden unter Verwendung der SPL-Vorlagen geschrieben:
Wenn Sie einen Blick in UModelSPL\C#[Java]\Default\Attribute.spl werfen, können Sie die Schreibweise des Namens ändern, z.B. können Sie
write $Property.name |
durch
write "m_" & $Property.name |
ersetzen.
Es wird unbedingt empfohlen, Ihr Modell sofort nach der Codegenerierung anhand des Codes aktualisieren, um sicherzustellen, dass Code und Modell synchron sind.
Bitte beachten Sie:
Kopieren Sie, wie bereits erwähnt, die SPL-Vorlagen ein Verzeichnis höher hinein (d.h. oberhalb des Standardverzeichnisses für UModelSPL\C#) bevor Sie sie ändern. Damit stellen Sie sicher, dass sie bei Installation einer neuen Version von UModel nicht überschrieben werden. Stellen Sie bitte sicher, dass Sie im Dialogfeld "Synchronisierungseinstellungen" auf dem Register Code von Modell das Kontrollkästchen "Benutzerdefinierte setzt Standardvorlage außer Kraft" aktiviert haben.
SPL-Vorlagen
SPL-Vorlagen können über die Menüoption Projekt | Projekteinstellungen (siehe Abbildung unten) pro UModel-Projekt definiert werden. Auch relative Pfade werden unterstützt. Vorlagen, die im angegebenen Verzeichnis nicht gefunden werden, werden im lokalen Standard-Verzeichnis gesucht.
Globale Objekte
$Options | ein Objekt, das globale Optionen enthält: |
generateComments:bool doc-Kommentare generieren (true/false) | |
$Indent | ein String zum Einrücken von generiertem Code und zur Anzeige der aktuellen Verschachtelungsebene. |
$IndentStep | ein String zum Einrücken von generiertem Code und zur Darstellung einer Verschachtelungsebene. |
$NamespacePrefix | nur XSD – das Target Namespace Präfix, falls vorhanden |
Routinen zur Behandlung von Strings
integer Compare(s) |
Der Rückgabewert gibt die lexikographische Beziehung des String zu s an (unter Berücksichtigung der Groß- und Kleinschreibung):
<0: | der String ist kleiner als s |
0: | der String ist identisch mit s |
>0: | der String ist größer als s |
integer CompareNoCase(s) |
Der Rückgabewert gibt die lexikographische Beziehung des String zu s an (ohne Berücksichtigung der Groß- und Kleinschreibung):
<0: | der String ist kleiner als s |
0: | der String ist identisch mit s |
>0: | der String ist größer als s |
integer Find(s) |
Durchsucht den String nach der ersten Instanz eines Substring s.
Gibt den nullbasierten Index des ersten Zeichens von s oder -1 zurück, wenn s nicht gefunden wird.
string Left(n) |
Gibt die ersten n Zeichen des String zurück.
integer Length() |
Gibt die Länge des String zurück.
string MakeUpper() |
Gibt einen String zurück, der in Großbuchstaben konvertiert wurde.
string MakeUpper(n) |
Gibt einen String zurück, dessen erste n Zeichen in Großbuchstaben konvertiert wurden.
string MakeLower() |
Gibt einen String zurück, der in Kleinbuchstaben konvertiert wurde.
string MakeLower(n)) |
Gibt einen String zurück, dessen erste n Zeichen in Kleinbuchstaben konvertiert wurden.
string Mid(n) |
Gibt einen String zurück, der mit der nullbasierten Indexposition n beginnt
string Mid(n,m) |
Gibt einen String zurück, der mit der nullbasierten Indexposition n beginnt und die Länge m hat
string RemoveLeft(s) |
Gibt einen String zurück, der den Substring s ausnimmt, wenn Left( s.Length() ) dem Substring s entspricht.
string RemoveLeftNoCase(s) |
Gibt einen String zurück, der den Substring s ausnimmt, wenn Left( s.Length() ) dem Substring s entspricht (Groß- und Kleinschreibung wird ignoriert).
string RemoveRight(s) |
Gibt einen String zurück, der den Substring s ausnimmt, wenn Right( s.Length() dem Substring s entspricht.
string RemoveRightNoCase(s) |
Gibt einen String zurück, der den Substring s ausnimmt, wenn Right( s.Length() dem Substring s entspricht (Groß- und Kleinschreibung wird ignoriert).
string Repeat(s,n) |
Gibt einen String zurück, der den Substring s n mal enthält.
string Right(n) |
Gibt die letzten n Zeichen des String zurück.