Date post: | 06-Apr-2015 |
Category: |
Documents |
Upload: | aurel-allgeyer |
View: | 104 times |
Download: | 0 times |
Generative Softwareentwicklung in der Praxis
Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003
Olaf Kaus, OOT, 6.Oktober 2003 2
Ü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 3
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 4
Ergebnis
Ein Blick auf KIBS!
Olaf Kaus, OOT, 6.Oktober 2003 5
Lösungsweg: Analyse
• Erstellen von verschiedenen Datei-Typen• Java, JSP, HTML, XML
• Einsatz von Datei-Schablonen(Templates)
• Platzhalter in DateiHallo Herr ${empfänger}…
• Templates müssen Logik enthaltenHallo {if empfänger.geschlecht==mänlich:}Herr{?}Frau…
Olaf Kaus, OOT, 6.Oktober 2003 6
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 Handhabung1. Erstellen des Templates
2. Anreichern mit dynamischen Daten
3. Generieren der Ausgabedatei
Olaf Kaus, OOT, 6.Oktober 2003 7
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 8
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 9
Velocity-Context
// InitialisiernVelocity.init();
// Context aufbauen und füllenVelocityContext context = new VelocityContext();context.put( “user", new String(“Olaf Kaus") );context.put( “customer", new Customer() );
// Template einlesenTemplate template = null;template = Velocity.getTemplate(“skilltemplate.vm");
// Template und Context zusammenführenStringWriter sw = new StringWriter();template.merge( context, sw );
Olaf Kaus, OOT, 6.Oktober 2003 10
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 11
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 12
Lösung: OO-Techniken / Design-Patterns
Quelle: ProgrammGeneration von M. Völter
Olaf Kaus, OOT, 6.Oktober 2003 13
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 14
• Entwicklung eines GUI
• Deklarative Beschreibung der Oberfläche
• Eingabemöglichkeiten• Textfelder
• Auswahllisten (ComboBox)
• Selektionen (CheckBox)
• Tabelleneingabe
Eingabe der dynamischen Daten
Olaf Kaus, OOT, 6.Oktober 2003 15
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 16
„GVizard“
Das alles zusammen ergibt:
GVizard!
Olaf Kaus, OOT, 6.Oktober 2003 17
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 18
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 19
Ansatz von MDA
Fachliche Spezifikation
.NET-Model XML-ModelJ2EE-Model
.NET-Code XML-CodeJ2EE-Code
PIMPlatform Independent Model via UML-Profil
PSMPlatform Specific Models via UML-Profil
Implementierung
Regelbasierte Transformationen (Templates) sind i.d.R. Toolgestützt
Olaf Kaus, OOT, 6.Oktober 2003 20
PIM – PSM - Code
public interface Account extends EJBObject{.. public interface AccountHome extends EJBHome{.. public abstract class AccountBean implements EntityBean{.. public class AccountKey implements java.io.Serializable{..
Quelle: b+m Informatik AG
Olaf Kaus, OOT, 6.Oktober 2003 21
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 22
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 23
MDA Entwicklungsprozess
Architekt
1: Templatesentwerfen
Fachdesigner
2: Modellieren
Entwickler
3: Modellattributieren
UML
Generator
4: Codeerzeugen
Template
XM I
5: Business-logik einfügen
Code
Build-Skript
6: Übersetzenund verpacken
7: Deployenund testen
Komponenten, DB-Skripten, etc.
Quelle: AndroMDA, M. Bohlen
Olaf Kaus, OOT, 6.Oktober 2003 24
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 25
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 26
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 name="WebAction" /> <stereotype name="WebAppConfig" /> <stereotype name="WebForm" /> <stereotype name="WebPage" />
<outlet name="forms" /> <outlet name="actions" /> <outlet name="pages" /> <outlet name="config" />
<template stereotype="WebForm" sheet="templates/StrutsForm.vsl" outputPattern="{0}/{1}.java" outlet="forms" overWrite="true" />
<template …
Olaf Kaus, OOT, 6.Oktober 2003 27
AndroMDA Entwicklungsablauf
Olaf Kaus, OOT, 6.Oktober 2003 28
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 29
ENDE
Fragen
Olaf Kaus, OOT, 6.Oktober 2003 30
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