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?