Die direkte Ableitung der Automate DSL aus dem AUTOSAR-Metamodell bringt einige Vorteile mit sich. Unter anderem hat der Entwickler dadurch einen sehr direkten Kontakt zum Modell. Andererseits enthält das Metamodel aber auch Konstrukte, die für bestimmte Anwendungsfälle unnötig kompliziert sind und sich vereinfachen ließen.
Weil bei solchen Vereinfachungen in der Regel projektspezifische Annahmen getroffen werden, sind sie nicht fest in Automate eingebaut. Vielmehr hat der Nutzer mit Hilfe des Makromechanismus die Möglichkeit, auf einfache Weise selbst abstraktere Kommandos (DSL-Erweiterungen) zu erstellen. Die Makrodefinitionen sind dabei Teil des Modells und können mit ihm im Projekt versioniert werden.
Beispiel 2.1: Einfacher Aufbau
AUTOSAR {
ARPackage System {
CompositionSwComponentType Comp {
SwComponentPrototype lightController, type: /Lights/SwcLightController
SwComponentPrototype lightMaster, type: /Lights/SwcLightMaster
AssemblySwConnector conn1 {
PPortInCompositionInstanceRef contextComponent: lightController, targetPPort: controlPort
RPortInCompositionInstanceRef contextComponent: lightMaster, targetRPort: controlPort
}
}
}
}
Beispiel 2.1 zeigt einen einfachen Aufbau bestehend aus zwei Component Prototypes, die mit einem Connector verbunden sind. Der Connector wird dabei entsprechend dem Metamodell durch drei Modellelemente repräsentiert. Mit Hilfe eines Makros lässt sich die Connector-Definition vereinfachen.
Beispiel 2.2: „AtmConnector”
AUTOSAR {
ARPackage System {
CompositionSwComponentType Compostion {
@macro: AtmConnector <name>, <pcp>:, <pport>:, <rcp>:, <rport>:
AssemblySwConnector <name> {
PPortInCompositionInstanceRef contextComponent: <pcp>, targetPPort: <pport>
RPortInCompositionInstanceRef contextComponent: <rcp>, targetRPort: <rport>
}
}
}
}
Beispiel 2.2 definiert das Makro „AtmConnector“. Eine Makrodefinition besteht aus einem Modellfragment, bei dem ein Element durch eine Annotation „@macro“ markiert wird.
Des Weiteren werden alle konkreten Attributwerte und Referenzen auf andere Elemente durch Platzhalter ersetzt und diese in der Annotation verwendet. Makrodefinitionen werden in einem beliebigen, separaten Makro-Verzeichnis abgelegt.
Beispiel 2.3: Reduzierte Form
AUTOSAR {
ARPackage System {
CompositionSwComponentType Compostion {
SwComponentPrototype lightController, type: /Lights/SwcLightController
SwComponentPrototype lightMaster, type: /Lights/SwcLightMaster
AtmConnector „conn1“, pcp: lightController, pport: controlPort, rcp: lightMaster, rport: controlPort
}
}
}
Mit Hilfe des so definierten Makros kann Automate den Connector bei der nächsten Konvertierung von ARXML zu Text (a2t) in der reduzierten Form darstellen (Beispiel 2.3). Drei Modellelemente verschmelzen dabei zu einem einzigen und ein Connector lässt sich prägnant in einer Zeile ausdrücken. Insgesamt reduzieren sich hierbei elf Zeilen ARXML auf eine Zeile Text.
Auch bei Verwendung von Makros ist die Transformation von ARXML in die textuelle DSL und zurück verlustfrei: Modellfragmente werden nur dann in die Makrodarstellung reduziert, wenn das Muster des Makros passt. So ist sichergestellt, dass bei der Rücktransformation stets das Ausgangsmodell – mit eventuell explizit gemachten Änderungen – entsteht. Passt ein Makromuster nicht, wird das Modell in der normalen textuellen Darstellung repräsentiert.