[en] Since their addition in Java 5, annotations have grown from a useful tool to play a central role in many popular software projects; like the Java Persistence API (JPA) or the Spring framework. Annotations are rarely conceived in an isolated way; instead, they are usually part of a set, with dependencies and integrity constraints within them and the elements they are attached to. However, there is no mechanism in Java to express those constraints. Besides, the syntactic support for the de nition of annotations is itself very limited, given that some Java constructions are reused for other purposes. To overcome these de ciencies, I have built the domain-speci c modeling language Ann, which allows making explicit the conceptual model of the constraints behind a set of annotations. A modeling environment is also provided to de ne the annotation models with a more homogeneous sintax within the rest of Java elements. In addition, a Java code generator has been implemented in order to integrate the designed sets of annotations with existing projects in such language. Ann has been developed using the Eclipse Modeling Framework. A subset of JPA annotations has been chosen for the validation of Ann, and several constraints within them and with the elements they decorate have been expressed. The result has been very satisfying, given that the underlying conceptual model has been expressed almost entirely. With respect to other similar tools, Ann has proven to have an added value in di erent shared areas of application. Regarding to possible future lines of work, there is a huge number of possibilities, such as applications in reverse engineering or language extensions, given that annotations are a feature relatively recent and the Java support is very limited nowadays. I was granted a Collaboration Scholarship by the Spanish Ministry of Education for the development of this project.

[es] Desde su introducción en Java 5, las anotaciones han pasado de ser una herramienta útil a jugar un papel central en muchos proyectos software populares, como por ejemplo la Java Persistence API (JPA), API para la persistencia de objetos Java, o el framework de construcción de aplicaciones Spring. Las anotaciones raramente se conciben de forma aislada, sino que forman un conjunto con interdependencias y restricciones de integridad entre ellas y los elementos que anotan; sin embargo, Java no ofrece un mecanismo para la expresión de dichas restricciones. Además, el soporte sintáctico para la de nición de anotaciones es en sí mismo muy limitado, dado que se reutilizan construcciones Java para otros propósitos. Para suplir estas carencias se ha construido el lenguaje de modelado de dominio especí co Ann, que permite hacer explícito el modelo conceptual de restricciones que hay detrás de un conjunto de anotaciones. Se proporciona así mismo un entorno de modelado para de nir los modelos de anotaciones con una sintaxis más acorde al resto de elementos de Java; y un generador de código Java para integrar los conjuntos de anotaciones diseñados en proyectos ya existentes en dicho lenguaje. El desarrollo de Ann se ha realizado mediante la Eclipse Modeling Framework. En la validación de Ann se ha utilizado un subconjunto de anotaciones de JPA y se han expresado distintas restricciones de integridad entre ellas y con los elementos que anotaban. El resultado ha sido muy satisfactorio, al haber conseguido expresar el modelo conceptual subyacente casi al completo. Respecto a otras herramientas similares, Ann ha demostrado tener un valor añadido en distintos ámbitos de aplicación comunes. Además se dispone de un amplio abanico de posibles líneas de trabajo futuro, como por ejemplo aplicaciones en la ingeniería inversa o extensiones al lenguaje, al ser las anotaciones una característica relativamente reciente y el soporte actual de Java muy limitado. Para la realización de este proyecto me fue concedida una Beca de Colaboración por el Ministerio de Educación de España.