Sunteți pe pagina 1din 51

MetaEdit+

Ander Zubizarreta
Descripción de la herramienta

• Entorno para crear y usar lenguajes de


modelado específicos de dominio.
• Desarrollado inicialmente en la universidad de
Jyväskylä (Finlandia) como parte del proyecto
MetaPHOR.
• Actualmente mantenido por la compañía
MetaCase.
Funcionalidades básicas

1. Creación de metamodelos

2. Creación de modelos

3. Generación de código
1. Creación de metamodelos

1.1 Lenguaje GOPPRR

1.2 Graphical metamodeling

1.3 Form-based metamodeling


1.1 Lenguaje GOPRR

• Lenguaje usado por MetaEdit+ para definir


metamodelos
– Graph
– Object
– Property
– Port
– Relationship
– Role
1.2 Graphical metamodeling

• Definición gráfica de metamodelos:


Role

Object

Relationship

Property
1.2 Graphical metamodeling

• Podemos definir metamodelos gráficamente


con el editor de diagramas, utilizando los
elementos del lenguaje GOPPRR
• Después de crear el metamodelo se exporta a
un fichero MXT (MetaEdit+ XML Types)
• Se importa el fichero MXT para poder definir
modelos con nuestro metamodelo
1.3 Form-based metamodeling
• Definición del metamodelo mediante las herramientas que
MetaEdit+ provee para la creación y manejo de metatipos
– Object tool: para especificar tipos de objetos del metamodelo
– Relationship tool: para indicar los conectores entre tipos de objetos
– Role tool: para indicar el rol que juega un determinado tipo de objeto en
una determinada relación
– Port tool: para especificar cómo los tipos de roles se conectan con los
tipos de objetos
– Graph tool: para establecer las reglas para la conexión de objetos,
relaciones, roles y puertos definidos
– Property tool: para modificar las propiedades de cualquier tipo de
elemento y para crear nuevos tipos de datos
2. Creación de modelos
• Podemos crear
modelos
gráficamente
utilizando los
metamodelos ya
definidos
2. Creación de modelos
• Podemos usar lo
definido en el
metamodelo para
crear el modelo
3. Generación de código
• MetaEdit+ permite generar texto a partir
de los modelos definidos
• Herramienta Generator Editor para crear
generador de código
• MetaEdit+ ofrece algunos informes
predefinidos: Object list, Property list,
Dictionary, Export graph to HTML,
XML...
• MetaEdit+ dispone de su propio lenguaje
para generar código:
– Diseñado especialmente para la redacción
de informes
– Limitaciones: no dispone de variables,
funciones y recursividad
Ejemplos

• 1. Family Tree

• 2. Family Tree (Graphical)

• 3. Digital Watch
Ejemplo 1: Family Tree

• Definición del metamodelo para crear este


modelo:
Ejemplo 1: Family Tree

• Diagrama del metamodelo:


Ejemplo 1: Family Tree
Definición del metamodelo

• Definición de objetos
con Object tool
• Definimos los objetos
Person, Male y Female
y sus propiedades
• Male y Female heredan
las propiedades de
Person
Ejemplo 1: Family Tree
Definición del metamodelo

• Edición de símbolos con


Symbol editor
• Podemos personalizar
los objetos que luego
usaremos para hacer el
modelo
Ejemplo 1: Family Tree
Definición del metamodelo

• Definición de relaciones
con Relationship tool
• Definimos la relación
Family
Ejemplo 1: Family Tree
Definición del metamodelo

• Definición de roles con


Role tool
• Definimos los roles
Parent y Child
Ejemplo 1: Family Tree
Definición del metamodelo

• Juntamos todo lo
anterior para crear el
metamodelo con Graph
tool
• Nuestro modelo tendrá
una propiedad llamada
Family name
Ejemplo 1: Family Tree
Definición del metamodelo

• Añadimos las
relaciones, los roles y
los objetos que hemos
creado a la pestaña
Types de Graph tool
Ejemplo 1: Family Tree
Definición del metamodelo

• Definimos los roles y


los objetos que
participaran en cada
relación
• En nuestro caso cada
relación relacionará un
Male Parent con una
Female Parent y con
0..N Childs
Ejemplo 1: Family Tree
Definición del metamodelo
• Podemos precisar más la forma de
nuestro modelo usando el Port
tool y el Symbol tool para definir
por qué parte del objeto puede
salir una relación determinada
Ejemplo 1: Family Tree
Definición del metamodelo
• En nuestro caso cada relación
solo podrá unir la parte derecha
de Male Parent con la parte
izquierda de Female parent y la
parte de arriba de Child
Ejemplo 1: Family Tree
Creación del modelo

• MetaEdit+ nos ofrece la posibilidad de utilizar


el metamodelo que hemos definido para crear
un modelo
Ejemplo 1: Family Tree
Creación del modelo
• Utilizaremos la herramienta
Create graph para dibujar nuestro
modelo
• Seleccionaremos que queremos
crear un diagrama del tipo Family
Tree, que es el metamodelo que
hemos definido
• Como hemos definido que nuestro
modelo tendrá una propiedad
llamada Family name, nos pedirá
que introduzcamos un valor para
esa propiedad
Ejemplo 1: Family Tree
Creación del modelo

• En el editor de
diagramas podremos
crear objetos del tipo
Male o Female y
relacionarlos con la
relación Family
Ejemplo 1: Family Tree
Creación del modelo

• Al crear un objeto
nuevo nos pedirá que
introduzcamos sus
propiedades
Ejemplo 1: Family Tree
Creación del modelo

• Con el botón Fami


podremos relacionar los
diferentes objetos del
diagrama
Ejemplo 1: Family Tree
Generación de código

• Con la herramienta Generator editor podemos


definir cómo queremos generar
automáticamente el código de nuestro modelo
Ejemplo 1: Family Tree
Generación de código

• En este ejemplo se crea


una página HTML con
el diagrama y con los
datos de cada miembro
de la familia, incluidos
sus padres e hijos.
Ejemplo 2: Fam. Tree (Graphical)

• En este ejemplo crearemos el mismo


metamodelo, pero usando el Graphic editor,
en vez de usar las distintas herramientas que
MetaEdit+ nos ofrece para manejar metatipos
• Después de exportar e importar otra vez
nuestro diagrama, podremos utilizarlo para
crear modelos
Ejemplo 2: Fam. Tree (Graphical)
• Utilizamos la herramienta
Create graph para definir
nuestro metamodelo
gráficamente
• Seleccionamos de la lista
Metamodel [GOPRR], ya
que queremos definir un
metamodelo utilizando el
lenguaje GOPRR
Ejemplo 2: Fam. Tree (Graphical)
• Dibujamos el diagrama que
define nuestro metamodelo
• Introduciremos las
propiedades que tendrá cada
objeto y cada relación
• Definimos los roles que
participaran en cada relación
Ejemplo 2: Fam. Tree (Graphical)
• Una vez definido el metamodelo,
con la herramienta Generate
exportaremos el diagrama a un
fichero MXT
• Si seleccionamos la opción
Export and Build MXT, el fichero
creado se importará
automáticamente y ya podremos
crear modelos utilizando nuestro
metamodelo
• Si sólo lo exportamos, deberemos
importar el fichero MXT para
poder empezar a crear modelos
Ejemplo 2: Fam. Tree (Graphical)
• Para importar nuestro
metamodelo seleccionamos
el botón Import en la barra
de herramientas
• Seleccionamos el fichero
MXT que queremos
importar y ya podemos
empezar a crear modelos
• Para crear un modelo no
hace falta más que seguir los
pasos del anterior ejemplo
Ejemplo 3: Digital Watch

• En este ejemplo trabajaremos con un modelo


ya existente
• El lenguaje de modelado está basado en
diagramas de transición entre estados
• El objetivo del ejemplo es hacer ver cómo
podemos trabajar fácilmente con nuestro
lenguaje específico de domino para modelar
• Nuestro dominio serán los relojes digitales
Ejemplo 3: Digital Watch
• Tendremos varios modelos de reloj
• Cada modelo tendrá un display y una aplicación

• Cada aplicación puede estar formado por diferentes


sub-aplicaciones
Ejemplo 3: Digital Watch
• El diagrama Watch Application
Family muestra los relojes
definidos en nuestro modelo
• Tenemos 5 modelos de relojes,
cada uno con un display y una
aplicación
• Hay 4 tipos de display y otros 4
tipos de aplicaciones
• Cada display esta compuesto por
diferentes iconos, zonas y botones
Ejemplo 3: Digital Watch
• Cada aplicación se
descompone en un
diagrama de transición
de estados que nos
muestra su
funcionamiento
• Cada estado de este
diagrama es una sub-
aplicación
Ejemplo 3: Digital Watch
• Cada sub-aplicación se
descompone en otro
diagrama de transición
de estados
mostrándonos su
funcionamiento
Ejemplo 3: Digital Watch
• El ejemplo también tiene ya
definido un generador de código
• Podemos generar una página web
que simula el funcionamiento del
reloj mediante applets de Java
• También podemos crear código
para dispositivos que soporten
MIDP (en este ejemplo teléfonos
Nokia con el sistema S40)
• Podemos seleccionar el sistema
para el que queremos generar el
código en las propiedades del
diagrama
Ejemplo 3: Digital Watch
• Si seleccionamos la plataforma
Windows y hacemos Generate |
Autobuild se nos abrirá la pagina
web con los relojes de nuestro
modelo
• Al seleccionar algún modelo se
abre la página que simula el
funcionamiento de ese reloj, con
sus funcionalidades y los
elementos de su display
Ejemplo 3: Digital Watch
Nuevo modelo de reloj

• Con este lenguaje de modelado específico de


dominio es muy fácil añadir a nuevos modelos
de reloj a nuestro modelo.
• En este ejemplo añadiremos un reloj que sólo
tiene cronómetro y que tendrá un nuevo
display.
• Lo llamaremos JustStopwatch
Ejemplo 3: Digital Watch
Nuevo modelo de reloj
• Añadimos un nuevo objeto
Display y otro LogicalWatch en el
diagrama WatchFamily
• Añadimos un nuevo modelo de
reloj asignándole como atributos
el display y aplicación nuevos.
• Como nuestro reloj tendrá sólo el
modo Stopwatch seleccionaremos
que la aplicación lógica que
hemos creado se descomponga
directamente en la sub-aplicación
Stopwatch
Ejemplo 3: Digital Watch
Nuevo modelo de reloj

• Únicamente siguiendo los


pasos anteriores y
generando el código ya
tenemos un nuevo modelo
de reloj
Ejemplo 3: Digital Watch
Añadir funcionalidad

• También podemos añadir funcionalidades


fácilmente a los relojes definiéndolos en los
diagramas
• Añadiremos la función Lap Time (al darle al
botón Down el cronómetro se para en la
pantalla, pero sigue contando) a la sub-
aplicación StopWatch
Ejemplo 3: Digital Watch
Añadir funcionalidad

• Para añadir la nueva


funcionalidad sólo debemos
representarlo en el diagrama
StopWatch utilizando para
ello el editor de diagramas
• Si generamos el código de
nuevo mediante Generate |
Autobuild tendremos ya los
relojes con la nueva
funcionalidad
Ejemplo 3: Digital Watch
Conclusión

• Una vez definidos el lenguaje de modelado y


el generador de código, podemos añadir
nuevos modelos de reloj y nuevas
funcionalidades en muy poco tiempo y sin
tocar nada de código
Funciones Avanzadas
API Tool
• MetaEdit+ ofrece un modo para acceder a la
información de los modelos desde aplicaciones
externas
• Una aplicación que pretenda utilizar la API
Metaedit+ debe implementar un cliente SOAP
que se encarga de establecer la conexión y
realizar las llamadas a Metaedit+
• Puede utilizarse para acceder y cambiar los
elementos del metamodelo
• También puede ser útil para resaltar o animar
elementos del diagrama para propósitos de
simulación o trazas
Funciones Avanzadas
Lenguaje para escribir informes
Funciones Avanzadas
Lenguaje para escribir informes

S-ar putea să vă placă și