====== Generic Code Generators ====== **Begeleider(s):** [[mailto:dennis.wagelaar@vub.ac.be|Dennis Wagelaar]], [[mailto:johan.brichau@vub.ac.be|Johan Brichau]], [[mailto:thomas.cleenewerck@vub.ac.be|Thomas Cleenewerck]] **Promotor:** Prof. Dr. [[mailto:vejoncke@ssel.vub.ac.be|Viviane Jonckers]] ===== Onderwerp ===== Model-Driven Architecture (MDA)[1] en Model-Driven Software Development (MDSD)[2] in het algemeen winnen steeds meer aan populariteit. Het stelt software-ontwikkelaars in staat om vanuit platform-onafhankelijke modellen uiteindelijk de applicatie-code geheel of gedeeltelijk te genereren. Dit voorkomt niet alleen het extra werk van de vertaling van een model naar implementatie, maar opent ook de mogelijkheid modellen naar alternatieve implementaties te vertalen (bijv. voor andere programmeertalen, middleware platformen of zelfs voor andere kwaliteitseisen [3]). Er blijft dan nog een belangrijke kwestie over: welk modelleer-platform gebruiken we? Nu is er een standaard modelleertaal voor object-georiënteerd ontwerp: de Unified Modeling Language (UML)[4], maar zelfs deze taal is niet universeel bruikbaar. De makers van UML hebben dit zelf reeds onderkend en hebben om deze redenen uitbreidingsmechanismen ontwikkeld voor UML, stereotypes, profiles en de Meta Object Facility (MOF)[5]. MOF heeft van al deze uitbreidingsmechanismen de meeste uitdrukkingskracht: er kunnen volledig nieuwe modelleertalen worden beschreven in MOF. Voor tool support is UML (zonder uitbreidingen) echter al zeer complex: het is zeer arbeidsintensief om een tool te maken die met de volledige UML taal overweg kan. Binnen SSEL wordt er gewerkt aan een modelleeromgeving, genaamd CoCompose2, welke is gebaseerd op een in MOF gespecificeerde modelleertaal. Het grootste verschil met UML (welke nu ook in MOF is gespecificeerd) is dat CoCompose2 maar één echte taalconstructie introduceert: een concept. Alle andere taalconstructies, die de ontwikkelaar graag zou gebruiken, worden hier bovenop gezet. Zo is het mogelijk om standaard UML constructies te introduceren, maar ook andere (al dan niet domein-specifieke) taalconstructies, zoals aspecten [6, 7] en design patterns [8]. CoCompose2 kan vervolgens automatisch bepalen hoe de modellen verfijnd kunnen worden naar code [9]. {{teaching:thesis0405:proposals:cocompose-eclipse-scrshot.png?588}} **Figure 1:** A screenshot of the CoCompose2 tool Om CoCompose2 echt bruikbaar te laten zijn, moet het mogelijk zijn om broncode te genereren vanuit de (reeds verfijnde) CoCompose2 modellen. Hier neemt CoCompose2 vanuit modelleer-perspectief reeds het generieke gedeelte voor zijn rekening. Nu is er nog een code generator nodig, die hergebruikt kan worden over zoveel mogelijk programmeertalen, die al dan niet object-georiënteerd zijn. Technologieën die hierbij kunnen helpen zijn templating engines, zoals Apache Velocity [10], maar dat is niet voldoende. In CoCompose2 worden ontwikkelaars in staat gesteld om hun eigen code-sjablonen op aangegeven plaatsen in te voegen: deze code moet vervolgens op de goede plaats worden ingevoegd, en bepaalde zaken, zoals "import" statements, moet verplaatst worden naar de juiste plek. Binnen PROG wordt er onderzoek verricht naar generieke aspect weavers, welke o.a. de hiervoor genoemde operaties kunnen uitvoeren [11]. Daarnaast wordt er onderzoek verricht naar hoe Keyword-Based Programming de herbruikbaarheid van code generators kan verbeteren [12]. ===== Stage ===== In de stage wordt kennis gemaakt met de verschillende technologieën. Er zal worden bekeken hoe Apache Velocity kan worden gebruikt om code te genereren en tot in hoeverre de Velocity macro taal kan worden gebruikt voor weaving. Daarnaast zal worden bekeken hoe Logic Meta-Programming gebruikt kan worden voor weaving en verificatie (zie ook [11]). Ook zullen experimenten worden uitgevoerd met Keyword-Based Programming (zie [12]). Alle experimenten zullen uitgaan van modellen beschreven met CoCompose2. Als afsluiting zal een evaluatie kunnen worden gemaakt van de toepasbaarheid van deze en evt. andere technologieën. ===== Thesis ===== In de thesis zal worden bekeken hoe de onderzochte code generatie technologieën kunnen worden geïntegreerd om te komen tot een code generator, die herbruikbaar is over verschillende programmeertalen. Er zal een code generator worden ontwikkeld voor CoCompose2 op basis van deze technologieën. Deze code generator zal in ieder geval code voor Java en een andere taal naar keuze moeten kunnen genereren. ===== Vereiste Voorkennis ===== De volgende onderwerpen zijn verplichte voorkennis: * Object-georiënteerd ontwerpen in UML [4] * Design patterns [8] * Programmeren in Java [13] Het zou daarnaast praktisch zijn om enige bekendheid te hebben met: * Eclipse [14] * Aspect-georiënteerde software-ontwikkeling (AOSD) [15] * Component-gebaseerde software-ontwikkeling (CBSD) [16] * CoCompose2 ;-) ===== Referenties ===== [1] J. Miller and J. Mukerji. MDA Guide. Object Management Group, Inc. June 2003, Version 1.0.1. [Online] http://www.omg.org/cgi-bin/apps/doc?omg/03-06-01.pdf [2] J. Bettin. Model-Driven Software Development. SoftMetaWare Ltd. May 2004, Version 0.7. [Online] http://www.softmetaware.com/mdsd-and-isad.pdf [3] B. Tekinerdogan and M. Aksit. Synthesis Based Software Architecture Design. In (M. Aksit, ed.): Software Architectures and Component Technology, pp. 143-173, Kluwer Academic Publishers. Dordrecht, The Netherlands, October 2001. ISBN 0-7923-7576-9. [4] Object Management Group, Inc. Unified Modeling Language Specification. March 2003, Version 1.5. [Online] http://www.omg.org/docs/formal/03-03-01.pdf [5] Object Management Group, Inc. Meta Object Facility (MOF) Specification. April 2002, Version 1.4. [Online] http://www.omg.org/docs/formal/02-04-03.pdf [6] S. Clarke and R. Walker. Towards a Standard Design Language for AOSD. In (G. Kiczales, ed.): Proceedings of the 1st International Conference on Aspect-Oriented Software Development (AOSD 2002), pp. 113-119, ACM Press. Enschede, The Netherlands, April 2002. ISBN 1-58113-469-x. [7] D. Stein, S. Hanenberg and R. Unland. An UML-based Aspect-Oriented Design Notation For AspectJ. In (G. Kiczales, ed.): Proceedings of the 1st International Conference on Aspect-Oriented Software Development (AOSD 2002), pp. 106-112, ACM Press. Enschede, The Netherlands, April 2002. ISBN 1-58113-469-x. [8] E. Gamma, R. Helm, R. Johnson and J. Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. Addison Wesley, Reading, Massachusetts, USA. 1st Edition, January 1995. ISBN 0-201-63361-2. [9] D. Wagelaar. Context-Driven Model Refinement. Submitted to the MDAFA 2004 workshop, Linköping, Sweden, published in Lecture Notes in Computer Science, Springer Verlag. June 2004. [Online] http://ssel.vub.ac.be/Members/DennisWagelaar/docs/WagelaarMDAFA2004.pdf [10] Apache Velocity website: http://jakarta.apache.org/velocity [11] Johan Brichau, Kim Mens, Kris De Volder. Building composable aspect-specific languages. In: Proceedings of the International Conference on Generative Programming and Component Engineering, published in Lecture Notes in Computer Science 2487, pp. 110-127, Springer-Verlag, 2002. [Online] ftp://prog.vub.ac.be/tech_report/2002/vub-prog-tr-02-17.pdf [12] T. Cleenewerck. Component-Based DSL Development. In: Proceedings of the International Conference on Generative Programming and Component Engineering, published in Lecture Notes in Computer Science 2830, pp. 245-264, Springer-Verlag, 2003. [Online] ftp://prog.vub.ac.be/tech_report/2003/vub-prog-tr-03-21.pdf [13] Java website: http://java.sun.com [14] Eclipse website: http://www.eclipse.org [15] AOSD website: http://aosd.net [16] C. Szyperski. Component Software: Beyond Object-Oriented Programming. Addison Wesley, Reading, Massachusetts, USA, 1998.