Conceptos Básicos sobre Model Driven Engineering

Transcripción

Conceptos Básicos sobre Model Driven Engineering
Conceptos Básicos sobre
Model Driven Engineering
Jaime A. Pavlich-Mariscal
Departamento de Ingeniería de Sistemas
Pontificia Universidad Javeriana
[email protected]
Cámara de Comercio de Bogotá – Centro Empresarial Chapinero
En el pasado, programar computadores era una tarea difícil
¿Por qué?
Una línea de código
• Z(1) = Y + W(1)
© Arnold Reinhold
Lenguaje de Máquina
• Fragmento de programa “Hola Mundo”
55 48 89 e5 48 83 89 7d 48 89 75 bf
00 00 00 e8 00 00 00 c3 Lenguaje Assembly
• El mismo fragmento en assembly
push
%rbp
mov
%rsp,%rbp
sub $0x10,%rsp
mov
%edi,‐0x4(%rbp)
mov
%rsi,‐0x10(%rbp)
mov
$0x0,%edi
callq 19 leaveq
retq
Hoy en día, programar es más fácil
public class CourseSection {
public CourseDescription getDescription() {
...
}
public Integer getTerm() {
Lenguajes de alto nivel
...
} }
Abstraccción
Lenguaje de Máquina
Lenguajes de Alto Nivel ‐ Características
• Abstraen los detalles del lenguaje de máquina
– No es necesario modificar el código de máquina generado por el compilador
• Ahorra escritura de código
– Una instrucción de lenguaje de alto nivel equivale a varias de bajo nivel
• Portabilidad
– Hardware
– Sistemas Operativos
Limitaciones de los
Lenguajes de Alto Nivel
Limitaciones
• Alta complejidad de librerías y frameworks
– Java SE 6 – 3700+ clases
– Java EE 6 – 1500+ clases
• Configuración de entornos de desarrollo y despliegue
• Lenguajes de propósito general
– “One size does not fit all”
Modelos
Abstraccción
public class CourseSection {
public CourseDescription getDescription() {
<retrieve course description>
Lenguajes de alto nivel
}
public Integer getTerm() {
<retrieve term>
} ... }
Abstraccción
Lenguaje de Máquina
¿Qué es Abstracción?
• Omitir detalles
irrelevantes
• Capturar lo esencial
¿Qué es un Modelo?
Modelo
• Especificación
abstracta de una
entidad del mundo
real
– Representa
propiedades relevantes
de la entidad
(abstracción)
– Puede ser usado en lugar de la entidad para
un propósito específico
T. Kühne, “What is a Model,” in IBFI, 2005.
Modelos en Model Driven Engineering
Modelos
Abstraccción
public class CourseSection {
public CourseDescription getDescription() {
<retrieve course description>
Lenguajes de alto nivel
}
public Integer getTerm() {
<retrieve term>
} ... }
Abstraccción
Lenguaje de Máquina
Modelos
Abstraccción
Mundo Real
Mundo Real
Modelos
Software
Model Driven Engineering (MDE)
• Modelos como Artefacto Central en el Desarrollo de Software
– Lenguajes de modelado para formalizar
estructura, comportamiento y requerimientos de dominios particulares
– Generadores y transformadores para convertir
modelos en código o en otros modelos
Mundo Real
Modelos
Software
D. C. Schmidt, “Guest Editor’s Introduction: Model‐Driven Engineering,” Computer, vol. 39, no. 2, pp. 25– 31, Feb. 2006.
Model Driven Engineering ‐ Ventajas
• Abstraen detalles de los lenguajes de alto nivel
• Ahorran escritura de código
– Un diagrama equivale a varias líneas de código de alto nivel
• Automatizan tareas repetitivas de programación
• Portabilidad
– Arquitecturas de software
– Frameworks
– Lenguajes de programación
Modelos de Software ‐ Problemas
• Abstracción incompleta
– Puede ser necesario modificar el código generado
• Transformación Modelos Código no es 1:1
• Cambios en código generado rompen consistencia
• Administración compleja de múltiples modelos y plantillas de generación de código
MDA, MDD, MDE
Model Driven Engineering (MDE)
Model Driven Development (MDD)
Model Driven Architecture (MDA)
D. Ameller, “Considering Non‐Functional Requirements in Model‐Driven Engineering,” Master Thesis, 2009. MDE: Conceptos Esenciales
Meta‐modelos
(Sintaxis Abstracta)
Transformación
Describen
Representan visualmente
Modelos
Generación de código
Describen cómo representar visualmente instancias de meta‐clases
Ingeniería reversa
Código fuente
Notación
(Sintaxis Concreta)
Describen
Diagramas
Texto
Ejemplo
Presionar botón power
Esperando
Presionar botón lavar
Diagramas
Lavando
Presionar botón power
Lavado terminado
StateMachine {
initial state Start
state Esperando;
state Lavando;
final state End;
transitions {
Start ‐> Esperando when
“presionar boton power”;
Esperando ‐> Lavando when
“presionar boton lavar”;
Lavando ‐> Esperando when
“lavado terminado”;
Esperando ‐> End when
“presionar boton power”;
}
Texto
}
Notación (Sintaxis Concreta)
Meta‐clase
State
Transition
StartState
EndState
Representación visual
“Nombre estado”
“Nombre transición”
Meta‐modelo (Sintaxis Abstracta)
+previousState
State
-
name :String
1
+nextState
1
StartState
Transition
*
EndState
*
name :String
Modelo
:Transition
:StartState
+previousState
name = "presionar botón power"
+nextState
:Transition
+previousState
name = "Presionar botón power"
:State
name = "Esperando"
+nextState
+previousState
:Transition
:Transition
name = "Presionar boton lavar"
name = "Lavado terminado"
+nextState
:EndState
+nextState
+previousState
:State
name = "Lavando"
Código Fuente
public class Lavadora {
enum State { START, ESPERANDO, LAVANDO, END }; private State state = State.START; public void presionarBotonPower() { if (state == State.START ) { state = State.ESPERANDO; } else if (state == State.ESPERANDO) { state = State.END; } } public void presionarBotonLavar() { if (state == State.ESPERANDO) { state = State.LAVANDO; } } public void lavadoTerminado() { if (state == State.LAVANDO) { state = State.ESPERANDO; } } } Generación de Código e Ingeniería Reversa
Modelos
Generación de código
Ingeniería reversa
Código fuente
Forward Engineering
Modelo de Diseño
Modelo de Diseño Modificado
Los Diseñadores modifican el Modelo
Generación de Código
Generación de Código
Código re‐generado
Código
Tiempo
Round‐Trip Engineering (RTE)
Modelo de Diseño
Modelo generado con Ing. Reversa
Generación de Código
Ingeniería Reversa
Los Programadores modifican el Código
Código
Código Modificado
Time
Aproximaciones
Model Driven
Architecture
Domain Specific
Modeling
Model Integrated
Computing
Model‐Driven Architecture (MDA)
Model Driven Architecture
[OMG]
Computation Independent
Model (CIM)
Transformation
Platform‐Independent
Model (PIM)
Transformation
Platform‐Specific Model
(PSM)
Code Generation
Código
UML
MOF
OCL
…
M3
M1
Car
-
M0
Class
Attribute
make :String
model :String
serialNumber :int
Instance
myCar :Car
serialNumber = 123456
make = "Ford"
model = "Escort LX"
Adaptado de: Gubaer, «Hierarchie der Metamodellierung». M2
Class
Transformación de modelos
Meta‐meta‐modelo
Meta‐
modelo
Meta‐
modelo
Meta‐
modelo
Lenguaje de transformación
Modelo A
Modelo B
Domain Specific Modeling
Domain Specific Modeling
[Kelly & Tolvanen]
Requirements
Domain Model
Code
Generation
Code
Domain Specific
Language
Model Integrated Computing (MIC)
Model Integrated Computing
[Sztipanovits & Karsai]
Model
Problem …
1
Model Interpreters
Problem N
Model Analyzers
Executable Software
Domain Analysis
Metalevel Process
Domain‐Specific Environment Synthesis
Domain Modeling and Model Analysis
Software and System Synthesis
Code
System Development Process
MDA
Problema
CIM
PIM
DSM
MIC
Require‐
ments
Domain Analysis
Domain
Model
Domain Modeling and Model Analysis
Code
Code
Solución
PSM
Code
Herramientas
Meta‐modelos
(Sintaxis Abstracta)
Modelos y Meta‐modelos
• Infraestructura
– Eclipse Modeling Framework
• Repositorios de modelos
Modelos
– Eclipse CDO
– EMFStore
– Bases de datos OO
• Verificación
– OCL
• Otros
• Generic Modeling Environment
(GME)
Notación
(Sintaxis Concreta)
Diagramas
Notación y Diagramas
• Frameworks gráficos
–
–
–
–
Java2D
Piccolo2D
ZVTM
Graphical Editing Framework (GEF)
• Frameworks de creación de notaciones
– Eclipse Graphical Modeling Framework (GMF)
– Eclipse Graphiti
– EuGENia
• Herramientas que incluyen definición de notación
– GEMS
– MetaEdit+
– Visual Studio Visualization & Modeling SDK
Notación
(Sintaxis Concreta)
Texto
Notación y Texto
• Creación de meta‐modelos EMF
– EMFatic
– Epsilon  Human‐Usable Textual Notation (HUTN)
• Creación de intérpretes
– ANTLR
– JavaCC
• Definición de notaciones textuales en EMF
– EMFText
– Xtext
Generación de código
Modelos
Código fuente
• Herramientas para crear generadores de código
–
–
–
–
–
–
JET
Acceleo
Xpand
MOFScript
Apache Velocity
Visual Studio Visualization & Modeling SDK
• Generadores específicos
–
–
–
–
AndroMDA
Taylor
SeamGen
Herramientas CASE
Transformación
Modelos
•
•
•
•
•
•
Transformación de Modelos
Atlas Transformation Language (ATL)
Epsilon Transformation Language (ETL)
Graph Rewriting and Transformation (GReAT)
Kermeta
Query View Transformation (QVT)
VIATRA
Modelos
Ingeniería reversa
• MoDisco
• JaMoPP
• Herramientas CASE
Código fuente
Conclusiones
• MDE entrega beneficios si es usada con cuidado
• Desafíos
– Comprensión de modelos
– Verificación de Modelos
– Escalabilidad
– Transformaciones M2M, M2T
– Reutilización de alto nivel
• “The model is the code”
• Eliminar la necesidad de modificar el código generado
¿Preguntas?

Documentos relacionados