Download - Ingeniería dirigida por modelos
Ingeniería Dirigida por Modelos
Introducción
Vicente García Díaz ([email protected])
Juan Manuel Cueva LovelleMDE-OOTLAB Research GroupNoviembre de 2010
Conceptos básicos
Motivación
Crecimiento de la complejidad del software [Groth, 2004]
No se reutiliza ni el conocimiento tecnológico ni del dominio [Caldiera and Basili, 1991]
Se necesita industrializar el desarrollo del software [Mcilroy, 1968]
El término crisis del software sigue vigente [Dijkstra, 1972]
Antecedentes
El nivel de abstracción de los lenguajes va en aumento Binario Ensamblador Procedimental Orientado a objetos
Hacia el espacio de la solución del problema
En los años 80 surgen las herramientas CASE No tuvieron mucho éxito
Objetivos
Reducir la complejidad de las plataformas actuales
Expresar los conceptos de los diferentes dominios de forma más apropiadaConceptos del
dominio Conceptos del dominio
Conceptos de la tecnología utilizada
Trabajo mental de los desarrolladores Conceptos de la
tecnología utilizada
El metamodelado (1/2)
Relación en cascada entre modelos y metamodelos
Elementos del mundo
real (dominio)
Modelo Metamodelodescribe
describe
El metamodelado (2/2)
Clave de la ingeniería dirigida por modelos
Es necesario para Construir lenguajes de dominio
específico Validar modelos Transformar modelos Generar artefactos (código,
documentación, etc.) Integración de herramientas
Beneficios
Desarrollo de software tradiccional
[Stahl and Völter, 2006]
Desarrollo de software con MDE
[Stahl and Völter, 2006]
PARTE VARIABLE
PARTE ESPECÍFICA
PARTE COMÚN
Desarrollo completo con MDE
[Stahl and Völter, 2006]
Tradicional vs MDE
[Stahl and Völter, 2006]
Espacio Conceptural
Referentes al modelo (1/5)
DominioMetamod
elo
Meta-metamod
elo
Sintaxis abstracta
Semántica estática
Sintaxis concreta
Lenguaje de
dominio específico
Semántica
Modelo formal
Describe conceptos de
<<instanceof>>
<<instanceof>>
Basado en
Basado en
Obtiene el significado de
Respeta a
Subdominios
Referentes al modelo (2/5)
Dominio de las Redes de Petri Fueron definidas en los años 60 por Carl Adam Petri Son una especialización de la teoría de autómatas que permite
expresar eventos concurrentes Tiene lugares, transiciones y arcos dirigidos Áreas de aplicación: análisis de datos, diseño de software, fiabilidad,
flujo de trabajo…
P1
P2
P1P3 P5
T1
T2
15
4
17
3 4 6
Referentes al modelo (3/5)
Metamodelo para Redes de Petri
+Name : string
Node
+weight : int
Arc
Place Transition
PetriNet
10..*
1
0..*
P1
P2
P1P3 P5
T1
T2
15
4
17
3 4 6
Referentes al modelo (4/5)
Meta-metamodelo para Redes de Petri
Model Element
Generalizable Element
Association ClassAttribute
Typed Element+Name : string
Node
+weight : int
Arc
Place Transition
PetriNet
10..*
1
0..*
Referentes al modelo (5/5)
Mapeo entre sintaxis abstracta y concreta para Redes de Petri
+Name : string
Node
+weight : int
Arc
Place Transition
PetriNet
1 0..*
1
0..*
P1 P2
T1
15 17
Proceso de trabajo
Supermetamodelo
Elementos del mundo real
Modelo
Metamodelo
Meta-metamodeloM3
M2
M1
M0
Instancia de
Representado por
Espacios de modelado
Elementos del mundo real
UML classes, objects, ...
UML, ODM, ...
MOFM3
M2
M1
M0
MOF
Instancia de
Representado por
Elementos del mundo real
Programas informáticos
JAVA, C#, XML, ...
EBNF
EBNF
Dualidad
MOFM3
M2
M1
M0
UML ODM
Modelo UML de la gramática de
Java
Modelo UML de un
programa Java
Modelo ODM de animales
EBNF
Gra
mát
ica d
e Ja
va
Prog
ram
a Ja
va
Ciclo de vidaTradicional
Requisitos
Análisis
Diseño
Codificación
Pruebas
Despliegue
Texto
Modelo
Modelo
Código
Código
MDE
Requisitos
Análisis
Diseño
Codificación
Pruebas
Despliegue
Texto
Modelo
Modelo
Código
Código
Paso manual
Paso automático
Secuencia de pasos
Modelo
Transformación
Modelo
Transformación
Artefactos textuales
generados
Metamodelo
Reglas de transformaci
ón
Reglas de transformaci
ón
ModeloModelo
<<instanceof>>
<<instanceof>>
Generación de artefactos
¿Dónde se generan artefactos?
Modelo Código Código intermedio
Model2Code
Mod
el2M
odel
Cod
e2C
ode
Inte
rmed
iate
2Int
erm
edia
te
Code2Intermediate
Tanto el código (Code) como el código intermedio (Intermediate) son
considerados artefactos textuales
Plantillas + Filtros
Especificación
Filtro
Subconjunto de la
especificaciónPlantillas
Código generado
Apply to
Apply to
Plantillas + FiltrosEjemplo
[http://www.abbeyworkshop.com/howto/xslt/xslt_templates/index.html]
Plantillas + Metamodelo
Especificación
Metamodelo
Instancia del metamodelo
Plantillas
Código generado
Based on
Yields
Instance of
Apply to
Plantillas + MetamodeloEjemplo
[http://www.openarchitectureware.org/pub/documentation/4.3.1/openArchitectureWare-4.3.1-Reference.pdf]
Basados en una API
Código generado
Programa cliente
API
Gramática (AST/CST)
Based on
Uses
Instance of
Creates
Modifies
Basados en una APIEjemplo
Class
[http://ondotnet.com/pub/a/dotnet/2003/02/03/codedom.html?page=1]
En línea
Especificación variantes del
código
Algunas variantes resueltas
Código con variantes resueltas
Código generado
Pre
pro
cesa
mie
nto
En líneaEjemplo
[http:// irc.essex.ac.uk/www.iota-six.co.uk/c/j1_the_c_preprocessor.asp]
Tejido de código
Artefacto 1
Especificación de los puntos
de enlace
Artefacto 2
Código generado /
Tejido
Artefacto 3
Tejido de códigoEjemplo
[http:// today.java.net/today/2004/11/22/Aspects_2-2.pdf]
Basado en atributos
Código no generado
Atributos
Representación interna
Generador
Código generado
Apply to
Apply to
Basado en atributosEjemplo
[http:// java.sun.com/j2se/javadoc/writingdoccomments/]
Procesamiento de Frames
Frame de especificación
Generador
Frame de código
Código generado
4) Genera
1) Crea e instancia
2) Instancia y parametriza
5)
{repeat}
3) Instancia y parametriza
Procesamiento de FramesEjemplo
[http://www.voelter.de/data/pub/ProgramGeneration.pdf]
Frame
Instanciación
Generación
short int aShortNumber;
MDAModel-Driven Architecture
Conceptos Básicos
Puntos de vista
Computation Independent Model (CIM) Platform Independent Model (PIM) Platform Specific Model (PSM) Implementation Specific Model (ISM)
CIM
PIM
PSM 1 PSM n
ISM 1 ISM n
…
…
Arquitectura de cuatro capas
MOF
UML ODM
Modelos UML Modelos ODM
…
…
Sistema
Meta-metamodelo (M3)
Metamodelo (M2)
Modelo (M1)
Realidad (M0)
Estándares relacionados con MDA
The Meta Object Facility (MOF)
Model Element
Import Namespace Constraint Tag Feature
Generalizable Element
Behavioral Feature
Package Classifier Operation Exception
Association Class
Can throw
generalizes
imports
MOF (2/2)
MOF
Metamodelo origen
Metamodelo destino
Modelo origen Modelo destino
Reglas de transformaci
ón(QVT)
transformación
Unified Modeling Language Estándar para
Visualizar Especificar Documentar …
Independiente del lenguaje Una combinación
Fue diseñado por “The three amigos” James Rumbaugh, Ivar Jacobson, Grady
Booch
UML (2/2)Extender UML basándose en perfiles UML
«metaclass»Attribute
«metaclass»Class
«metaclass»Operation
1*
1 *
<<stereotype>> PrimaryKey <<stereotype>> Entity <<stereotype>> FinderMethod
«extends» «extends» «extends»
PersistenceTime: (short, long)
context Entityinv: attribute->exists(isStereoKinded("PrimaryKey")
-<<FinderMethod>>findByCif()
-<<PrimaryKey>> cif : string-name : string
<<Entity>> Empresa
-<<PrimaryKey>> nif : string-edad : int
<<Entity>> Empleado 1*
{PersistenceTime=short}
stereotype
tagged value
constraint
XML Metadata Interchange (XMI)
Sirve para serializar modelos Permite que las herramientas se
integren
XMI 1.1 – MOF 1.3 XMI 1.2
– MOF 1.4
XMI 1.3 – MOF 1.4 XMI 2.0
– MOF 1.4
XMI 2.1 – MOF 2.0
2009
XMI (2/2)
XMI (3/3)
Object Constraint Language (OCL)
Se utiliza para definir restricciones Es parte de UML Tipos
Clase invariant Precondiciones de una operación
precondition Postcondiciones de una operación
postcondition
OCL (2/3)
[Stahl and Völter, 2006]
context Cocheinv: conductor.edad >= 18
+contratar(entrada p : Persona)
Empresa
+conducir(entrada p : Persona)
Coche
-edad : int
Personaconductor
conductoresPotenciales
jefe
empleados
vehículos
poseedor
context Empresainv: conductoresPotenciales = empleados->select(edad >= 18)
context Coche::conducir(p: Persona)pre: (conductor==null) && (p.edad >= 18)post: conductor = p
context Empresa::contratar(p: Persona)pre: --nonepost: (empleados.size = [email protected] + 1) && (empleados.includes(p))
OCL (3/3)
Restricción en nivel Mn afecta al nivel Mn-1
context PersonaDesconocidainv: name == “no identificada” || “desconocida”
context ParametrosNumericosinv: type.name == “Integer”
-name : String-type : Type
«metaclass»UML::Attribute
«metaclass»MM::ParametrosNumericos
-name : String
«metaclass»UML::Class
«metaclass»MM::PersonaDesconocida
Query, Views, Transformations (QVT)
Lenguaje de transformación de modelos
Compuesto de tres lenguajes con objetivos distintos
QVT Relacional Core Operacional
Core Language
Relations Language
Op
era
tion
Map
pin
gs
Lan
gu
ag
e
Bla
ck B
ox M
ap
pin
gs
QVT (2/3)Lenguaje relacional
Transformaciones un conjunto de relaciones Declarativo
[Mens, 2009]
QVT (3/3)Lenguaje operacional
Transformaciones un conjunto de operaciones Imperativo
[Mens, 2009]
La cadena de modelado
Relaciones entre M1 y M2
+puedeMoverse() : bool
Vehículo
Coche
-malEstado : bool
Rueda
-nombre : string
Persona
1
4
+driver
1
+car
*
-name : string
ModelElement
Classifier
-visibility : Visibility
Feature
Class DataType Operation Attribute AssociationEnd
Association
1
1 1..*
*
-generalizations
*
Instance of
[http://smv.unige.ch/old/tiki-download_file.php?fileId=661]
Relaciones entre M1 y M2
+puedeMoverse() : bool
Vehículo
Coche
-malEstado : bool
Rueda
-nombre : string
Persona
1
4
+driver
1
+car
*
-name : string
ModelElement
Classifier
-visibility : Visibility
Feature
Class DataType Operation Attribute AssociationEnd
Association
1
1 1..*
*
-generalizations
*
Instance of
Relaciones entre M1 y M2
+puedeMoverse() : bool
Vehículo
Coche
-malEstado : bool
Rueda
-nombre : string
Persona
1
4
+driver
1
+car
*
-name : string
ModelElement
Classifier
-visibility : Visibility
Feature
Class DataType Operation Attribute AssociationEnd
Association
1
1 1..*
*
-generalizations
*
Instance of
Relaciones entre M1 y M2
+puedeMoverse() : bool
Vehículo
Coche
-malEstado : bool
Rueda
-nombre : string
Persona
1
4
+driver
1
+car
*
-name : string
ModelElement
Classifier
-visibility : Visibility
Feature
Class DataType Operation Attribute AssociationEnd
Association
1
1 1..*
*
-generalizations
*
Instance of
Relaciones entre M1 y M2
+puedeMoverse() : bool
Vehículo
Coche
-malEstado : bool
Rueda
-nombre : string
Persona
1
4
+driver
1
+car
*
-name : string
ModelElement
Classifier
-visibility : Visibility
Feature
Class DataType Operation Attribute AssociationEnd
Association
1
1 1..*
*
-generalizations
*
Instance of
Relaciones entre M1 y M2
+puedeMoverse() : bool
Vehículo
Coche
-malEstado : bool
Rueda
-nombre : string
Persona
1
4
+driver
1
+car
*
-name : string
ModelElement
Classifier
-visibility : Visibility
Feature
Class DataType Operation Attribute AssociationEnd
Association
1
1 1..*
*
-generalizations
*
Instance of
Relaciones entre M1 y M2
+puedeMoverse() : bool
Vehículo
Coche
-malEstado : bool
Rueda
-nombre : string
Persona
1
4
+driver
1
+car
*
-name : string
ModelElement
Classifier
-visibility : Visibility
Feature
Class DataType Operation Attribute AssociationEnd
Association
1
1 1..*
*
-generalizations
*
Instance of
Relaciones entre M1 y M2
+puedeMoverse() : bool
Vehículo
Coche
-malEstado : bool
Rueda
-nombre : string
Persona
1
4
+driver
1
+car
*
-name : string
ModelElement
Classifier
-visibility : Visibility
Feature
Class DataType Operation Attribute AssociationEnd
Association
1
1 1..*
*
-generalizations
*
Instance of
Relaciones entre M2 y M3
Instance of-name : string
ModelElement
Classifier
-visibility : Visibility
Feature
Class DataType Operation Attribute AssociationEnd
Association
1
1 1..*
*
-generalizations
*
-name : string
ModelElement
GeneralizableElement Feature
Classifier
Association
*
*
Class DataType
PrimitiveType VisibilityKind
TypedElement
StructuralFeature AssociationEnd
Attribute
http://smv.unige.ch/old/tiki-download_file.php?fileId=661
Instance of-name : string
ModelElement
Classifier
-visibility : Visibility
Feature
Class DataType Operation Attribute AssociationEnd
Association
1
1 1..*
*
-generalizations
*
-name : string
ModelElement
GeneralizableElement Feature
Classifier
Association
*
*
Class DataType
PrimitiveType VisibilityKind
TypedElement
StructuralFeature AssociationEnd
Attribute
Relaciones entre M2 y M3
Instance of-name : string
ModelElement
Classifier
-visibility : Visibility
Feature
Class DataType Operation Attribute AssociationEnd
Association
1
1 1..*
*
-generalizations
*
-name : string
ModelElement
GeneralizableElement Feature
Classifier
Association
*
*
Class DataType
PrimitiveType VisibilityKind
TypedElement
StructuralFeature AssociationEnd
Attribute
Relaciones entre M2 y M3
Instance of-name : string
ModelElement
Classifier
-visibility : Visibility
Feature
Class DataType Operation Attribute AssociationEnd
Association
1
1 1..*
*
-generalizations
*
-name : string
ModelElement
GeneralizableElement Feature
Classifier
Association
*
*
Class DataType
PrimitiveType VisibilityKind
TypedElement
StructuralFeature AssociationEnd
Attribute
Relaciones entre M2 y M3
Instance of-name : string
ModelElement
Classifier
-visibility : Visibility
Feature
Class DataType Operation Attribute AssociationEnd
Association
1
1 1..*
*
-generalizations
*
-name : string
ModelElement
GeneralizableElement Feature
Classifier
Association
*
*
Class DataType
PrimitiveType VisibilityKind
TypedElement
StructuralFeature AssociationEnd
Attribute
Relaciones entre M2 y M3
Instance of-name : string
ModelElement
Classifier
-visibility : Visibility
Feature
Class DataType Operation Attribute AssociationEnd
Association
1
1 1..*
*
-generalizations
*
-name : string
ModelElement
GeneralizableElement Feature
Classifier
Association
*
*
Class DataType
PrimitiveType VisibilityKind
TypedElement
StructuralFeature AssociationEnd
Attribute
Relaciones entre M2 y M3
Instance of-name : string
ModelElement
Classifier
-visibility : Visibility
Feature
Class DataType Operation Attribute AssociationEnd
Association
1
1 1..*
*
-generalizations
*
-name : string
ModelElement
GeneralizableElement Feature
Classifier
Association
*
*
Class DataType
PrimitiveType VisibilityKind
TypedElement
StructuralFeature AssociationEnd
Attribute
Relaciones entre M2 y M3
EjemplosAplicación de la Ingeniería Dirigida por Modelos
Telefonía IP
[Kelly and Tolvanen, 2008]
Productos de seguros
[Kelly and Tolvanen, 2008]
Automatización del hogar
[Kelly and Tolvanen, 2008]
Aplicaciones para móviles
[Kelly and Tolvanen, 2008]
Relojes digitales
[Kelly and Tolvanen, 2008]
Línea de productos para crear videojuegos
Introducción
Los videojuegos son uno de los negocios más rentables del mundo
Se quiere industrializar su desarrollo [Furtado, 2007] Juegos de aventuras
SLGML
Integrado en Visual Studio
Entorno de desarrollo (1/2)
Entorno de desarrollo (2/2)
Generación de artefactos
Validaciones semánticas
Todos los estados del juego tienen que ser alcanzables
Un personaje principal Una pantalla de inicio Una pantalla de fin de juego Etc…
Resultados
Sistemas de trazabilidad alimentaria
Introducción
Sistema que sirve para hacer la trazabilidad en la fabricación de productos alimentarios
Caso real de aplicación de MDE
Raw Material
Storage
RFID
HomeDistribution
Barcode
ShopProduct
Monitor
Transport Production
Trazabilidad hacia delante
Trazabilidad hacia detrás
CustomerProducerAuthority
...
CustomerProducerAuthority
...
Otros sistemas de identificación
Sistemas de identificación
La idea
Crear un sistema software/hardware adaptable a cada cliente de forma sencilla
Labeler
Server
Producer Interface
Consumer Interface
Authority Interface
Terminal
RFID Reader
RFID Chip
Printer
Proceso de fabricación
2. RECEPCION CUAJO
5. RECEPCION SAL
1. RECEPCION LECHE
10. SECADO
7. CUAJADA
FABRICA DE QUESOSPROCESO BEYOS
Fecha: 04/ 06/ 2008Versión: 0.017
11. ENVASADO12.
COMERCIALIZACION
6. PASTEURIZA
14.1 Cliente?14.2 Lote?14.3 Unidades?
11.1 RFID Secado?11.3 Nº Contra-etiquetas?11.4 Primera Contra-etiqueta11.5 Cliente?
1.1 Productor ?1.2 Tipo?1.3 Peso?1.4 Temperatura?1.5 Acidez?1.6 Lote Productor?1.7 Lote INT->?
2.1 Productor ?2.2 Cantidad?2.3 Lote Productor?2.4 Lote INT->?
3.1 Productor ?3.2 Cantidad?3.3 Lote Productor?3.4 Lote INT->?
7.1 Lote Leche?7.2 Cantidad? 7.3 Mas Leche?7.4 Lote Cuajo?7.5 Mas Cuajo?7.6 Lote Fermentos? 7.7 Mas Fermentos?7.8 Lote Calcio? 7.9 Mas Calcio? 7.10 Lote INT->
6.1 Lote ?6.2 Cantidad?6.2 PH?
10.1 RFID Salado?
3. RECEPCION FERMENTOS
4. RECEPCION CALCIO
5.1 Productor ?5.2 Cantidad?5.3 Lote Productor?5.4 Lote INT->?
8. EMMOLDADO
4.1 Productor ?4.2 Cantidad?4.3 Lote Productor?4.4 Lote INT->?
ETIQUETAS RFID
9. SALADO
9.1 RFID Enmoldado?9.2 Lote Sal?
13. ENVASADO REQUESÓN
12.1 Lote?12.2 Nº Artículos?12.3 Cliente?
ETIQUETAS COMERCIALES
Las etiquetas las irán colocando en las estanterías que quieran
14. COMERCIALIZ
ACION
13.1 Cliente?13.2 Peso?13.3 Lote?13.4 Unidades?
8.1 Lote Cuajada?8.2 Nº etiquetas deseadas?
El punto de vista PIM
Documento XML conforme con un XML Schema
Se hacen transformaciones para generar código
Varias secciones para definir el proceso También hay una interfaz gráfica
PIM (Productos)
Generador de código
Modelo origenSistema
generado
nUML ExpertCoder
Sistema generado
Database.sql
Eclipse Modeling Project
Plataforma para el desarrollo de software dirigido por modelos
Eclipse Modeling Project
Engloba todo lo relacionado con MDE en EclipseThe Eclipse Modeling Project (EMP) focuses on the evolution and
promotion of model‐based development technologies within the Eclipse community by providing a unified set of modeling frameworks, tooling, and standards implementations
Todos tiene Eclipse Public Licence y ha de ser Open Source
No está relacionado con el grupo OMG pero… Se divide principalmente en:
Desarrollo de sintaxis abstractas Desarrollo de sintaxis concretas Transformación de modelos Herramientas de desarrollo Desarrollo de nuevas tecnologías Agrupación de proyectos
http://www.eclipse.org/modeling
Sintaxis abstracta
Eclipse Modeling Framework (EMF) Ecore Otros componentes:
▪ Soporte para realizar transacciones sobre modelos▪ Validación de modelos▪ Consultas sobre modelos▪ Búsquedas sobre modelos▪ Comparación de modelos▪ Mecanismos de persistencia
Sintaxis concreta
Graphical Modeling Framework (GMF) Servicio de sintaxis gráficas Permite crear un editor sobre el metamodelo Ecore
Textual Modeling Framework (TMF) Servicio de sintaxis textuales Permite crear un editor sobre el metamodelo Ecore Xtext es una tecnología englobada dentro de TMF
Transformación de modelos
Model to Model Transformation (M2M) Para transformar unos modelos en otros QVT, ATL, Xtend, etc…
Model to Text Transformation (M2T) Para generar artefactos textuales Java Emitter Templates (JET), Xpand, etc…
Herramientas de desarrollo
Model Development Tools (MDT) Proyectos basados en estándares de la
industria▪ XML Schema (XSD)▪ UML2▪ UML2 Tools▪ Object Constraint Language (OCL)▪ Business Process Modeling Notation (BPMN2)▪ …
Desarrollo de nuevas tecnologías
Generative Modeling Technologies (GMT) Agrupa a varios proyectos que aún están en
fase experimental Muchos de ellos acaban formando parte de la
lista principal de proyectos de EMP▪ ATL -> ahora en M2M▪ Xpand -> ahora en M2T▪ Xtext -> ahora en TMF
Agrupación de proyectos
Modeling Amalgamation Project (Amalgam) Amalgamation -> Es el proceso de combinar o
unir entidades en una única forma Su propósito es agrupar tecnologías de EMP y
facilitar su uso, instalación e integración
PrácticoTrabajando con el Eclipse Modeling Project
Instalación
Lo más fácil es descargar un Eclipse con todo
http://www.eclipse.org/downloads/packages/release/galileo/sr2 (Eclipse Modeling Tools)
Definición de un metamodeloMediante el editor gráfico
Meta-metamodelo Ecore
EcoreECORE META-METAMODEL
Crear un Proyecto
Nuevo proyecto org.eclipse.emp.examples.web
Crear el modelo Ecore (1/2)Metamodelo
Nuevo elemento en la carpeta model web.ecore
Crear el modelo Ecore (2/2)Metamodelo
Visualizar el modelo Ecore
Crear el modelo Generador Metamodelo generador
Nuevo EMF Generator Model web.genmodel
Configurar el modelo Generador
Generar código Java
Generar un plug-in
Crear un modelo con el plug-in
Proyecto Java
Crear un modelo programáticamente (1/2)
Crear un modelo programáticamente (2/2)
Crear JavaDoc
Crear métodos (1/3)
Crear métodos (2/3)
EOperation
EParameter
Cuerpo del método
Documentación JavaDoc
Crear métodos (3/3)
Extender un modelo Ecore (1/2)
Extender un modelo Ecore (2/2)
Persistir el modelo a XMI
Abrir org.eclipse.emp.examples.web.programming
Crear SaveXMI.java
Cargar el modelo serializado Abrir
org.eclipse.emp.examples.web.programming Crear LoadXMI.java
Generar código a partir del modelo (1/6)
Java Emitter Template (JET) Model-to-Text Modelo JAVA Texto Traducción y generación Tipos de elementos
▪ Directivas <%@ … %>▪ Expresiones <%= .. %>▪ Scriplets <% … %>
Generar código a partir del modelo (2/6)
Convertir el proyecto para trabajar con JET org.eclipse.emp.examples.web.programmi
ng
Generar código a partir del modelo (3/6)
Generar código a partir del modelo (4/6)Creación de la plantilla
Generar código a partir del modelo (5/6)Utilización de la clase Java creada por la plantilla
Abrir org.eclipse.emp.examples.web.programming
Crear ConvertToHTML.java
Generar código a partir del modelo (6/6)
Crear programáticamente categorías y artículos dentro de una Web
Crear mediante JET un archivo HTML para la Web (index.html) y dentro enlaces a un archivo HTML para cada categoría, mostrando en cada categoría la información de los artículos
Patrón de diseño Observer
Abrir org.eclipse.emp.examples.web.programming
Crear Observable.java y Observer.java
Definición de un metamodeloMediante interfaces Java anotadas
Interfaces Java anotadas (1/4)
Se utilizan comentarios JavaDoc para anotarlas
Algunas propiedades… abstract=“BOOLEAN” required=“BOOLEAN containment=“BOOLEAN” default=VALUE changeable=“BOOLEAN"
Interfaces Java anotadas (2/4)
Crear archivo web.genmodel Proyecto org.eclipse.emp.examples.web.interfaces
Interfaces Java anotadas (3/4)
Interfaces Java anotadas (4/4)
Definición de un metamodeloProgramáticamente
Programáticamente (1/5)
Metamodelo
Modelo API reflectiva basada en Eobject eClass() eGet() y eSet() eContents() / eContainer()
Programáticamente (2/5)
Crear dinámicamente el metamodelo (modelo Ecore) Crear dinámicamente un modelo a partir del
metamodelo Serializar el modelo Deserializar el modelo Mostrar información del modelo Abrir org.eclipse.emp.examples.web.programming Crear Dynamic.java
Programáticamente (3/5)
Programáticamente (4/5)
Programáticamente (5/5)
BibliografíaBibliografía básica
http://www.omg.org