effiziente codegenerierung aus uml2 strukturdiagrammen zwischenvortrag mathias funk

27
Effiziente Codegenerierung aus UML2 Strukturdiagrammen Zwischenvortrag Mathias Funk

Upload: rainer-stremel

Post on 06-Apr-2015

108 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Effiziente Codegenerierung aus UML2 Strukturdiagrammen Zwischenvortrag Mathias Funk

Effiziente Codegenerierung aus UML2 Strukturdiagrammen

Zwischenvortrag

Mathias Funk

Page 2: 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

Page 3: Effiziente Codegenerierung aus UML2 Strukturdiagrammen Zwischenvortrag Mathias Funk

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

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

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

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

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

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

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

RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 10 / 27

Lösungskonzeption: Schema

Page 11: Effiziente Codegenerierung aus UML2 Strukturdiagrammen Zwischenvortrag Mathias Funk

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

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

RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 13 / 27

Umsetzung: Components

Page 14: Effiziente Codegenerierung aus UML2 Strukturdiagrammen Zwischenvortrag Mathias Funk

RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 14 / 27

Umsetzung: Delegation-Connector

Page 15: Effiziente Codegenerierung aus UML2 Strukturdiagrammen Zwischenvortrag Mathias Funk

RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 15 / 27

Umsetzung: Assembly-Connector

Page 16: Effiziente Codegenerierung aus UML2 Strukturdiagrammen Zwischenvortrag Mathias Funk

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

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

RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 18 / 27

Realisierung

Page 19: Effiziente Codegenerierung aus UML2 Strukturdiagrammen Zwischenvortrag Mathias Funk

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

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

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

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

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

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

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

Demo time!

Page 27: Effiziente Codegenerierung aus UML2 Strukturdiagrammen Zwischenvortrag Mathias Funk

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