Generatives Programmieren Seminar Produktlinien WS03/04 Tammo van Lessen 08.01.2004
Outline Einleitung Generatoren Generatives Programmieren Fazit
Einleitung Industrielle Entwicklung 1826 Austauschbare Teile 1901 1. Fließband 1981 Industrieroboter bauen automatisch Autos Software-Entwicklung 1942 1. Programmiersprache 70er Objektorientierung Zukunft Generatives Programmieren?
Einleitung (2) Zauberwort der heutigen Softwareentwicklung re-use Wiederverwendung Verschiedene Möglichkeiten Generisches Programmieren Generatives Programmieren
Einleitung (2) OOA/D unterscheidet nicht zwischen Design for Re-Use und Design with Re-Use. OOA/D nicht für Domain-Scoping ausgelegt. Generatives Programmieren soll hier Abhilfe bringen.
Software-Generatoren Aufgaben Klassifikation Bauen von Generatoren Beispiele Anwendung
Was ist ein Generator? Ein Generator ist ein Programm, das eine abstrakte Eingabe zu einer weniger abstrakten, feineren Ausgabe umwandelt. Compiler, Preprocessors, CASE-Tools, GUI- Builder, JavaDoc sind Generatoren. Es muss nicht nur Code generiert werden.
Aufgaben des Generators Prüfen der Spezifikation Vervollständigen der Spezifikation Optimierungen durchführen Implementierung generieren Eingabe Generator Ausgabe
Klassifikation Horizontal Manipulation der Struktur Abstraktionsebene bleibt Vertikal Manipulation der Abstraktion, Hierarchie wird aufgeschlüsselt (Decomposing) Struktur bleibt. Oblique Kombination aus beiden Klassen
Klassifikation (2) horizontal vertikal oblique
Klassifikation (2) Compositional Transformational
Erstellen von Generatoren Stand-alone Hoher Implementierungsaufwand Verwendung von Generator-Baukästen z.b. GenVoca, Draco Metaprogrammierung Nutzung von eingebetteten Generatoren in Programmiersprachen
Populäre Beispiele Aspect Oriented Programming (AOP) Generic Programming C++ STL Compiler-Makros JSP Model-Driven-Architecture (MDA)
Anwendungsbeispiele GMCL & CMFL Hochperformante Matrizenalgorithmen Hochkonfigurierbar 7.500 Zeilen C++ (Templates) Bordcomputer-Software von Sateliten Spezifikation in XML Velocity-ähnliche Templatesprache Erzeugt ADA83-Code
Sinnvolle Einsatzgebiete Produktlinien Erhöhung der Wartbarkeit Embedded-Systeme Lücken in Programmiersprachen schliessen
Generatives Programmieren Definition Generative Domain Model Prozess Pro und Kontra
Was ist GP? Generatives Programmieren modelliert Software- Systemfamilien so, dass ausgehend von einer Anforderungsspezifikation mittels Konfigurationswissen aus elementaren, wiederverwendbaren Implementierungskomponenten ein hochangepasstes und optimiertes Zwischen- oder Endprodukt nach Bedarf automatisch erzeugt werden kann. Ist ein Prozessmodell
Generative Domain Model (1) Problem Raum Features DSL Konfigurations Wissen Kombinationen Lösungs Raum Komponenten
Generative Domain Model (2) Problemraum Domänenspez. Begriffe und Merkmale Eigene Sprache (DSL) zum Spezifizieren Lösungsraum Potenzmenge aller Komponenten Maximale Kombinierbarkeit Minimale Redundanz
Generative Domain Model (3) Konfigurationswissen Mapping: Feature Komponente Welche Komponenten dürfen kombiniert werden? Welche nicht? Produktionsplan der Produktlinie
Der Prozess Domain Engineering Domänen-Engineering ist das Sammeln, Organisieren und Festhalten bisheriger Erfahrungen im Erstellen von Systemen [...] in einer bestimmten Domäne in Form von wiederverwendbaren Werten [...] Entwickeln von Mitteln zum Wiederverwenden dieser Werte zur Erstellung neuer Systeme. Application Engineering Produkte werden auf Knopfdruck aus einer DSL generiert.
Pro und Kontra Pro Einfaches erzeugen von Produkten aus einer Produktlinie. Kurze Analyse- und Entwicklungszeiten Wartung findet nie auf Produktebene statt. Weniger Code Kontra Unflexibel Lässt keine nachträglichen Erweiterungen zu. Die komplexe Komponentenbibliothek muss erst entwickelt werden.
Fazit Generatoren können sinnvoll verwendet werden. Generatives Programmieren setzt sehr aufwendiges Domain Engineering voraus. Hohes Risiko, aber auch hoher Effizienz und viel Gewinn. Software ist immateriell, muss als entwickelt und kann nicht gefertigt werden. GP wird konventionelle SE nie verdrängen, aber sehr wohl ergänzen.
Vielen Dank!