270 likes | 398 Views
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
E N D
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
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
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
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
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
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
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
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 Vorteile der Lösungsansätze RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk
Lösungskonzeption: Schema 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
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
Realisierung 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
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
Codegenerierung • Funktionale Generierungssprache xPand • Generierungsschablonen für Metamodellelemente • Schablonen als Klassenstruktur entsprechend dem ANSI C-AST 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
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
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