300 likes | 452 Views
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
E N D
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)
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)
Ergebnis Ein Blick auf KIBS!
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…
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 • Erstellen des Templates • Anreichern mit dynamischen Daten • Generieren der Ausgabedatei
Velocity Template-Syntax Platzhalter ${variablenname} Schleifen #foreach( $row in $variablenname) ${row} #end Bedingungen #if( $variablenname==true) mach was #end
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>
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 );
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“)
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>
Lösung: OO-Techniken / Design-Patterns Quelle: ProgrammGeneration von M. Völter
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
Eingabe der dynamischen Daten • Entwicklung eines GUI • Deklarative Beschreibung der Oberfläche • Eingabemöglichkeiten • Textfelder • Auswahllisten (ComboBox) • Selektionen (CheckBox) • Tabelleneingabe
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>
„GVizard“ Das alles zusammen ergibt: GVizard!
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“
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
Ansatz von MDA Fachliche Spezifikation PIMPlatform Independent Model via UML-Profil .NET-Model J2EE-Model XML-Model PSMPlatform Specific Models via UML-Profil .NET-Code J2EE-Code XML-Code Implementierung Regelbasierte Transformationen (Templates) sind i.d.R. Toolgestützt
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
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
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)
Template 4: Code 1: Templates erzeugen entwerfen Architekt Generator XM I Code 6: Übersetzen 2: Modellieren und verpacken Fachdesigner Build-Skript Komponenten, DB-Skripten, etc. UML 7: Deployen 5: Business- 3: Modell und testen logik einfügen attributieren Entwickler MDA Entwicklungsprozess Quelle: AndroMDA, M. Bohlen
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)
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
AndroMDA Cartridges <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 … • Cartridge-Meta-Informationen • XML-Beschreibung • Realisierte Aspekte • Stereotypen • Ausgabekanäle für generierten Code • Namenskonventionen für generierte Dateien
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“
ENDE Fragen
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