Upload
rainer-stremel
View
108
Download
0
Embed Size (px)
Citation preview
Effiziente Codegenerierung aus UML2 Strukturdiagrammen
Zwischenvortrag
Mathias Funk
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 2 / 27
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 3 / 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 4 / 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 5 / 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 6 / 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 7 / 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 8 / 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 9 / 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 10 / 27
Lösungskonzeption: Schema
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 11 / 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 12 / 27
Umsetzung in ANSI C: Beispiel
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 13 / 27
Umsetzung: Components
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 14 / 27
Umsetzung: Delegation-Connector
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 15 / 27
Umsetzung: Assembly-Connector
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 16 / 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 17 / 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 18 / 27
Realisierung
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 19 / 27
ANSI C-Metamodell
• ANSI C-Metamodell analog zum abstrakten Syntaxbaum
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 20 / 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 21 / 27
Modellvalidierung
• Funktionale Überprüfungssprache Check• Einsatz zur Überprüfung von UML2- und ANSI C-
Modellen• Jedes Modellelement direkt prüfbar• Verschiedene Prioritäten möglich
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 22 / 27
Modelltransformation
• Funktionale Transformationssprache xTend– Chaining, Syntaxcheck– automatische Abhängigkeiten
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 23 / 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 24 / 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 25 / 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
Demo time!
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 27 / 27
Ende + Preview
Vielen Dank für die Aufmerksamkeit!
Endvortrag:– Multiplizität von Elementen– Protected Regions bei der Generierung– Evaluation des Werkzeugs