Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Generierung von effizientem C-Code aus UML2-Strukturdiagrammen

Ähnliche Präsentationen


Präsentation zum Thema: "Generierung von effizientem C-Code aus UML2-Strukturdiagrammen"—  Präsentation transkript:

1 Generierung von effizientem C-Code aus UML2-Strukturdiagrammen
Abschlussvortrag Mathias Funk

2 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 UML2-Modellen (aus ViPER) Implementierung der konzeptionellen Ergebnisse Generierung von lauffähigem ANSI C-Code RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk

3 RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk
Inhalt Motivation / Anforderungen Transformationskonzept Maximen Beispiel Realisierung ANSI C-Modell Plugin-Architektur Optimierung Singletons Evaluation Demo Zuerst will ich die Arbeit etwas umfassender motivieren…und dabei die konkreten Grundanforderungen erläutern.. Hieraus ergibt sich das grundsätzliche Transformationskonzept…(erläutert an einem Beispiel!) Danach gehe ich auf die Realisierung des Transformationskonzeptes ein, ANSI C Modell, dann des Werkzeugs als Eclipse-Plugin…Architektur RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk

4 RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk
Kontext: MDD Plattformen bieten heutzutage umfangreichere und mächtigere Möglichkeiten als „nackte“ Programmiersprachen, man kann jetzt auf Rahmenwerke und wiederverwndbare Komponenten zurückgreifen. RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk

5 RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk
Anforderungen MDD im Umfeld eingebetteter Systeme MeDUSA Verwendung von UML2-Modellen Zielsprache ANSI C Übergang von Modell zu Code möglichst nahtlos: Codegenerierung! MDD häufig im Einsatz bei Webanwendungen, jetzt eingebettete Systeme! RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk

6 Transformationskonzept
Konzept der Klasse existiert nicht in C Transformation nach Standardmapping Zentrale Datenstruktur als C-struct Maximen Generische Umsetzung aller Classifier Durchgängigkeit, Konsistenz Bessere Akzeptanz durch Entwickler Unabhängigkeit von späterer Instantiierung Wiederverwendung Schwierigkeit: keine klassen in ANSI C RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk

7 Beispiel: Behavior Port I
Port besitzt zwei Interfaces: Interface1 mit Operation: operation1(param1 : int) : int Interface2 mit Operation: operation1(param1 : char) : char RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk

8 Beispiel: Behavior Port II
Umsetzung der Classifier in C-Strukturen: struct _PortType1 { /* provided interfaces */ void * interface1; int (* fp_interface1_operation1)(void * _self, int param1); /* required interfaces */ void * interface2; int (* fp_interface2_operation1)(void * _self, char param1); } struct _StructuredClass { /* ports */ PortType1 port1; } RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk

9 Beispiel: Behavior Port III
Setzen der Funktions- und Instanzzeiger mittels Registrierungsfunktionen: void REGISTER_PortType1_Interface1(void* _self, void* connector) { self->interface2 = connector; } void REGISTER_PortType1_Interface1_operation1(void* _self, int(* operation)(void* _self, int param1)) self->fp_interface1_operation1 = operation; Jetzt kommt die Realisierung! Damit sollte das Konzept komplett erläutert sein! Aufruf der Registrierungsfunktionen im Konstruktor des umgebenden Classifiers: REGISTER_PortType1_Interface1(&port1, self); REGISTER_PortType1_Interface1_operation1(&port1, StructuredClass_operation1_Implementation); RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk

10 RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk
Realisierung ANSI C-Modell (neu entwickelt, da nicht frei verfügbar) Core-Diagramm Container-Diagramm Plugin-Architektur Zweistufige Realisierung wurde schon im Zwischenvortrag erläutert (Flexibilität, Anpassbarkeit durch modularisierten Aufbau) Gerade da ist es wichtig, dass die Zwischenschritte möglichst einfach sind, deshalb jeweils innerhalb einer Domäne. RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk

11 RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk
ANSI C Modell: Core RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk

12 ANSI C-Modell: Container
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk

13 RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk
Workflow RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk

14 RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk
Plugin-Architektur RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk

15 Optimierung: Singletons
Singleton: „eine globale Instanz“ Häufig in der Praxis Keine Verletzung der direkten Abbildung Normale Transformation Transformation mit Singletons struct _Data { int a; char b; } #define Data struct _Data struct _Data { int a; char b; } #define Data struct _Data Data Data_self; Data data1; Data_CREATE($data1); Data_CREATE(); RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk

16 Optimierung: Evaluation
Performance 6 Mrd. Funktionsaufrufe einer einfachen Multiplikation (Demo-Beispiel) Unoptimiert: 392 Sekunden Singletons: 331 Sekunden Speicherplatz (dynamisch) 3 Instanzen bzw. 3 Singletons (Demo-Beispiel) Unoptimiert: Bytes Singletons: Bytes 31 Instanzen bzw. 3 Singletons Unoptimiert: Bytes Singletons: Bytes Speicherplatz (statisch) Unoptimiert: Bytes Singletons: Bytes Unoptimiert: Bytes Singletons: Bytes RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk

17 Vielen Dank für die Aufmerksamkeit!
Demo Vielen Dank für die Aufmerksamkeit! RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk


Herunterladen ppt "Generierung von effizientem C-Code aus UML2-Strukturdiagrammen"

Ähnliche Präsentationen


Google-Anzeigen