Effiziente Codegenerierung aus UML2 Strukturdiagrammen

Download Report

Transcript Effiziente Codegenerierung aus UML2 Strukturdiagrammen

Effiziente Codegenerierung aus UML2 Strukturdiagrammen

Zwischenvortrag Mathias Funk

Motivation

• Eingebettete Systeme – Zeit- und sicherheitskritische Abläufe – Eingeschränkte Ressourcen (Speicher, Prozessor und Controllerleistung) – Hardwarenahe Programmierung in C erforderlich • Einsatz von UML bei eingebetteten Systemen – Einheitliche Modellierung z.B. mit UML – Wiederverwendung, Erweiterung, Anpassung – Durchgängiger Methoden- und Werkzeugeinsatz RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 2 / 27

Aufgabenstellung

• Konzeptioneller Teil – Wie können UML2 Strukturdiagramme in ANSI C übertragen werden?

– Wie kann effizienter Code erzeugt werden?

• Technischer Teil – Entwicklung eines Eclipse-Plugins • Einlesen von UML-Modellen aus ViPER • Implementierung der konzeptionellen Ergebnisse • Generierung von lauffähigem ANSI C-Code RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 3 / 27

Inhalt

• Vorgaben – UML2-Standard (Strukturdiagramme) – ANSI C-Standard • Lösungskonzeption – Transformationskonzept – Umsetzung in ANSI C • Technische Lösung – Eingesetzte Frameworks – Realisierung • Optimierungsmöglichkeiten • Demo des Werkzeugs RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 4 / 27

UML2 Standard

• Universelle Modellierungssprache • OMG-Standard UML2 ab 2004 – Komplexitätsreduzierung, erneuertes Metamodell – Neue Anwendungsbereiche (J2EE, Echtzeitanwendungen) – Bessere Unterstützung der hierarchischen Modellierung • Einführung von zusätzlichen Strukturdiagrammen – Kompositionsstrukturdiagramme • Funktionsweise eines Systems, Verhaltensmuster – Komponentendiagramme • Physische Struktur eines Systems • Gemeinsames Verhalten in öffentlichen Schnittstellen bereitstellen RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 5 / 27

ANSI C Standard

• Standardisierung des ANSI von 1988 – Erstmalige Festlegung des Sprachstandards • Wichtige Eigenschaften – Keine Laufzeitabhängigkeit, Overhead – Weite Verbreitung, Compiler-Support – Hohe Performanz, Hardware-nah – Skalierbarkeit – Einfache Lesbarkeit, Benutzung RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 6 / 27

Inhalt

• Vorgaben – UML2-Standard (Strukturdiagramme) – ANSI C-Standard • Lösungskonzeption – Transformationskonzept – Umsetzung in ANSI C • Technische Lösung – Eingesetzte Frameworks – Realisierung • Optimierungsmöglichkeiten • Demo des Werkzeugs RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 7 / 27

Lösungskonzeption

1. Direkte Generierung des Codes aus UML2 Modell 2. Modelltransformation in ANSI C-Modell, dann Codegenerierung • ANSI C-Modell (abstrakter Syntaxbaum) als Zielmodell • • • Transformation zwischen UML2- und ANSI C Modell Modellüberprüfung vor und nach Transformation Codegenerierung aus ANSI C Modell RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 8 / 27

Vorteile der Lösungsansätze

1. Direkte Generierung – Weniger benutzte Frameworks – Weniger Code 2. Transformation, dann Generierung – Gezielte Optimierung der Einzelschritte möglich – Relativ einfache Anpassung an andere Sprachen, Systeme, Modelle – Entwicklung und Fehlersuche einfacher RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 9 / 27

Lösungskonzeption: Schema

RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 10 / 27

Umsetzung in ANSI C

• Modellierung von Modulen durch Übersetzungseinheiten • Datenkapselung mit Hilfe von

structs

– Vorwärtsdeklaration in Headerdatei • Methoden als Pointer auf Funktionen – Eindeutige Signatur – Implizites

this

als *

void

-Zeiger • Methoden zusätzlich als Fassade per Makro RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 11 / 27

Umsetzung in ANSI C: Beispiel

RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 12 / 27

Umsetzung: Components

RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 13 / 27

Umsetzung: Delegation-Connector

RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 14 / 27

Umsetzung: Assembly-Connector

RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 15 / 27

Inhalt

• Vorgaben – UML2-Standard (Strukturdiagramme) – ANSI C-Standard • Lösungskonzeption – Transformationskonzept – Umsetzung in ANSI C • Technische Lösung – Eingesetzte Frameworks – Realisierung • Optimierungsmöglichkeiten • Demo des Werkzeugs RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 16 / 27

Eingesetzte Frameworks

• Eclipse • Eclipse Modelling Framework (EMF) – Vereinigt UML, XML und JAVA – Persistenz-API, Generierung, Validation • openArchitectureWare – Komponentenbasiertes Rahmenwerk • Modelltransformation • Codetransformation (XML, JAVA, HTML, …) – Schnittstellen zu EMF und anderen Modellierungstools RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 17 / 27

Realisierung

RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 18 / 27

ANSI C-Metamodell

• ANSI C-Metamodell analog zum abstrakten Syntaxbaum RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 19 / 27

ANSI C-Metamodell: Erweiterung

• Erweiterung um AST fremde Elemente – Containerstruktur oberhalb der

TranslationUnit (Code-Organisation)

– CodeAnnotations, Syntaxrepräsentation von Kommentaren

(Dokumentation)

RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 20 / 27

Modellvalidierung

• Funktionale Überprüfungssprache Modellen • Jedes Modellelement direkt prüfbar • Verschiedene Prioritäten möglich

Check

• Einsatz zur Überprüfung von UML2- und ANSI C RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 21 / 27

Modelltransformation

• Funktionale Transformationssprache

xTend

– Chaining, Syntaxcheck – automatische Abhängigkeiten RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 22 / 27

Codegenerierung

• Funktionale Generierungssprache

xPand

• Generierungsschablonen für Metamodellelemente – Schablonen als Klassenstruktur entsprechend dem ANSI C-AST RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 23 / 27

Inhalt

• Vorgaben – UML2-Standard (Strukturdiagramme) – ANSI C-Standard • Lösungskonzeption – Transformationskonzept – Umsetzung in ANSI C • Technische Lösung – Eingesetzte Frameworks – Realisierung • Optimierungsmöglichkeiten • Demo des Werkzeugs RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 24 / 27

Optimierung

• Singletons – Objekte, die nur einmal im System existieren – Potenzial:

this

-Zeiger fallen weg • Direkte Connector-Verbindung – Delegation Connectors über mehrere Ebenen werden „eingedampft“ – Potenzial: Nicht mehr benutzte Connectors fallen weg RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 25 / 27

Demo time!

Ende + Preview

Vielen Dank für die Aufmerksamkeit!

Endvortrag: – Multiplizität von Elementen – Protected Regions bei der Generierung – Evaluation des Werkzeugs RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 27 / 27