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