MDA in der Praxis - Modelltransformation und Code-Generierung mit dem Enterprise Architect

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    1 Group

    MDA in der Praxis - Modelltransformation und Code-Generierung mit dem Enterprise Architect - Presentation Transcript

    1. MDA in der Praxis Modelltransformation und Code-Generierung mit dem Enterprise Architect Dr. Olaf Maibaum, DLR Simulations- und Softwaretechnik
    2. Übersicht
      • Profile
      • Transformationen
        • UML -> UML
        • UML -> Source Code
      • Schreiben von Transformationen
      • Transformationen am Beispiel Rodos
      • Fazit
    3. Profile
      • Profile reichern die UML mit eigenen spezifischen Sprachinhalte an
        • Kapseln von Modell-Abstraktionen
        • Wiederverwenden von Elementen aus einem Entwicklungs-Framework
        • Modellieren der Elemente einer GUI
      • Profile definieren Stereotypen für UML-Elemente
      • Jeder Stereotyp kann mit Tagged Values versehen werden
      • Stereotypen und Tagged Values steuern Transformationen
        • UML -> UML
        • UML -> Code
    4. Profile erstellen
      • Öffnen eines Klassendiagramms
      • Aus den Tools UML-Profile auswählen
      • Das Profile-Element aus der Toolbox in das Klassendiagramm ziehen und das Profile benennen
      • EA erweitert das Projekt um einen Namensraum mit Stereotyp „profile“
      • In dem Namensraum können nun Klassendiagramme angelegt werden
    5. Stereotypen anlegen
      • Jeder Stereotyp ist einem UML-Element zugeordnet
      • Als erstes ist eine Meta-Klasse in ein Klassendiagramm zu ziehen
      • In der erscheinenden Auswahlbox sind die entsprechenden Elemente zu wählen, welche mit Stereotypen angereichert werden sollen
      • Einen Konnektor von der Meta-Klasse aus ziehen und die Extend-Beziehung wählen, um einen Stereotypen zu definieren
      • Alternativ Toolbox nutzen
    6. Stereotypen um Tagged Values erweitern
      • Der Stereotyp kann durch den Eigenschaftsdialog entsprechend bearbeitet werden
      • Tagged Values werden als Attribute eines Stereotypen definiert
      • Diese Daten können später im Editor durch den Nutzer bearbeitet werden
      • Im Beispiel eines Thread-Stereotypen:
        • Name
        • Priorität
        • Timingwerte
    7. Constraints
      • Jedem Stereotypen oder Tagged Value können Bedingungen für eine Validierung im Reiter Constraints gegeben werden
      • Beispiel:
        • Eine Assoziation mit Stereotyp send ist immer auf eine Klasse mit Stereotypen Message gerichtet
        • Einem Tagged Value priority des Stereotypen Thread ist definiert
      OCL-Beispiel ist falsch
    8. Profile speichern
      • Kontextmenü zum Namensraum des Stereotypen „Save Package as UML Modell
      • Als UML 2.0 speicher!
      • Gegebenenfalls Stereotypen noch sortieren für eine einfachere Nutzung
    9. Profil laden
      • Vom Projekt-Browser in Ressourcen wechseln
      • Im Kontext-Menü des „UML Profile“ „Import Profile“ wählen
      • XML-Datei mit dem Profile wird importiert
    10. Profile nutzen
      • Drag und Drop der Elemente aus dem Ressourcen-Bereich des Editors in ein Diagramm
      • Auswahl des Profiles aus der Tool-Auswahl und dann Drag und Drop aus der Toolbox
    11. Transformationen UML -> UML
      • Auflösen einer Abstraktionsebene
        • Hinzufügen von Hilfsklassen oder Modellpatterns
        • Hinzufügen von Assoziationen
        • Hinzufügen von Attributen und Operationen
      • Ändern genereller Elemente-Einstellungen
        • Eigenschaft Containment im Ziel einer Aggregation wird mit „Value“ versehen (Standard für eingebetteten System)
      • Spezifizieren auf ein Framework
        • Hinzufügen von Standardattributen und -operationen des verwendeten Frameworks
        • Hinzufügen von Modellpatterns
        • Überführen von Stereotypen in Stereotypen eines Frameworks
    12. Transformationen UML -> Code
      • Eigentlich Code-Generator
      • Standardüberführung von UML-Klassendiagrammen in die Zielsprache
      • Erstellen von spezialisierten Code aus Stereotypen und Tagged Values
        • Ererbung von Schnittstellen und Ableiten von Basisklassen
        • Erweitern der Attribute und Methoden
        • Erzeugen von ausführbaren Code für Helfermethoden des verwendeten Framework, z. B.
          • Initialisierung
          • Anmeldung
          • Abmeldung
          • Standardoperationen
        • Parametrisieren durch Tagged Values
    13. Zugriff auf Templates
      • Unter dem Menü „Settings“
      • Code Generation Templates
        • UML -> Code
      • Transformation Templates
        • UML -> UML
    14. Template Editor (1) Auswahl eines Sprachpakets
    15. Template Editor (2) Anlegen von neuen Sprachpaketen
    16. Template Editor (3) Templates einer Sprache Die Spalte Modified gibt an, ob das Template angepasst wurde
    17. Template Editor (4) Mit Stereotypen überschriebene Templates
    18. Template Editor (5)
      • Anlegen neuer Templates:
      • komplett neu
      • Mit Stereotypen überschrieben
    19. Template Editor (6) Speichern oder Löschen des ausgewählten Template
    20. Template ergänzen
      • Zum Anlegen eines neuen Templates
        • Das betreffende UML-Element als Template Type wählen
        • Einen Namen vergeben
        • EA vergibt als Namen immer <UMLType>__<Name> (Zwei ´_´ ! )
        • Das erzeugte Template ist leer
      • Zum Überschreiben eines Template mit einem Stereotypen
        • Die entsprechenden Stereotypen wählen (Class, Feature)
        • Das erzeugte Template ist eine Kopie des überschriebenen Templates
    21. Ablauf einer Transformation
      • Für jede Klasse wird eine Transformation durchgeführt
      • Es wird immer mit dem Template File begonnen
      • Für Sprachen mit getrennter Definition und Implementierung
        • File für Definition
        • File Impl für Implementierung
      • Alle anderen Templates müssen direkt oder indirekt durch File aufgerufen werden
      • Mit Stereotypen überschrieben Templates werden implizit ausgewählt, falls das zu übersetzende Objekt den Stereotypen besitzt
      • Ergebnis einer Transformation ist ein Text
    22. Exportieren/Importieren
      • Im Menü Tools:
      • Export Reference Data
      • Import Reference Data
      • Eine xml Datei kann einen ganzen Satz an Transformationen beinhalten
    23. Beispiel RODOS UML -> UML
    24. Class Template für Stereotypen Thread
      • %elemType%
      • {
      • %TRANSFORM_REFERENCE(&quot;Class&quot;)%
      • %TRANSFORM_CURRENT()%
      • %list=&quot;ClassParameter&quot; @separator=&quot; &quot; @indent=&quot; &quot;%
      • %list=&quot;ClassBase&quot; @separator=&quot; &quot; @indent=&quot; &quot;%
      • %list=&quot;ClassInterface&quot; @separator=&quot; &quot; @indent=&quot; &quot;%
      • %list=&quot;InnerClass&quot; @separator=&quot; &quot; @indent=&quot; &quot;%
      • %list=&quot;Attribute&quot; @separator=&quot; &quot; @indent=&quot; &quot;%
      • %list=&quot;Operation&quot; @separator=&quot; &quot; @indent=&quot; &quot;%
      • stereotype = &quot;Thread&quot;
      • notes = %qt%%classNotes%%qt%
      • Tag
      • {
      • name = &quot;name&quot;
      • value = %qt%%classTag:&quot;name&quot;%%qt%
      • }
      • }
      • %list=&quot;Connector&quot; @separator=&quot; &quot;%
    25. Ergänzung zu Template Namespace
      • $threadPriorities=%list=&quot;Class__ThreadPriorities&quot; @separator=&quot; &quot; @indent=&quot; &quot;%
      • $threadTimings=%list=&quot;Class__ThreadTiming&quot; @separator=&quot; &quot; @indent=&quot; &quot;%
      • Package
      • {
      • name = &quot;Configuration&quot;
      • Class
      • {
      • notes = &quot;Defines the priority, start and period time of threads&quot;
      • stereotype = &quot;enumeration&quot;
      • Tag
      • {
      • $comment = &quot;name = asCppDefintion falls #define erzeugt werden soll&quot;
      • name = &quot;suppressUndefined&quot;
      • value = &quot;T&quot;
      • }
      • name = &quot;ThreadConfiguration&quot;
      • $threadPriorities
      • $threadTimings
      • }
      • }
    26. Neues Template ClassThread__Timing
      • %if classStereotype!=&quot;Thread&quot;%
      • %endTemplate%
      • $startName = &quot;TIMING_START_&quot;+%TO_UPPER(className)%
      • $periodName = &quot;TIMING_PERIOD_&quot;+%TO_UPPER(className)%
      • Attribute
      • {
      • type = &quot;Nanoseconds&quot;
      • name = %qt%$startName%qt%
      • default = %qt%%classTag:&quot;startAt&quot;%%qt%
      • }
      • Attribute
      • {
      • type = &quot;Nanoseconds&quot;
      • name = %qt%$periodName%qt%
      • default = %qt%%classTag:&quot;startEvery&quot;%%qt%
      • }
    27. Beispiel RODOS UML -> Code
      • [--- snip ---]
      • /**
      • * Body of the thread Alice
      • */
      • void run()
      • {
      • // Define thread timing
      • setPeriodicBeat(Configuration::TIMING_START_RECEIVER,Configuration::TIMING_PERIOD_RECEIVER);
      • while(1)
      • {
      • waitUntilNextBeat();
      • // fill in your thread body here
      • }
    28. Überladung für Stereotyp „Thread“ von „Class Body Impl“ (1)
      • %if classTag:&quot;name&quot; != &quot;&quot;%
      • $threadName = %classTag:&quot;name&quot;%
      • %else%
      • $threadName = %className%
      • %endIf%
      • $startName = &quot;Configuration::TIMING_START_&quot;+%TO_UPPER(className)%
      • $periodName = &quot;Configuration::TIMING_PERIOD_&quot;+%TO_UPPER(className)%
      • // Initialization of thread $threadName
      • void init()
      • {
      • // fill in your initializations here
      • }
    29. Überladung für Stereotyp „Thread“ von „Class Body Impl“ (2)
      • /*
      • * Body of the thread $threadName
      • */
      • void run()
      • {
      • // Define thread timing
      • setPeriodicBeat($startName,$periodName);
      • while(1)
      • {
      • waitUntilNextBeat();
      • // fill in your thread body here
      • }
      • }
    30. Statt „enumeration“ ein „#define“ verwenden
      • Ergänzen enumeration-Überladung einer Klasse:
        • %ClassNotes%
        • %if classTag:&quot;asCppDefintion&quot;==&quot;T&quot;%
        • %list=&quot;Attribute__asCppDefinition&quot; @separator=&quot; &quot;%
        • %endTemplate%
      • Neues Template Attribute__asCppDefinition
        • %if attInitial!=&quot;&quot;%
        • #define %attName% (%attInitial%)
    31. Hilfe zur Erstellung von Transformationen
      • Abschnitt MDA Transforms
      • Code Engineering
        • Code Template Framework
      • Extend Enterprise Architect - Software Developers Kit
        • Code Template Framework in SDK
    32. Fazit
      • Positiv
        • Anwendung der MDA erspart Modellierungszeit
        • Immer wiederkehrender Code kann automatisch erzeugt werden
      • Negativ
        • Schreiben der Templates ist recht komplex
        • Dokumentation der Template-Syntax ist dürftig
        • Debugging der Templates ist schwierig
        • Es gibt implizite Regeln für die Code-Erzeugung, welche sich nicht beeinflussen lassen
          • Bsp: Bei Stereotyp <<enumeration>> wird „file impl“ nicht aufgerufen, ansonsten immer

    + Andreas SchreiberAndreas Schreiber, 2 years ago

    custom

    1402 views, 0 favs, 2 embeds more stats

    TechTalk von Olaf Maibaum (DLR Braunschweig, 21.10. more

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 1402
      • 1398 on SlideShare
      • 4 from embeds
    • Comments 0
    • Favorites 0
    • Downloads 14
    Most viewed embeds
    • 2 views on https://wiki.sistec.dlr.de
    • 2 views on http://static.slidesharecdn.com

    more

    All embeds
    • 2 views on https://wiki.sistec.dlr.de
    • 2 views on http://static.slidesharecdn.com

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories

    Groups / Events