effiziente codegenerierung aus uml2 strukturdiagrammen zwischenvortrag mathias funk
TRANSCRIPT
![Page 1: Effiziente Codegenerierung aus UML2 Strukturdiagrammen Zwischenvortrag Mathias Funk](https://reader036.vdocuments.pub/reader036/viewer/2022062404/55204d7e49795902118cff72/html5/thumbnails/1.jpg)
Effiziente Codegenerierung aus UML2 Strukturdiagrammen
Zwischenvortrag
Mathias Funk
![Page 2: Effiziente Codegenerierung aus UML2 Strukturdiagrammen Zwischenvortrag Mathias Funk](https://reader036.vdocuments.pub/reader036/viewer/2022062404/55204d7e49795902118cff72/html5/thumbnails/2.jpg)
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
![Page 3: Effiziente Codegenerierung aus UML2 Strukturdiagrammen Zwischenvortrag Mathias Funk](https://reader036.vdocuments.pub/reader036/viewer/2022062404/55204d7e49795902118cff72/html5/thumbnails/3.jpg)
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
![Page 4: Effiziente Codegenerierung aus UML2 Strukturdiagrammen Zwischenvortrag Mathias Funk](https://reader036.vdocuments.pub/reader036/viewer/2022062404/55204d7e49795902118cff72/html5/thumbnails/4.jpg)
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
![Page 5: Effiziente Codegenerierung aus UML2 Strukturdiagrammen Zwischenvortrag Mathias Funk](https://reader036.vdocuments.pub/reader036/viewer/2022062404/55204d7e49795902118cff72/html5/thumbnails/5.jpg)
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
![Page 6: Effiziente Codegenerierung aus UML2 Strukturdiagrammen Zwischenvortrag Mathias Funk](https://reader036.vdocuments.pub/reader036/viewer/2022062404/55204d7e49795902118cff72/html5/thumbnails/6.jpg)
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
![Page 7: Effiziente Codegenerierung aus UML2 Strukturdiagrammen Zwischenvortrag Mathias Funk](https://reader036.vdocuments.pub/reader036/viewer/2022062404/55204d7e49795902118cff72/html5/thumbnails/7.jpg)
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
![Page 8: Effiziente Codegenerierung aus UML2 Strukturdiagrammen Zwischenvortrag Mathias Funk](https://reader036.vdocuments.pub/reader036/viewer/2022062404/55204d7e49795902118cff72/html5/thumbnails/8.jpg)
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
![Page 9: Effiziente Codegenerierung aus UML2 Strukturdiagrammen Zwischenvortrag Mathias Funk](https://reader036.vdocuments.pub/reader036/viewer/2022062404/55204d7e49795902118cff72/html5/thumbnails/9.jpg)
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
![Page 10: Effiziente Codegenerierung aus UML2 Strukturdiagrammen Zwischenvortrag Mathias Funk](https://reader036.vdocuments.pub/reader036/viewer/2022062404/55204d7e49795902118cff72/html5/thumbnails/10.jpg)
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 10 / 27
Lösungskonzeption: Schema
![Page 11: Effiziente Codegenerierung aus UML2 Strukturdiagrammen Zwischenvortrag Mathias Funk](https://reader036.vdocuments.pub/reader036/viewer/2022062404/55204d7e49795902118cff72/html5/thumbnails/11.jpg)
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
![Page 12: Effiziente Codegenerierung aus UML2 Strukturdiagrammen Zwischenvortrag Mathias Funk](https://reader036.vdocuments.pub/reader036/viewer/2022062404/55204d7e49795902118cff72/html5/thumbnails/12.jpg)
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 12 / 27
Umsetzung in ANSI C: Beispiel
![Page 13: Effiziente Codegenerierung aus UML2 Strukturdiagrammen Zwischenvortrag Mathias Funk](https://reader036.vdocuments.pub/reader036/viewer/2022062404/55204d7e49795902118cff72/html5/thumbnails/13.jpg)
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 13 / 27
Umsetzung: Components
![Page 14: Effiziente Codegenerierung aus UML2 Strukturdiagrammen Zwischenvortrag Mathias Funk](https://reader036.vdocuments.pub/reader036/viewer/2022062404/55204d7e49795902118cff72/html5/thumbnails/14.jpg)
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 14 / 27
Umsetzung: Delegation-Connector
![Page 15: Effiziente Codegenerierung aus UML2 Strukturdiagrammen Zwischenvortrag Mathias Funk](https://reader036.vdocuments.pub/reader036/viewer/2022062404/55204d7e49795902118cff72/html5/thumbnails/15.jpg)
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 15 / 27
Umsetzung: Assembly-Connector
![Page 16: Effiziente Codegenerierung aus UML2 Strukturdiagrammen Zwischenvortrag Mathias Funk](https://reader036.vdocuments.pub/reader036/viewer/2022062404/55204d7e49795902118cff72/html5/thumbnails/16.jpg)
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
![Page 17: Effiziente Codegenerierung aus UML2 Strukturdiagrammen Zwischenvortrag Mathias Funk](https://reader036.vdocuments.pub/reader036/viewer/2022062404/55204d7e49795902118cff72/html5/thumbnails/17.jpg)
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
![Page 18: Effiziente Codegenerierung aus UML2 Strukturdiagrammen Zwischenvortrag Mathias Funk](https://reader036.vdocuments.pub/reader036/viewer/2022062404/55204d7e49795902118cff72/html5/thumbnails/18.jpg)
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 18 / 27
Realisierung
![Page 19: Effiziente Codegenerierung aus UML2 Strukturdiagrammen Zwischenvortrag Mathias Funk](https://reader036.vdocuments.pub/reader036/viewer/2022062404/55204d7e49795902118cff72/html5/thumbnails/19.jpg)
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 19 / 27
ANSI C-Metamodell
• ANSI C-Metamodell analog zum abstrakten Syntaxbaum
![Page 20: Effiziente Codegenerierung aus UML2 Strukturdiagrammen Zwischenvortrag Mathias Funk](https://reader036.vdocuments.pub/reader036/viewer/2022062404/55204d7e49795902118cff72/html5/thumbnails/20.jpg)
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)
![Page 21: Effiziente Codegenerierung aus UML2 Strukturdiagrammen Zwischenvortrag Mathias Funk](https://reader036.vdocuments.pub/reader036/viewer/2022062404/55204d7e49795902118cff72/html5/thumbnails/21.jpg)
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
![Page 22: Effiziente Codegenerierung aus UML2 Strukturdiagrammen Zwischenvortrag Mathias Funk](https://reader036.vdocuments.pub/reader036/viewer/2022062404/55204d7e49795902118cff72/html5/thumbnails/22.jpg)
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 22 / 27
Modelltransformation
• Funktionale Transformationssprache xTend– Chaining, Syntaxcheck– automatische Abhängigkeiten
![Page 23: Effiziente Codegenerierung aus UML2 Strukturdiagrammen Zwischenvortrag Mathias Funk](https://reader036.vdocuments.pub/reader036/viewer/2022062404/55204d7e49795902118cff72/html5/thumbnails/23.jpg)
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
![Page 24: Effiziente Codegenerierung aus UML2 Strukturdiagrammen Zwischenvortrag Mathias Funk](https://reader036.vdocuments.pub/reader036/viewer/2022062404/55204d7e49795902118cff72/html5/thumbnails/24.jpg)
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
![Page 25: Effiziente Codegenerierung aus UML2 Strukturdiagrammen Zwischenvortrag Mathias Funk](https://reader036.vdocuments.pub/reader036/viewer/2022062404/55204d7e49795902118cff72/html5/thumbnails/25.jpg)
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
![Page 26: Effiziente Codegenerierung aus UML2 Strukturdiagrammen Zwischenvortrag Mathias Funk](https://reader036.vdocuments.pub/reader036/viewer/2022062404/55204d7e49795902118cff72/html5/thumbnails/26.jpg)
Demo time!
![Page 27: Effiziente Codegenerierung aus UML2 Strukturdiagrammen Zwischenvortrag Mathias Funk](https://reader036.vdocuments.pub/reader036/viewer/2022062404/55204d7e49795902118cff72/html5/thumbnails/27.jpg)
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