Effiziente Codegenerierung aus UML2 Strukturdiagrammen Zwischenvortrag Mathias Funk
RWTH Aachen, LuFGI 3 Software Konstruktion - 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
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 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
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 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
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 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
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 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
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 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
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk Lösungskonzeption Direkte Generierung des Codes aus UML2-Modell 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
Vorteile der Lösungsansätze 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
Lösungskonzeption: Schema RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 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
Umsetzung in ANSI C: Beispiel RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk
Umsetzung: Components RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk
Umsetzung: Delegation-Connector RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk
Umsetzung: Assembly-Connector RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 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
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
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk Realisierung RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk ANSI C-Metamodell ANSI C-Metamodell analog zum abstrakten Syntaxbaum RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk
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
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 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
Modelltransformation Funktionale Transformationssprache xTend Chaining, Syntaxcheck automatische Abhängigkeiten RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk Codegenerierung Funktionale Generierungssprache xPand Generierungsschablonen für Metamodellelemente Schablonen als Klassenstruktur entsprechend dem ANSI C-AST RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 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
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 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
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