Generative Softwareentwicklung in der Praxis

Werbung
Generative Softwareentwicklung in der Praxis
Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003
Überblick
• Generator Werkzeug („GVizard“)
•
•
•
•
Problemstellung
Ergebnis „Kibs-Live“
Lösungsweg
„GVizard“-Live
• Model Driven Architecture (MDA)
• Konzepte
• MDA-Werkzeuge
• Funktionsweise von „AndroMDA“
• MDA-Live (Beispiel-Anwendung)
Olaf Kaus, OOT, 6.Oktober 2003
2
Problemstellung
• „KIBS“-Anwendung
• Web-Anwendung
• JSP/Servlet
• Struts, Tomcat, TopLink, MS-Access/Oracle
• Verwaltung von Bauteilen in Kernkraftwerken
• Problem
• Dialoge für n-„Einbauteile“
• Dialoge haben gleiches Verhalten und ähnliche Datenstrukturen.
• Anlegen, Suchen, Bearbeiten, Hilfeseite, Druckseite, Excel-Export)
Olaf Kaus, OOT, 6.Oktober 2003
3
Ergebnis
Ein Blick auf KIBS!
Olaf Kaus, OOT, 6.Oktober 2003
4
Lösungsweg: Analyse
• Erstellen von verschiedenen Datei-Typen
• Java, JSP, HTML, XML
• Einsatz von Datei-Schablonen
(Templates)
• Platzhalter in Datei
Hallo Herr ${empfänger}…
• Templates müssen Logik enthalten
Hallo {if empfänger.geschlecht==mänlich:}Herr{?}Frau…
Olaf Kaus, OOT, 6.Oktober 2003
5
Lösungsweg: Template-Engine
• „Jakarta“ OpenSource Template-Engine „Velocity“
• Javabasiertes Framework für die Erzeugung jegliche Art von
Textdateien
• Einsatz in verschiedenen anderen OpenSource-Projekten
• Web-Architekturen
• UML-Werzeuge
• Datenbank-Mapping
• Einfache Handhabung
1. Erstellen des Templates
2. Anreichern mit dynamischen Daten
3. Generieren der Ausgabedatei
Olaf Kaus, OOT, 6.Oktober 2003
6
Velocity Template-Syntax
Platzhalter
${variablenname}
Schleifen
#foreach( $row in $variablenname)
${row}
#end
Bedingungen
#if( $variablenname==true)
mach was
#end
Olaf Kaus, OOT, 6.Oktober 2003
7
Velocity Beispiel
<HTML>
<BODY>
Hello $user!
<table>
#foreach( $skill in $customer.skills() )
#if ( $skill.hasJava() )
<tr>
<td>
$skill.getLevel()
</td>
</tr>
#end
#end
</table>
</BODY>
</HTML>
Olaf Kaus, OOT, 6.Oktober 2003
8
Velocity-Context
// Initialisiern
Velocity.init();
// Context aufbauen und füllen
VelocityContext context = new VelocityContext();
context.put( “user", new String(“Olaf Kaus") );
context.put( “customer", new Customer() );
// Template einlesen
Template template = null;
template = Velocity.getTemplate(“skilltemplate.vm");
// Template und Context zusammenführen
StringWriter sw = new StringWriter();
template.merge( context, sw );
Olaf Kaus, OOT, 6.Oktober 2003
9
Problem: Verbindung von eigenen und generierten Texten
• Erzeugte Datei kann nur als Ausgangsdokument verwendet
werden.
• Bei jedem neuen Generieren wird das Textdokument vollständig
ersetzt.
• Lösungen:
• Include-Mechanismen
• OO-Techniken / Design-Patterns
• Geschützte Bereiche („Protected Regions“)
Olaf Kaus, OOT, 6.Oktober 2003
10
Lösung: Include-Mechanismen
• JSP
•
…
<jsp:include page="../includes/genfooter.jsp" />
…
XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE generic SYSTEM ".\generic-generator.dtd" [
<!ENTITY EditBOAction SYSTEM "GenBOAction.xml">
]>
<generic version="0.2">
&EditBOAction;
</generic>
Olaf Kaus, OOT, 6.Oktober 2003
11
Lösung: OO-Techniken / Design-Patterns
Quelle: ProgrammGeneration von M. Völter
Olaf Kaus, OOT, 6.Oktober 2003
12
Lösung: Protected Regions
private Customer customer = new Customer();
public boolean isValid(){
// PROTECTED REGION ID(12..3ValidateData) START
// Implementierung der geschützten isValid-Methode
// PROTECTED REGION END
}
// PROTECTED REGION ID(12..3EigeneMethoden) START
// --> Raum für eigene Methoden <-public void setWert(String wert){
}
// PROTECTED REGION END
Olaf Kaus, OOT, 6.Oktober 2003
13
Eingabe der dynamischen Daten
• Entwicklung eines GUI
• Deklarative Beschreibung der Oberfläche
• Eingabemöglichkeiten
•
•
•
•
Textfelder
Auswahllisten (ComboBox)
Selektionen (CheckBox)
Tabelleneingabe
Olaf Kaus, OOT, 6.Oktober 2003
14
Beispiel-Deklaration
<textfield name="mytext" label="Textfeld:" value="Vorbelegter Text"/>
<filebox name="myfile" label="Dateiname:" basepath="c:\" value=""/>
<checkbox name="mycheckbox" label="CheckBox" value="false"/>
<combobox name="mycomboTest" label="ComboBox:">
<entry value="Eintrag 1"/>
<entry value="Eintrag 2" selection="true"/>
</combobox>
<!-- Tabellen-Definition -->
<table name="mytable" label="Table-Test" visiblerows="5">
<column label="Dateiname" typ="FileBox" value="C:\"/>
<column label="Name" typ="TextField" value="Eintrag"/>
<column label="Datentypen" typ="ComboBox">
<entry value="Zeile 1"/>
<entry value="Zeile 2"/>
</column>
<column label="Selektiert" typ="CheckBox" value="true"/>
</table>
Olaf Kaus, OOT, 6.Oktober 2003
15
„GVizard“
Das alles zusammen ergibt:
GVizard!
Olaf Kaus, OOT, 6.Oktober 2003
16
MDA (Model Driven Architecture)
• MDA ist ein relativ neuer Standard der „Object Management Group“
(OMG)
• OMG Gründung in 1989
• Offenes Konsortium aus ca. 800 Firmen
• OMG erstellt herstellerneutrale Spezifikationen zur Verbesserung
der Interoperabilität und Protabilität von Softwaresystemen.
Bekannte Ergebnisse sind:
• CORBA, IDL
• UML, XMI, MOF
• MDA, das neue „Flagschiff“
Olaf Kaus, OOT, 6.Oktober 2003
17
Ziele von MDA
• Entwicklungsgeschwindigkeit erhöhen: Automation durch Formalisierung
(Vergleich zu Produktionsstrassen im Automobilbau)
• Softwarequalität
• Wiederverwendbarkeit
• Wartbarkeit durch Trennung von Verantwortlichkeiten
(Separation of Concerns)
• Handhabbarkeit von Technologiewandel
Olaf Kaus, OOT, 6.Oktober 2003
18
Ansatz von MDA
PIM
Platform Independent
Model via UML-Profil
Fachliche Spezifikation
.NET-Model
J2EE-Model
XML-Model
.NET-Code
J2EE-Code
XML-Code
PSM
Platform Specific
Models via UML-Profil
Implementierung
Regelbasierte Transformationen (Templates) sind i.d.R. Toolgestützt
Olaf Kaus, OOT, 6.Oktober 2003
19
PIM – PSM - Code
public
public
public
public
interface Account extends EJBObject{..
interface AccountHome extends EJBHome{..
abstract class AccountBean implements EntityBean{..
class AccountKey implements java.io.Serializable{..
Quelle: b+m Informatik AG
Olaf Kaus, OOT, 6.Oktober 2003
20
MDA Begriffe (1)
• Modell
• Repräsentation von Struktur, Funktion oder Verhalten eines Systems
• MDA-Modelle sind formal
• Modelliert mittels UML
• Plattform
•
•
•
•
Abstraktionsgrad ist nicht festgelegt
Linux, Windows, .NET, J2EE, Swing, JSP, EJB, XML, …
Anwendungsarchitektur
Plattformen können aufeinander aufbauen
Olaf Kaus, OOT, 6.Oktober 2003
21
MDA Begriffe (2)
• PIM, PSM
• PIM = Abstrahiert von technologischen Details.
•
•
•
Konzepte (Klassen, Abläufe, etc.) der Anwendungsdomäne werden
beschrieben
PSM = Modell (im MDA-Sinne), das die Konzepte (z.B. Schnittstellen) einer
Plattform verwendet, um ein System zu beschreiben.
Programmiersprache, Betriebssystem, Middleware, Applikationsserver,
Datenbank, usw.
Konzepte sind stabiler als Technologien
Formale Modelle besitzen Potential für automatisiere Transformation
• UML-Profile
• UML ist der Rahmen einer Sprachfamilie
• Erweiterungsmechanismen:
• Stereotypen
• Tagged Values
• Modellierungsregeln (Constrains)
Olaf Kaus, OOT, 6.Oktober 2003
22
MDA Entwicklungsprozess
Template
4: Code
erzeugen
1: Templates
entwerfen
Architekt
Generator
XM I
Code
6: Übersetzen
und verpacken
2: Modellieren
Fachdesigner
Build-Skript
Komponenten, DB-Skripten, etc.
UML
3: Modell
attributieren
5: Businesslogik einfügen
7: Deployen
und testen
Entwickler
Quelle: AndroMDA, M. Bohlen
Olaf Kaus, OOT, 6.Oktober 2003
23
MDA Werkzeuge
• Kommerzielle
• ArcStyler (Interactive Objects)
• OptimalJ (Compuware)
• …
(Middelgen Studie)
• OpenSource
• AndroMDA
• b+m Generator
• …
• Unterschiede
• Eingabeformat (XMI), ohne/mit PSM, Template-Sprache (JPyton, Velocity)
Olaf Kaus, OOT, 6.Oktober 2003
24
AndroMDA
• Codegenerierungsframwork nach MDA
• Einsatz von diversen OpenSource-Frameworks
• MDR (XMI-Modelle einlesen mit NetBeans Metadata Repository)
• Velocity als Template-Engine
• Ant als Build/Deploy-Tool
• Steckbare Cartridges unterstützen konkrete Technologien
•
•
•
•
•
Java = allgemein benötigte Objekte
EJB
Hibernate = O/R-Mapping
Struts = MVC Web-Framework
weitere in Arbeit
Olaf Kaus, OOT, 6.Oktober 2003
25
AndroMDA Cartridges
• Cartridge-Meta-Informationen
• XML-Beschreibung
• Realisierte Aspekte
• Stereotypen
• Ausgabekanäle für generierten
•
Code
Namenskonventionen für
generierte Dateien
<cartridge name="struts">
<property name="work"value="struts" />
<stereotype
<stereotype
<stereotype
<stereotype
<outlet
<outlet
<outlet
<outlet
name="WebAction" />
name="WebAppConfig" />
name="WebForm" />
name="WebPage" />
name="forms" />
name="actions" />
name="pages" />
name="config" />
<template
stereotype="WebForm"
sheet="templates/StrutsForm.vsl"
outputPattern="{0}/{1}.java"
outlet="forms"
overWrite="true"
/>
<template …
Olaf Kaus, OOT, 6.Oktober 2003
26
AndroMDA Entwicklungsablauf
Olaf Kaus, OOT, 6.Oktober 2003
27
Zusammenfassung
• Es wird nichts generiert, was nicht vorher in Form einer
Referenzimplementierung verifiziert wurde.
(Qualität/Lesbarkeit, Performance)
•
•
•
•
Ersatz von „Copy-And-Paste“-Programmierung
60% bis 80% des Sourcecodes kann generiert werden
Leistungsteigerung um ca. 30%
UML-Modell (Dokumentation) bleibt bis zum Schluss des Projektes
konsistent.
• ZIEL: „Executable UML“
Olaf Kaus, OOT, 6.Oktober 2003
28
ENDE
Fragen
Olaf Kaus, OOT, 6.Oktober 2003
29
LINKS
•
•
•
•
•
•
•
•
GVizard ab 13.10.2003: www.oo-modeller.de
ProgrammGeneration: www.voelter.de
AndroMDA: www.andromda.org
b+m Generator: www.architectureware.de
MDA Werkzeuge: www.omg.org/mda/committed-products.html
Middlegen Study: www.middleware-company.com
Object Management Group: www.omg.org
Velocity: jakarta.apache.org/velocity
Olaf Kaus, OOT, 6.Oktober 2003
30
Herunterladen