Creëer je eigen DSL tools met Eclipse De Android Challenge Lex Heerink, Peter Ebben, Jaap Reitsma, Maarten Steen Telematica Instituut
De aanleiding Freeband A-MUSE project Specificatie en ontwerp van mobiele diensten Model gebaseerde ontwikkeling staat centraal Open Handset Alliance introduceert Android Nieuw, veelbelovend platform voor mobiele apps Android Challenge Android als casus Geen killer app The Android Developer Challenge will award $10 million to developers who build great apps for Android. maar ontwikkelstraat voor killer apps volgens MDD filosofie
Het proces 1. Kennisopbouw Android documentatie Prototype applicatie 2. Metamodel definiëren 3. Applicatiemodel definiëren 4. Code templates definiëren 5. Code genereren 6. Itereren 7. Applicatie editor genereren 8. Itereren Kennisopbouw Android documentatie Android metamodel metamodel Android app model app model Android code code prototype applicatie MDD code templates app model editor code engine Instrumenten Legenda meta model app model code
Kennisopbouw: het domein van Android Android SDK Features o.a. Internet, telefonie, camera, GPS, BT, Emulator ondersteuning Belangrijkste applicatie concepten Views (schermen), Activities (taken) en Data Relatie tussen schermen en taken Starten van nieuwe taken Voorbeelden van toepassingen Navigeren met plaatjes Mobiele reisgids Weer informatie
Eclipse als platform voor de ontwikkelstraat Open-source IDE primair voor Java, uitbreidbaar modellen templates «IMPORT «IMPORT "http://www.telin.nl/android"» "http://www.telin.nl/android"» «IMPORT «IMPORT "http://www.eclipse.org/emf/2002/ecore"» "http://www.eclipse.org/emf/2002/ecore"» «IMPORT «IMPORT "http://www.eclipse.org/emf/2002/genmodel"» "http://www.eclipse.org/emf/2002/genmodel"» «EXTENSION «EXTENSION xpt::common::naming» xpt::common::naming» «REM» «REM» Generates Generates an an XML XML element element for for a a specific specific view, view, including including optional optional namespace namespace declaration, declaration, view view properties, properties, layout layout properties properties (if (if specified) specified) and and optional optional child child views. views. «ENDREM» «ENDREM» «DEFINE «DEFINE View(boolean View(boolean istoplevelview) istoplevelview) FOR FOR android::view::view-» android::view::view-» <«EXPAND <«EXPAND ViewName::ViewName-» ViewName::ViewName-» «IF «IF istoplevelview-» istoplevelview-» xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android" «ELSE-» «ELSE-» «IF «IF name name!=!= null null && && name.length() name.length() > > 0-» 0-» android:id="@+id/«viewidentifier(this)»" android:id="@+id/«viewidentifier(this)»" «ENDIF-» «ENDIF-» «ENDIF-» «ENDIF-» «EXPAND «EXPAND ViewProperties::ViewProperties-» ViewProperties::ViewProperties-» «IF «IF layoutparameters layoutparameters!=!= null-» null-» «EXPAND «EXPAND LayoutProperties::LayoutProperties LayoutProperties::LayoutProperties FOR FOR layoutparameters-» layoutparameters-» codegeneratie (Xpand) genereren van code uit modellen editor configuratie Eclipse Modelling Framework (EMF) creëren en beheren van modellen Graphical Modelling Framework (GMF) genereren van grafische model editor
Creëren van een Android metamodel Op basis van de kennisopbouw Beschreven in Ecore (EMF) Het opstellen van een goed metamodel is complex Vaak zijn meerdere iteraties nodig Onze aanpak: klein beginnen stapsgewijs uitbreiden
Een eenvoudige toepassing Navigeren door lijst van contacten Bij selectie bellen MDD vereist een applicatiemodel Tree editor beschikbaar maar lastig in gebruik Grafische editor niet beschikbaar maar prettiger
Een grafische editor voor Android modellen Genereren ipv bouwen Met behulp van GMF GMF 2. Grafische representatie 1. MetaModel 4. Mapping 3. Tool Palette
Het grafisch applicatiemodel van de toepassing View Specifieren van de layout Naam: <naam> Activiteit Specificeren van de acties Verwijst naar View Ophalen <naam> uit lijst van contacten Specificeren van actie bij selectie
AndroMate: de ontwikkelstraat voor Android Opstellen metamodel Constant per applicatie code templates Specificeren applicatiemodel model editor application model Code generatie Voor elke applicatie opnieuw Invullen gaten (5 regels code voor onze applicatie) code applicatie
Het gevolgde ontwikkelproces (kwalitatief) Veranderingen aan het metamodel sijpelen door code template, grafische editor, modellen Domein study tijd Metamodelleren Code templates Editor Modelleren feedback Code voorstudie bouwen van de ontwikkelstraat
Conclusies en ervaringen Eclipse is goed uitgerust voor MDD EMF voor modellen, GMF voor grafische model editor, Xpand voor codegeneratie Nieuwe technologie kinderziektes MDD geeft harde link tussen requirements en code Staat dichter bij domein experts dan traditioneel ontwerptraject Zorg voor stabiele metamodellen Veranderingen propageren door in modellen, templates, editor en code Productiviteitsstijging in ontwikkelomgeving Rudimentaire grafische editor vrij snel operationeel Schatting: O(10) sneller dan zelfbouw Ervaring rijker (Eclipse en MDD), illusie armer (geen prijs)