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 einem Variablennamen 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 <% UMOD%> 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 Tab interpretiert, \" ist ein literales doppeltes Anführungszeichen und \\ ein umgekehrter Schrägstrich. String-Konstanten können auch mehrere Zeilen einnehmen.
In String-Verkettungen wird das Zeichen & verwendet:
[$BasePath = $outputpath & "/" & $JavaPackageDir] |
Objekte
Objekte stehen für die Informationen, die im UModel -Projekt enthalten sind. Objekte haben Eigenschaften, die mit Hilfe des Operators . 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 | Pakete mit Codesprache <<namespace>> definiert | |
Classifier | rootNamespace | * | project root namespace:String | nur VB - Root-Nnamespace | |
Classifier | generalization | * | generalization:Generalization | ||
Classifier | isAbstract | isAbstract:Boolean | |||
ClassifierTemplateParameter | constrainingClassifier | * | constrainingClassifier | ||
Kommentar | 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 | nur XSD - Namespace-Präfix, falls vorhanden | ||
NamedElement | parseableName | parseableName:String | Nur CSharp, VB - Name mit mit Escape versehenen Schlüsselwörtern (@) | ||
Namespace | elementImport | * | elementImport:ElementImport | ||
Operation | ownedReturnParameter | 0..1 | ownedReturnParameter:Parameter | Parameter mit festgelegter Rückgabegerichtung | |
Operation | type | 0..1 | type | Parametertyp mit festgelegter Rückgaberichtung | |
Operation | ownedOperationParameter | * | ownedOperationParameter:Parameter | alle Parameter mit Ausnahme von Parametern mit festgelegter Rückgabegerichtung | |
Operation | implementedInterface | 1 | implementedInterface:Interface | Nur CSharp - die implementierte Schnittstelle | |
Operation | ownedOperationImplementations | * | implementedOperation:OperationImplementation | Nur VB - die implementierten Schnittstellen/Operationen | |
OperationImplementation | implementedOperationOwner | 1 | implementedOperationOwner:Interface | von der Operation implementierte Schnittstelle | |
OperationImplementation | implementedOperationName | name:String | Name der implementierten Operation | ||
OperationImplementation | implementedOperationParseableName | parseableName:String | Name der implementierten Operation mit mit Escape versehenen Schlüsselwörtern | ||
Paket | Namespace | * | namespace:Package | Pakete mit Codesprache <<namespace>> definiert | |
PackageableElement | owningPackage | 0..1 | owningPackage | wird definiert, wenn der Owner ein Paket ist | |
PackageableElement | owningNamespacePackage | 0..1 | owningNamespacePackage:Package | Paket, in dem der Codesprachen <<namespace>> festgelegt ist | |
Parameter | direction | direction:ParameterDirectionKind | |||
Parameter | isIn | isIn:Boolean | Richtung <in> | ||
Parameter | isInOut | isInOut:Boolean | Richtung <inout> | ||
Parameter | isOut | isOut:Boolean | Richtung <out> | ||
Parameter | isReturn | isReturn:Boolean | Richtung <return> | ||
Parameter | isVarArgList | isVarArgList:Boolean | true, wenn der Parameter eine Variablenargumentliste ist | ||
Parameter | defaultValue | 0..1 | defaultValue:ValueSpecification | ||
Eigenschaft | defaultValue | 0..1 | defaultValue:ValueSpecification | ||
RedefinableElement | isLeaf | isLeaf:Boolean | |||
Slot | name | name:String | Name der definierenden Funktionalität | ||
Slot | values | * | value:ValueSpecification | ||
Slot | value | value:String | Wert der ersten Wertespezifikation | ||
StereotypeApplication | name | name:String | Name des angewendeten Stereotyps | ||
StereotypeApplication | taggedValue | * | taggedValue:Slot | erster Slot der Instanzspezifikation | |
StructuralFeature | isReadOnly | isReadOnly | |||
StructuredClassifier | ownedAttribute | * | ownedAttribute:Property | ||
TemplateBinding | signature | 1 | signature:TemplateSignature | ||
TemplateBinding | parameterSubstitution | * | parameterSubstitution:TemplateParameterSubstitution | ||
TemplateParameter | paramDefault | paramDefault:String | Vorlagenparameter-Standardwert | ||
TemplateParameter | ownedParameteredElement | 1 | ownedParameteredElement:ParameterableElement | ||
TemplateParameterSubstitution | parameterSubstitution | parameterSubstitution:String | Nur Java - Code-Wildcard-Behandlung | ||
TemplateParameterSubstitution | parameterDimensionCount | parameterDimensionCount:Integer | Anzahl der Code-Dimensions des tatsächlichen Parameters | ||
TemplateParameterSubstitution | actual | 1 | OwnedActual:ParameterableElement | ||
TemplateParameterSubstitution | formal | 1 | formal:TemplateParameter | ||
TemplateSignature | template | 1 | template:TemplateableElement | ||
TemplateSignature | ownedParameter | * | ownedParameter:TemplateParameter | ||
TemplateableElement | isTemplate | isTemplate:Boolean | true, wenn eine Vorlagensignatur definiert ist | ||
TemplateableElement | ownedTemplateSignature | 0..1 | ownedTemplateSignature:TemplateSignature | ||
TemplateableElement | templateBinding | * | templateBinding:TemplateBinding | ||
Type | typeName | * | typeName:PackageableElement | qualifizierte Codetypnamen | |
TypedElement | type | 0..1 | type:Type | ||
TypedElement | postTypeModifier | postTypeModifier:String | Postfix-Code-Modifikatoren | ||
ValueSpecification | value | value:String | String-Wert der Wertespezifikation |
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 z.B. UModelSPL\C#[Java]\Default\Attribute.spl öffnen, 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.
Anmerkung: 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 einzigen 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 Übereinstimmung mit einem Substring s. Gibt den nullbasierten Index des ersten Zeichens von s oder -1 zurück, falls 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.