Upload
rufus
View
28
Download
0
Embed Size (px)
DESCRIPTION
Vortrag im Rahmen des Seminars Modellgetriebene Softwareentwicklung Nico Suchold suchold @ cs.uni-magdeburg.de. openArchitectureWare Tool-Suite für modellgetriebene Softwareentwicklung. Inhalt. Historie und Einordnung Kern-Kompetenz Das Generator-Framework Metamodellierung Templates - PowerPoint PPT Presentation
Citation preview
Seminar Modellgetriebene Softwareentwicklung
openArchitectureWareTool-Suite für modellgetriebene Softwareentwicklung
Vortrag im Rahmen des Seminars Modellgetriebene Softwareentwicklung
Nico Sucholdsuchold @ cs.uni-magdeburg.de
openArchitectureWareNico Suchold 2
Seminar Modellgetriebene Softwareentwicklung
Inhalt
Historie und Einordnung
Kern-Kompetenz
Das Generator-Framework
Metamodellierung
Templates
Integration
Zusammenfassung und Ausblick
openArchitectureWareNico Suchold 3
Seminar Modellgetriebene Softwareentwicklung
Historie und Einordnung
entstanden aus dem kommerziellen Produkt b+m Generator FrameWork der b+m Informatik AG
wurde 14.09.2003 unter LGPL (Lesser General Public License) als Open Source zur Verfügung gestellt
Java-implementiertes, MDSD-konformes Framework Metamodell-basierte, domainspezifische Sprachen (abstrakte
Syntax, konkrete Syntax) Transformation durch Templates (Semantik) definierte Plattform manuelle Ergänzung
openArchitectureWareNico Suchold 4
Seminar Modellgetriebene Softwareentwicklung
Kern-Kompetenz
Jede Form von Modellinformationen ist auswertbar
beliebige Ausgabeformate generierbar (Java, XML, PHP etc.)
explizites Domain-Metamodell
einfache Template-Sprache
gute Integrationsfähigkeit
umfangreiche Dokumentation
openArchitectureWareNico Suchold 5
Seminar Modellgetriebene Softwareentwicklung
Das Generator-Framework
Parser analysiert Inputmodell (z.B. XMI-Format) Instantiator bildet Instanzen des Metamodells zum
geparsten Modell auf Basis Plattform-spezifischer Templates erzeugt Code
Generator den zu generierenden Code
openArchitectureWareNico Suchold 6
Seminar Modellgetriebene Softwareentwicklung
Metamodellierung I
reduziertes, praxis-orientiertes UML-Metamodell vorhanden und bildet Basis-Metamodell
wird repräsentiert durch Basis-Metaklassen des Generator-Frameworks
Basis-Metamodell wird um Elemente der eigenen Anwendungsarchitektur erweitert um DSL abzubilden
openArchitectureWareNico Suchold 7
Seminar Modellgetriebene Softwareentwicklung
Metamodellierung II
für abgeleitete Element des Metamodells müssen die jeweiligen Metaklassen erstellt werden
am einfachsten mittels Vererbung der Basis-Metaklassen und Implementierung speziell benötigter Methoden zu realisieren
openArchitectureWareNico Suchold 8
Seminar Modellgetriebene Softwareentwicklung
Metamodellierung III
mittels der Mapping-Datei wird z.B. der Stereotyp Geschaeftsobjekt auf die erstellte Metaklasse Geschaeftsobjekt abgebildet
<MetaMap><Mapping>
<Map>Geschaeftsobjekt</Map>
<To>Geschaeftsobjekt</To></Mapping>
</MetaMap>
openArchitectureWareNico Suchold 9
Seminar Modellgetriebene Softwareentwicklung
Metamodellierung IV
Instantiierung
<MetaMap><Mapping>
<Map>Geschaeftsobjekt</Map>
<To>Geschaeftsobjekt</To>
</Mapping></MetaMap>
<MetaMap><Mapping>
<Map>Geschaeftsobjekt</Map>
<To>Geschaeftsobjekt</To>
</Mapping></MetaMap>
openArchitectureWareNico Suchold 10
Seminar Modellgetriebene Softwareentwicklung
Templates I
dienen der Beschreibung der Codegenerierungsvorschriften
werden mit oAW-eigener Sprache Xpand erstellt
sehr einfache Sprache mit wenigen Sprachelementen
Templatedatei besteht aus beliebig vielen DEFINE-Blöcken
Rumpf der DEFINE-Blöcke enthält beliebigen Text, Tags mit << und >> geklammert und Xpand-Kommentare
Tags steuern die Generierung und Text wird unverändert in den Output geschrieben
openArchitectureWareNico Suchold 11
Seminar Modellgetriebene Softwareentwicklung
Templates II
openArchitectureWareNico Suchold 12
Seminar Modellgetriebene Softwareentwicklung
Templates III
<<DEFINE Root FOR Geschaeftsprozess>><<FILE Name“.java“>>
public class <<Name>> // Geschaeftsprozess { <<EXPAND PropertyDef FOREACH Attribute>> <<EXPAND MethodDef FOREACH Operation>> }
<<ENDFILE>><<ENDDEFINE>><<DEFINE PropertyDef FOR Attribute>>
private <<Type>> <<Name>>; public void <<Name.asSETTER>>(<<Type>> <<Name.asPARAM>>) { <<Name>> = <<Name.asPARAM>>; } public <<Type>> <<Name.asGETTER>> () { return <<Name>>; }<<ENDDEFINE>><<DEFINE MethodDef FOR Operation>>
<<Visibility>> <<ReturnType>> <<Name>> <<NONL>>(<<FOREACH Parameter AS curParam EXPAND USING SEPARATOR “,
“ >> <<curParam.Type>> <<curParam.asPARAM>>
<<ENDFOREACH>>) { <<NL>><<PROTECT CSTART ‘/*’ CEND ‘*/’ ID Id>>
// place code here<<ENDPROTECT>>
}<<ENDDEFINE>>
<<DEFINE Root FOR Geschaeftsprozess>><<FILE Name“.java“>>
public class <<Name>> // Geschaeftsprozess { <<EXPAND PropertyDef FOREACH Attribute>> <<EXPAND MethodDef FOREACH Operation>> }
<<ENDFILE>><<ENDDEFINE>><<DEFINE PropertyDef FOR Attribute>>
private <<Type>> <<Name>>; public void <<Name.asSETTER>>(<<Type>> <<Name.asPARAM>>) { <<Name>> = <<Name.asPARAM>>; } public <<Type>> <<Name.asGETTER>> () { return <<Name>>; }<<ENDDEFINE>><<DEFINE MethodDef FOR Operation>>
<<Visibility>> <<ReturnType>> <<Name>> <<NONL>>(<<FOREACH Parameter AS curParam EXPAND USING SEPARATOR “,
“ >> <<curParam.Type>> <<curParam.asPARAM>>
<<ENDFOREACH>>) { <<NL>><<PROTECT CSTART ‘/*’ CEND ‘*/’ ID Id>>
// place code here<<ENDPROTECT>>
}<<ENDDEFINE>>
public class RechnungErstellen // Geschaeftsprozess{
private int interneNummer;
public void setinterneNummer( int pinterneNummer ) {
interneNummer = pinterneNummer;}public int getinterneNummer () {
return interneNummer;}
public void erstelleRechnungFuerKunde(int pKundennummer) {
/*PROTECTED REGIONID(I197eb84m10365753ca2mm4784) START*/
// place code here/*PROTECTED REGION END*/
}}
public class RechnungErstellen // Geschaeftsprozess{
private int interneNummer;
public void setinterneNummer( int pinterneNummer ) {
interneNummer = pinterneNummer;}public int getinterneNummer () {
return interneNummer;}
public void erstelleRechnungFuerKunde(int pKundennummer) {
/*PROTECTED REGIONID(I197eb84m10365753ca2mm4784) START*/
// place code here/*PROTECTED REGION END*/
}}
generierte Datei RechnungErstellen.java
Ausschnitt aus der Templatedatei
instantiierte Metaklasse aus dem Modell
openArchitectureWareNico Suchold 13
Seminar Modellgetriebene Softwareentwicklung
Integration
Projekte zur Integration in UML-Werkzeuge
verschiedene unterstützte UML Dialekte ARIS UML-Designer Gentleware Poseidon for UML Rational Rode + UniSys XML Tools
eigenes Plugin für Integration von oAW in Eclipse anzupassende Build-Skripte auf ANT-Basis Xpand Template Editor Content Outline Page Analyse von Generatorausgaben
openArchitectureWareNico Suchold 14
Seminar Modellgetriebene Softwareentwicklung
Zusammenfassung und Ausblick
leichter Einstieg durch Tutorials und Dokumentation
flexibles Framework zur Generierung von Applikationen
Version 4 Anfang 2006 bessere Integration in Eclipse (besseres debuggen) EMF – Unterstützung Erweiterung von XPand
openArchitectureWareNico Suchold 15
Seminar Modellgetriebene Softwareentwicklung
Quellenangaben
b+m Informatik AG: Open Generator Framework Referenz, http://architecturware.sourceforge.net/data/openGeneratorFrameWorkReference_de.pdf
Völter M.: Modellgetriebende Softwareentwicklung, http://architecturware.sourceforge.net/data/MDSD.pdf
Völter M.: Metamodellbasierte Codegenerierung in Java, http://architecturware.sourceforge.net/data/MetaModelBasedCodeGen.pdf
Grund M.: MDA Tools, Hasso-Plattner-Institut, http://www.grundprinzip.de/files/MDA_Tools-Martin_Grund.pdf
Thoms K., Holzer B.: Java Magazin 07/2005, Codegenerierung mit dem openArchitectureWare Generator 3.0: The next Generation, http://www.itemis.de/pdf/jm_7_05_94_97.pdf
Thoms K., Gruske M.: Java Magazin 08/2005, openArchitectureWare, Teil 2: Metamodellierung und Tool-Integration: Wenn Architektur zur Ware wird, http://www.itemis.de/pdf/jm_8_05_67_71.pdf
openArchitectureWareNico Suchold 16
Seminar Modellgetriebene Softwareentwicklung
Vielen Dank für Ihr Interesse !