Tema 5 - Soporte a meta-modelado - Technical University of ...

74
eclipse en el soporte al desarrollo de software desarrollo de software Abel Gómez Llana [agomez@dsic upv es] Abel Gómez Llana [agomez@dsic.upv.es]. 15-19 de Septiembre 2008. Universidad Politécnica de Valencia. Facultad de Informática. 1

Transcript of Tema 5 - Soporte a meta-modelado - Technical University of ...

eclipse en el soporte al desarrollo de softwaredesarrollo de software

Abel Gómez Llana [agomez@dsic upv es]Abel Gómez Llana [[email protected]].15-19 de Septiembre 2008.Universidad Politécnica de Valencia. Facultad de Informática.

1

Eclipse y el soporte a modelado/metamodeladomodelado/metamodelado

19 de Septiembre de 200819 de Septiembre de 2008

2

Contenido

• Introducción a Eclipse Modeling Framework

– Antecedentes

– Vista general de EMF

– El metamodelo Ecore

– Creación de un metamodelo

– Generación de código y editores

– Uso del código generado y persistencia

• Generación de editores visuales: Graphical Modeling

FrameworkFramework

3Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Eclipse Modeling Framework

4

Antecedentes

5

El estándar MOF• MOF (Meta-Object Facility) es un estándar para ingeniería

dirigida por modelos propuesto por el OMG (ObjectM t G )Management Group).

• Entre los objetivos de MOF están la definición de un marco que dé soporte a modelado y metamodelado, así como proporcionar mecanismos de interoperabilidad eproporcionar mecanismos de interoperabilidad e intercambio de modelos.

• El estándar proporciona una estricta arquitectura de 4 niveles, donde cada elemento del nivel x es instancia de un elemento del nivel x+1.

• El lenguaje MOF puede considerarse como un subconjunto del diagrama de clases UML, y en su versión actual, proporciona dos variantes: EMOF (Essential MOF) y CMOFproporciona dos variantes: EMOF (Essential MOF) y CMOF (Complete MOF).

• MOF se relaciona con otros numerosos estándares: UML, OCL, XMI, JMI, QVT, etc.XMI, JMI, QVT, etc.

6Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Arquitectura de niveles MOFq

MOFEcore MOF

M3

Leve

l Ecore

UMLmetamodel

relationalmetamodel

OWL

M2

Leve

l

C lase1

Clase2

1

*

DC1-codigo : int-fecha : Date

Factura-descripcion : string-horas : float

LineaFactura-codigo : int-descriptor : string-precio/hora : float

Tarea

-dni : string-nom bre : string

Propietario -codigo : int-situacion : string-descripcion : string-tam año : float

Propiedad-codigo : int-nom bre : string-dni : string-telefono : string

Trabajador

1 *0..* 1

0..*

1..*

0..*

1

1 0..*

DC2

Invo ice

PK code

date

InvoiceLine

PK invoice_codePK num ber

price hoursFK 1 code

relational schema ontology

M1

Leve

l

codigo : int = 0fecha : Date = 01/12/2004

F1 : Facturadescripcion : string = ""horas : float = 2

LF1 : LineaFactura

descripcion : stringLF2 : L ineaFactura

codigo : int = 002descriptor : string = podaprecio /hora : float = 7

T1 : Tarea

Instances TuplesOntology instance

0 Le

vel

7Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

descripcion : stringhoras : float = 2 ,5M

0

Introducción a EMF

8

Eclipse Modeling Framework• EMF es un framework que proporciona herramientas

para creación de modelos.

p g

para creación de modelos.• EMF proporciona capacidades de generación de código

Java de forma automática.Ad á i d f t áti l• Además, proporciona de forma automática los mecanismos de persistencia para las instancias de estos modelos en formato XMI.

• Como lenguaje de modelado (meta-metamodelo) proporciona el lenguaje Ecore. Ecore puede considerarse como una implementación del lenguaje EMOF.

• En la distribución clásica de Eclipse no se incluye EMF. Para poder usarse de instalarse mediante un sitio de actualizaciones.actualizaciones.

9Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Eclipse Modeling Framework• Componentes EMF

Core Runtime

p g

– Core Runtime• Provee la generación básica y el soporte de ejecución para la

creación de la implementación de las clases Java de un modelo.

• Metamodelo Ecore• Persistencia, validación y cambios del modelo.

– EMF.edit framework• Extiende el modelo base de EMF con clases genéricas reusables

para el soporte de:– Visores de modelos– Modificaciones del modelo basada en línea de comandos– Editores para los modelos EMF

– CodegenP i l i d ió d ódi• Proporciona los mecanismos de generación de código.

10Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Eclipse Modeling Framework

• Arquitectura de EMF

p g

Aplicación usuario Modelo Editor

EMF Runtime

Herramientas EMF Codegen

EditCore

Plataforma Eclipse

11Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Eclipse Modeling Framework• ¿Qué es un modelo EMF?

– La especificación de los datos de una aplicación

p g

La especificación de los datos de una aplicación• Atributos de los objetos• Relaciones entre objetos• Operaciones que puede realizar cada objeto• Restricciones simples en objetos y relaciones (multiplicidad)

– En esencia, el diagrama de clases de UML.• EMF utiliza XMI como la forma canónica para la

definición de un modelo. Existen varias formas para de definirlo:– Java anotado (interfaces).– Diagrama de clases UML (Proyecto UML2 de Eclipse o

Rational Rose).– XML Schema.

12Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

El metamodelo Ecore

13

El metamodelo Ecore• Subconjunto simplificado de Ecore (especificado en el mismo Ecore

—Ecore se define a sí mismo—):

lowerBound: EIntmany: EBooleanordered: EBooleanrequired: EBoolean

i EB l

ETypedElement

name: EString

ENamedElement

)

EClassifier EPackage EStructuralFeature

unique: EBooleanupperBound: EInt

ePackage

0 1

eClassifiers

*

*

eSubpackages

S P k

0..1

nsPrefix: EStringnsURI: EString

EClassEDataType

derived: EBooleantransient: EBoolean

0..1 eSuperPackage

*eSuperTypes

EAttribute

containment: EBoolean

EReferenceabstract: EBooleaninterface: EBoolean

EClassEDataType

eAttributeType

1

eAttributes *

eReferenceType

1

eReferences*

14Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

EAttribute

El metamodelo Ecore• EClassifier — Tipo abstracto que agrupa a todos los elementos que

describen conceptosEDataType representa el tipo de un atributo Un tipo de datos puede ser• EDataType — representa el tipo de un atributo. Un tipo de datos puede ser un tipo básico como int o float, o un objeto, como por ejemplo java.util.Date.

• EAttribute — Tipo que permite definir los atributos de una clase. Éstos tienen nombre y tipo Como especialización de ETypedElement EAttributetienen nombre y tipo. Como especialización de ETypedElement, EAttributehereda un conjunto de propiedades como cardinalidad (lowerBound, upperBound), si es un atributo requerido o no, si es derivado, etc.

• EReference — Modelar las relaciones entre clases. En concreto EReferencepermite modelar las relaciones de asociación, agregación y composición p , g g y pque aparecen en UML. Al igual que EAttribute, es una especialización de ETypedElement, y hereda las mismas propiedades. Además define la propiedad containment mediante la cual se modelan las agregaciones disjuntas (denominadas composiciones en UML).

• EPackage — Agrupa un conjunto de clases en forma de módulo, de forma similar a un paquete en UML. Sus atributos más importantes son el nombre, el prefijo y la URI. La URI es un identificador único gracias al cual el paquete puede ser identificado unívocamente.

15Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Definición de modelos Ecore

• Históricamente, un modelo Ecore se puede d fi i d dif tdefinir de diferentes maneras:

UML

Modelo EMF

XMLJava

16Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Definición de modelos Ecore

• Mediante UML:– Modelo de Rational Rose («*.mdl»)

– Del proyecto de UML2 de Eclipse (últimas versiones)

17Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Definición de modelos Ecore

• Mediante interfaces Java anotadas:/*** @model*/public interface Family {

/*** Return the father* @return the father* @model

/*** @model*/public interface FamilyTree {

/*** Return a list of contained families

/*** @model abstract="true"*/public interface Individual {

/*** Return the individuals name.* @return the name

**/Male getFather();

/*** Return the mother* @return the mother* @model**/

Return a list of contained families* @model type="Family" containment="true" **/

java.util.List getFamilies();

/*** Return a list of contained individuals* @model type="Individual" containment="true" **/

* @model**/String getName();

}

Female getMother();

/*** Return children* @return list of child Individuals* @model type="Individual" containment="true“**/

java.util.List getChildren();

/java.util.List getIndividuals();

}

}

/*** @model*/

/*** @model*/public interface Male extends Individual {}

18Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

/public interface Female extends Individual {}

Definición de modelos Ecore• Mediante esquema XML

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:element name="purchaseOrder" type="PurchaseOrderType"/>

<xsd:element name="comment" type="xsd:string"/>

<xsd:complexType name="PurchaseOrderType">d<xsd:sequence><xsd:element name="shipTo" type="USAddress"/><xsd:element name="billTo" type="USAddress"/><xsd:element ref="comment" minOccurs="0"/><xsd:element name="items" type="Items"/>

</xsd:sequence><xsd:attribute name="orderDate" type="xsd:date"/>

</xsd:complexType>

<xsd:complexType name="USAddress"><xsd:sequence>

<xsd:element name="name" type="xsd:string"/><xsd:element name="street" type="xsd:string"/><xsd:element name="city" type="xsd:string"/><xsd:element name="state" type="xsd:string"/><xsd:element name="zip" type="xsd:decimal"/>

</xsd:sequence></xsd:sequence><xsd:attribute name="country" type="xsd:NMTOKEN"

fixed="US"/></xsd:complexType>

<!—-...

-->

19Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

</xsd:schema>

Definición de modelos Ecore• Todas las representaciones previas, son equivalentes

entre síentre sí.• No obstante, EMF aún proporciona una cuarta forma de

representar un modelo Ecore, en XMI.• XMI es el formato de «representación canónica» de un

modelo Ecore.U d l E d dit t bié di t t• Un modelo Ecore puede editarse también directamente en XMI (o mediante los editores que proporciona Eclipse por defecto).

• En la práctica, en la mayoría de los casos, un modelo Ecore se creará y editará directamente de esta manera.

20Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Creación de un nuevo proyecto de EMFproyecto de EMF

21

Creación de un nuevo proyecto de EMF• Para crear un nuevo proyecto EMF se debe partir de un modelo

Ecore pre-existente, en cualquiera de las representaciones p , q panteriores.

• A lo largo de la sesión de hoy emplearemos como ejemplo de modelo Ecore el siguiente metamodelo simplificado de bases de g pdatos relacionales:

22Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Creación de un nuevo proyecto de EMF• Para crear un nuevo modelo Ecore, podemos emplear el asistente

de ejemplo, al que se accede desde el menú habitual («New…»).j p , q ( )

23Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Creación de un nuevo proyecto de EMF• Generalmente, un modelo Ecore tiene un único elemento raíz. El

metamodelo Ecore, puesto que también está definido en Ecore, proporciona de forma natural el elemento EPackage como el elementoproporciona de forma natural el elemento EPackage como el elemento raíz.

• Un modelo Ecore se representa de forma arbórea. Esto se debe a que su representación está íntimamente relacionada con el formato de persistencia (XMI).

• Esta consideración debe tenerse en• Esta consideración debe tenerse en cuenta también al definir modelos Ecorepropios, para evitar problemas en la generación de editores y en la persistencia en XMIpersistencia en XMI.

• De esta manera, toda clase (salvo la que se vaya a considerar como raíz) debe estar contenida en otra (debe recibir una

24Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

(referencia de tipo contaiment).

Creación de un nuevo proyecto de EMF• Una vez creado el modelo, se abre automáticamente

con el editor en árbol por defecto de EMFcon el editor en árbol por defecto de EMF

Editor en árbolEditor en árbol

Edición de propiedades del elemento seleccionadoEdición de propiedades del elemento seleccionado

25Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Edición de propiedades del elemento seleccionadoEdición de propiedades del elemento seleccionado

Creación de un nuevo proyecto de EMF• Para añadir nuevos elementos en el editor en árbol, se

hace uso del menú contextual «New Child»hace uso del menú contextual «New Child».

26Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Creación de un nuevo proyecto de EMF• Propiedades de una clase

27Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Creación de un nuevo proyecto de EMF• Propiedades de un atributo

28Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Creación de un nuevo proyecto de EMF• Propiedades de una referencia

29Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Creación de un nuevo proyecto de EMF• Propiedades de una operación

P i d d d á t• Propiedades de un parámetro

30Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Creación de un nuevo proyecto de EMF

• El editor en árbol de EMF permite además crear t d l d á l t ifitodos los demás elementos que se especifican en el modelo de Ecore de forma similar:

Anotaciones (EAnnotation)– Anotaciones (EAnnotation)• Detalle de entrada (Details)

– Tipos de datos (EDataType)– Enumeraciones (EEnum)

• Literales (EEnumLiteral)

31Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Creación de un nuevo proyecto de EMF• El editor en árbol es la forma más segura de editar un modelo

Ecore, no obstante puede resultar muy poco amigable para editar modelos complejosmodelos complejos.

• Siendo Ecore un subconjunto del diagrama de clases de UML, lo ideal es poder emplear una metáfora visual similar a éste diagrama.

• Hasta la introducción de GMF no existía ningún editor gráfico g gpropio del proyecto eclipse para la edición de modelos Ecore, a pesar de esto existía el editor Omondo (comercial).

• Tras la introducción de GMF existe un editor gráfico (generado de forma automática, como se verá más adelante) para la edición deforma automática, como se verá más adelante) para la edición de modelos Ecore.

• El editor de GMF es útil y funcional, aunque esconde ciertos detalles del modelo, por ello, siempre es recomendable revisar (o al menos tener en cuenta) la representación en árbol del modelo bajotener en cuenta) la representación en árbol del modelo bajo edición.

• NUNCA editar simultáneamente un modelo mediante el editor en árbol y el editor gráfico.

32Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Creación de un nuevo proyecto de EMF• Si GMF está instalado, un modelo Ecore puede crearse

directamente mediante el editor en árbol.Los asistentes de creación de un nuevo modelo• Los asistentes de creación de un nuevo modelo mediante GMF se encuentran por defecto en la categoría «Other» dentro del menú de creación de nuevo fichero.

• Un modelo gráfico en GMF requiere de dos ficheros:• Un modelo gráfico en GMF requiere de dos ficheros:– El modelo de datos (en este caso, un «*.ecore») donde se salva

la información fundamental del modelo.– El modelo del diagrama (en este caso, un «*.ecore_diagram»)

donde se almacena únicamente la información gráfica sobre como se representará el modelo en pantallacomo se representará el modelo en pantalla.

• De esta forma, se mantiene compatibilidad de los modelos editados de esta manera, y se mantiene bien diferencia la información propia del modelo de su representación.representación.

• Si el editor gráfico para un determinado tipo de modelos está instalado, se puede inicializar el modelo del diagrama a partir de un modelo de datos pre-existente mediante el menú contextual.

33Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Creación de un nuevo proyecto de EMF

34Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

¿… y owner…?

Creación de un nuevo proyecto de EMF• Una vez tenemos un primer modelo Ecore, podemos

generar un nuevo proyecto EMFgenerar un nuevo proyecto EMF.• Para ello invocaremos el asistente de nuevo proyecto

«EMF Project» desde la ubicación habitual (New →Project).

35Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Creación de un nuevo proyecto de EMF

36Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Creación de un nuevo proyecto de EMF

37Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Creación de un nuevo proyecto de EMF• Se creará un nuevo proyecto con una carpeta

de código fuente vacía, y una carpeta «model/» con el fichero de nuestro modelo (una copia exacta) y el fichero «*.genmodel».

• A partir de ahora, las ediciones deberemos hacerla sobre el modelo recién creado.

• El fichero «*.genmodel» es el que servirá para la generación de código. Enlaza y consulta al fichero «*.ecore» para saber el código de qué clases debe generar y debe de mantenerseclases debe generar, y debe de mantenerse sincronizado con el modelo Ecore.

• En caso de que se hagan cambios importantes en el modelo, se recomienda recargar (Reload…) el fichero «*.genmodel» (se iniciará un asistente similar al anterior de creación de proyecto)iniciará un asistente similar al anterior de creación de proyecto).

• ¡Atención! ¡La primera vez que se crea un proyecto, el fichero «*.genmodel» enlaza al modelo «*.ecore» original! Se recomienda encarecidamente ejecutar el asistente de recarga, e indicando el nuevo fichero * ecore del proyecto EMF recién

38Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

indicando el nuevo fichero «*.ecore» del proyecto EMF recién creado para evitar confusiones (y pudiendo eliminar el original).

Creación de un nuevo proyecto de EMF

39Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Generación de código Java

40

Clases generadas para el modelo• Para cada clase del modelo (EClass):

– Una interfaz Java:

public interface Column …

– Y la correspondiente clase que implementa la interfaz:p q p

public class ColumnImpl extends … implements Column

• Esta separación es una decisión de implementación impuestaEsta separación es una decisión de implementación impuesta por EMF, que permite simular la herencia múltiple que permite EMF en Java.

• Las interfaces se agrupan en el paquete fij b d l«prefijo.nombremodelo».

• Las implementaciones en el paquete «prefijo.nombremodelo.impl».

41Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Clases generadas para el modelo• Además se observa que todas las interfaces extienden directa o

indirectamente de la interfaz EObject (y las clases extienden la clase j (yEObjectImpl):

public interface RModelEment extends EObjectpublic interface RModelEment extends EObject

• EObject es el equivalente de EMF a la clase java.lang.Object, esto es, una clase base para todos los objetos modelados EObject introduceuna clase base para todos los objetos modelados. EObject introduce tres comportamientos básicos:

– eClass() — devuelve el metaobjeto del objeto (una EClass).

eContainer() y eResource devuelve el objeto contedor y el recurso del objeto– eContainer() y eResource — devuelve el objeto contedor y el recurso del objeto.

– eGet(), eSet(), eIsSet() y eUnset() — proporcionan una API para acceder al objeto de forma reflexiva. Éstos son ligeramente más ineficientes que los métodos generados pero abren el modelo a un acceso completamente genéricogenerados, pero abren el modelo a un acceso completamente genérico.

42Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Clases generadas para el modelo• La clase EObject proporciona una funcionalidad más:

public interface EObject extends Notifier { public interface EObject extends Notifier {

• La interfaz Notifier introduce notificaciones acerca del cambio del modelo.

• El patrón exacto que se utilizada en los métodos generados para la implementación de una característica dada (atributo o referencia) depende del tipo y otras propiedades ajustables por el usuario. Veamos como ejemplo el atributo type de una Columna (para otros atributos se emplean patrones más complejos, especialmente en referencias bidireccionales).

public String getType() {return type;

public void setType(String newType) {String oldType = type;type = newType;if (eNotificationRequired())

eNotify(new ENotificationImpl(this, Notification.SETRdbmsPackage COLUMN TYPE oldType type));

return type;}

43Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

RdbmsPackage.COLUMN__TYPE, oldType, type));}

Clases generadas para el modelo• Para cada modelo, además, se crean dos clases

adicionales:adicionales:– Una factoría, que proporciona un método create para

cada clase del modelo.• El modelo de programación de EMF recomienda

encarecidamente el uso de la factoría (aunque no lo obliga).• Se recomienda escribir

Rdb F t INSTANCE t C l () l d«RdbmsFactory.eINSTANCE.createColumn()» en lugar de «new ColumnImpl()».

– Una clase que representa al paquete. Esta clase contiene todos los metadatos Ecore del metamodelocontiene todos los metadatos Ecore del metamodelo(nombre, ns prefix, URI, etc) así como métodos de acceso a las EClasses, EReferences, etc. del modelo.

44Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Invocación del generadorg

45Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Generación de editores en árbol• Además del código del modelo, EMF permite

generar editores en árbol específicos para un g p pmodelo Ecore concreto (registrando una extensión por defecto para ellos, iconos personalizados, etc).

• Para este caso, el código generado no se genera enPara este caso, el código generado no se genera en el mismo proyecto que el del modelo, sino que se genera por separado, y además en dos plug-ins.– * edit en este plug-in se incluyen clases de ayuda a la.edit, en este plug in se incluyen clases de ayuda a la

edición, pero independientes del editor concreto (etiquetas que identifican un determinado elemento del modelo, icono asociado, hijos para los que se deben dar opciones de creación etc)opciones de creación, etc).

– *.editor, este plug-in implementa el propio editor, y hace uso del plug-in anterior. Registra la extensión por defecto, etc.etc.

46Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Generación del código EMF.Edit• «Generate edit code» creará un plug-in completo

conteniendo la parte independiente del editor concreto,

g

conteniendo la parte independiente del editor concreto, esto es:

– Un conjunto de item providers (etiquetas, iconos, etc), uno para cada clase en el modelo.

– Una clase item provider adapter factory que creará los itemproviders generados.

– Una clase Plugin que incluye los métodos para localizar los g yrecursos de texto e iconos del plug-in.

– Archivos de manifiesto del plug-in, (plug-in.xml, MANIFEST.MF), especificando las dependencias requeridas.

– Un archivo de propiedades, plugin.properties, conteniendo las cadenas de texto externalizadas necesarias por las clases generadas y el framework.Un directorio de iconos uno para cada clase del modelo– Un directorio de iconos, uno para cada clase del modelo.

47Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Generación del editor• En el plug-in del editor, se generarán los siguientes

elementos:– Un editor integrado en el workbench de Eclipse.– Un asistente para crear documentos con nuevas instancias del

modelo (se incluirá en el menú por defecto, bajo la categoría «Example EMF Model Creation Wizards»).p

– Una contribución a las barras de menús, de herramientas y menús contextuales.

– Una clase Plugin que incluye los métodos para localizar los recursos de cadenas de texto e iconosde cadenas de texto e iconos.

– Archivos de manifiesto del plug-in, que especifican las dependencias requeridas y extensiones del editor, asistente, y puntos de extensión de las acciones del workbench.Un archivo de propiedades plugin properties conteniendo las– Un archivo de propiedades, plugin.properties, conteniendo las cadenas de texto externalizadas necesarias para las clases generadas y para el framework.

– Un directorio conteniendo iconos para el editor y el asistente de «Nuevo modelo»«Nuevo modelo».

48Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Uso del código generado

49

Uso del código generado

• Además de los plug-ins del modelo, del soporte l di ió d l dit d

g g

a la edición, y del editor, se puede generar automáticamente un plug-in de pruebas mediante la opción «Generate test code» delmediante la opción «Generate test code» del fichero «*.genmodel».

• Este plug-in de pruebas sirve como ejemplo deEste plug in de pruebas sirve como ejemplo de cómo se usa el código generado tanto desde un plug-in que se ejecuta dentro de Eclipse, como de una aplicación Java independiente.

50Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Creación/carga-edición de una instancia1. Crear un nuevo ResourceSet:

ResourceSet resourceSet = new ResourceSetImpl();

2. Registrar la ResourceFactory:resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put(Resource.Facto

ry.Registry.DEFAULT_EXTENSION, new XMIResourceFactoryImpl());

3 Registrar el paquete:3. Registrar el paquete:resourceSet.getPackageRegistry().put(RdbmsPackage.eNS_URI, RdbmsPackage.eINSTANCE);

4. Crear/Cargar:– Crear un nuevo Resource:

Resource resource = resourceSet.createResource(URI.createURI("http:///My.rdbms"));

– Cargar un nuevo Resource:Resource resource = resourceSet.getResource(uri, true);

()Resource.load();

5. Editar el modelo:– Se accede a las instancias del Resource mediante el método resource.getContents().

6 Salvar el modelo:6. Salvar el modelo:resource.save(outputStream, null);

51Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Generación de editores visuales:

G hi l M d li F kGraphical Modeling Framework

52

Introducción a GMF

53

Introducción a GMF• Eclipse proporciona desde sus inicios un framework gráfico llamado

Graphical Editor Framework.p• No obstante, su uso para la creación de editores es complejo,

puesto que es un entorno de creación de editores genérico e independiente del modelo subyacente.p y

• GEF se basa en el paradigma Modelo-Vista-Controlador. Esto ocasionó que inicialmente la mayor parte de los desarrolladores emplease sus propios modelos (generalmente objetos Java).p p p g j

• El problema del uso de modelos propios radica en que gran parte del esfuerzo de implementación se invierte en mecanismos para tratar con ellos, así como en tareas de carga/serialización.g

• El siguiente paso lógico en el desarrollo de editores gráficos fue adoptar el uso de EMF como framework de modelado subyacente. No obstante, la integración de EMF y GEF no es trivial, y presenta g y y pdiversas dificultades tecnlógicas.

54Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Introducción a GMF• GMF surge como un framework capaz de unificar ambos entornos,

siguiendo una filosofía dirigida por modelos: en GMF no se g g pprograma, se modela:

GEF

(frameworkgráfico)

EMF

(frameworkde modelado)

GMF

(frameworkd d l d

g

de modelado gráfico)

55Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Introducción a GMF• Proceso de desarrollo con GMF:

56Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

*Extraído del manual de GMF (http://wiki.eclipse.org/index.php/GMF_Tutorial)

Creación de un editor gráfico

57

Creación de un editor gráfico• A continuación, vamos a crear un primer prototipo rudimentario de un

editor gráfico visual, de esquemas de bases de datos relacionales.

g

• El editor permitirá dibujar:– Tablas.– Columnas como elementos dentro de una tabla.– Claves (indicando el nombre de la clave).– Claves ajenas (como un enlace entre una tabla y una clave de otra tabla).

Tabla 1Columna11

C l 12

Tabla 2Columna21

C l 22Columna12

Clave1

Columna22

Clave2

58Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Creación de un editor gráfico• Como se vio anteriormente, el flujo de trabajo para crear un editor

basado en GMF es complejo, y consta de diversos modelos que se

g

p j , y qrelacionan entre sí.

• Por ello, la mejor forma de crear un nuevo proyecto de GMF, es empleando la vista «GMF Dashboard», que muestra de forma p , qesquemática el proceso a seguir, y proporcionando atajos para la creación/derivación de los modelos intermedios.

59Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Creación de un editor gráfico• En primer lugar, hemos de empezar el proceso seleccionando los

dos modelos que ya hemos creado en el paso previo: el «*.ecore» y

g

q y p p yel «*.genmodel»

60Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Creación de un editor gráfico• El siguiente paso es crear el conjunto de elementos gráficos de los

que dispondrá nuestro modelo.

g

q p• Para ello, lanzaremos el asistente que nos permitirá derivarlos a

partir del modelo «*.ecore».• Se aconseja guardar todos los modelos intermedios en la mismaSe aconseja guardar todos los modelos intermedios en la misma

carpeta que los ficheros «*.ecore» y «*.genmodel».

61Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Creación de un editor gráfico• Para la creación del «*.gmfgraph» se debe seleccionar en primer

lugar cuál será el elemento que representará el canvas del editor

g

g q p(esto es generalmente el elemento raíz de nuestro modelo).

• En el caso de los esquemas de bases de datos relacionales, este será el elemento Schema.

62Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Creación de un editor gráfico• En segundo lugar, marcaremos cuáles serán los elementos para los

que necesitaremos alguna representación gráfica, y de qué tipo

g

q g p g , y q pserá esta. Por defecto, el asistente muestra una propuesta inicial.

Elemento del diagrama independiente

El elemento denota un enlace entre elementosEl elemento denota un enlace entre elementos

El elemento es un atributo de otro principal

63Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Creación de un editor gráfico• En este punto, podremos

editar el modelo

g

«*.gmfgraph» para completar y definir las primitivas gráficas que deseemos.

• Al finalizar, podremos generar el modelo de herramientas «*.gmftool»

64Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Creación de un editor gráficog• El modelo «*.gmftool» marcará las primitivas disponibles en el panel

de dibujo.j

65Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Creación de un editor gráfico• El siguiente paso es el más importante del proceso:

la creación del fichero «*.gmfmap».

g

g p• En este paso se combinarán todos los modelos

anteriores, especificando qué primitivas gráficas representan qué elementos del modelo original.representan qué elementos del modelo original.

66Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Creación de un editor gráfico• En primer lugar se debe seleccionar cuál será el

elemento del modelo que representará el canvas y a

g

q p ycontinuación, se debe de seleccionar cuaál es el modelo de los elementos gráficos a emplear.

67Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Creación de un editor gráfico• En primer lugar se debe seleccionar cuál será el elemento del

modelo que representará el canvas y a continuación, se debe d l i ál l d l d h i t l

g

de seleccionar cuál es el modelo de herramientas, y el modelo de los elementos gráficos a emplear.

68Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Creación de un editor gráfico• El último paso del asistente permite inicializar el modelo de

mappings seleccionando qué elementos del modelo de datos se

g

pp g qrepresentarán como nodos en el área de dibujo, y qué elementos representarán conexiones.

69Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Creación de un editor gráfico• Una vez generado el modelo de mappings, se debe editar y

comprobar que se ha definido toda la información necesaria.

g

• Para ello, es recomendable empezar validando el modelo. Esto nos mostrará qué partes del modelo están aún incompletas y han de rellenarse a mano.

d d l d l d• La edición del modelo de mappings es compleja, costosa, propensa a introducir errores y ademásintroducir errores y además está poco documentada.

• Antes de continuar con el proceso se ha de validar SIEMPRE este modelo. Aún así, que el modelo valide no es garantía de que vaya a generar código válido

70Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

generar código válido.

Creación de un editor gráfico• Cuando se ha completado

el modelo (y hecho las difi i

g

modificaciones pertinentes, como añadir los contenedores anidados, etc.), se puede pproceder a la generación del fichero «*.gmfgen», que finalmente dará lugar al código generado.al código generado.

71Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

Creación de un editor gráfico• Una vez se ha generado el código, se puede iniciar un nuevo editor

mediante el asistente de creación de nuevo fichero.

g

• Nuestro prototipo de editor se mostrará de la siguiente manera:

• A partir de este punto, se puede refinar el editor, modificando las figuras, personalizando iconos y colores, tamaño y alineaciones de

72Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]

contenedores, etc.

Ejercicio de evaluación

73

Ejercicio de evaluación

• Crear un nuevo proyecto de EMF que represente un modelo que permita representar grafos como el

j

modelo que permita representar grafos como el siguiente (similar a una red de Petri):

• Generar un prototipo de editor gráfico con GMF que permita dibujarlos de forma sencilla.

74Eclipse en el soporte al desarrollo de software.

Universidad Politécnica de Valencia. Abel Gómez [[email protected]]