Middleware für MDSD
Aktualisiert (Mittwoch, den 16. Juni 2010 um 22:17 Uhr) Geschrieben von: Thomas Schütz Montag, den 05. April 2010 um 18:42 Uhr
Es ist bei der modellgetriebenen Softwareentwicklung nicht sinnvoll, alle Teile eines Systems vollständig zu generieren. Für die invarianten Codeanteile, Kommunikationsinfrastruktur, etc. benötigt man eine Basisschicht. Je nach Anwendungsgebiet kann das z.B. ein kleine C-Bibliothek mit ein paar Kilobyte Speicherbedarf oder eine mächtige CORBA basierte Middleware sein. Die Entwicklung von Middleware für generierten Code stellt zusätzliche Anforderungen.
Generierter Code und Laufzeitumgebung
Ein Ziel des MDSD ist das Erreichen eines höheren Astraktionsgrades. Daher sind in der Regel die Modelle abstrakter als die Implementierungssprachen (z.B. C++, C, Java, ...). Die Lücke zwischen der DSL und der Implementierungssprache kann durch Entwicklung oder Verwendung geeigneter Frameworks oder Middleware geschlossen werden. Beispiele hierfür sind Frameworks für Zustandsautomaten oder Komponenten. Der generierte Code benutzt dann die durch das Framework bereitgestellten Basisklassen und Mechanismen. Man spricht in diesem Zusammenhang auch von einer Laufzeitumgebung für den generierten Code.
Die Middleware bzw. Laufzeitumgebung stellt etwa Mechanismen für eine Reihe typischer Anforderungen bereit:
Kommunikation
Eine der Hauptaufgaben von Middleware ist die Bereitstellung von Kommunikationsmechanismen. Je nach Anforderung ist hier aus einer Fülle von Möglichkeiten (synchron, asynchron, Nachrichten, Funktionsaufrufe, globale Variablen und dergleichen mehr) für die spezifische Aufgabe eine geeignete Wahl zu treffen.
Debugging / Tracing
Spezielle Mechanismen für Debugging und Tracing gewährleisten die Beobachtung und Fehlersuche auf Modellebene. Dadurch bewegt sich der Modellierer auch bei der Fehlersuche auf der passenden Abstraktionsstufe. Beispiele hierfür sind animierte Zustandsautomaten und Aufzeichnung von Sequenzdiagrammen aus Target Informationen und die Beobachtung und Modifikation von Target Daten.
Verteilung
Voraussetzung für die Verteilung einer Applikation ist eine Infrastruktur, welche den Lebenszyklus und die Verbindung aller Knoten im verteilten System kontrolliert.
Plattformabstraktion / Portierbarkeit
Da man in der Regel nicht für jede neue Plattform einen neuen Codegenerator schreiben will, ist es sinnvoll, die Middleware durch Plattformabstraktion portierbar zu halten.
Compiler / Interpreter
Es gibt verschiedene Wege, um von einem Modell mit ausreichend hohem Fomalisierungsgrad zu ausführbaren Systemen zu kommen.
- Codegenerierung und Kompilierung
- Codegenerierung und Interpretierung
- Direkte Interpretierung des Modells
Für manche Aufgaben ist es sinnvoll, statt Codegenerierung aus dem Modell und anschliessender Compilierung bzw. Interpretierung das Modell direkt zu interpretieren. Hierfür muss ein geeigneter Interpreter entwickelt werden, welcher das Modell direkt interpretieren kann.




