Eclipse Modeling Framewok (EMF)



Documentos relacionados
EMF Xpand & Xtend. Sistemas Distribuidos. Diego Sevilla Ruiz. DITEC Facultad de Informática. Murcia, noviembre de 2010

Curso de Java POO: Programación orientada a objetos

Construcción de editores de modelos con EMF

Generación de código para Hibernate desde modelos UML

GENERACIÓN DE APLICACIONES MEDIANTE LENGUAJES ESPECIFICOS DE DOMINIO

Crear una Activity en Android. Paso por paso

Introducción a Protégé

"Módulo OOWS para StarUML" INTRODUCCIÓN

Programación Orientada a Objetos con Java

Iván Ruiz Rube Departamento de Ingeniería Informática Escuela Superior de Ingeniería Universidad de Cádiz

Vicente Pelechano. Departamento de Sistemas Informáticos y Computación Universidad Politécnica de Valencia

Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación. IIC1102 Introducción a la Programación

La Necesidad de Modelar. Diseño de Software Avanzado Departamento de Informática

Transformaciones de modelo a texto con Acceleo Curso

Instalación y uso del framework Taylor para el modelaje de entidades JPA

Apéndice 1. DMOF Y MOF 2

EXAMEN FINAL Metodología y Programación Orientada a Objetos. Curso Cuatrimestre de otoño. 17 de Enero de 2011

1. El entorno de desarrollo Eclipse

INDICE. 1. Introducción El panel Entities view El panel grafico Barra de botones Botones de Behavior...

JAVA EE 5. Arquitectura, conceptos y ejemplos.

Lenguajes de Programación Curso Práctica 4. Herencia. Utilización de interfaces y clases abstractas. 1. Interfaces Clases abstractas 2

Java en 2 horas. Rodrigo Santamaría

Introducción a Java LSUB. 15 de enero de 2015 GSYC

UNIDAD 2: Abstracción del Mundo real Al Paradigma Orientado a Objetos

Patrones para persistencia (I) Ingeniería del Software II

2.2.- Paradigmas de la POO

Clase Práctica Nº 1 ED 2015

RUEDA TORRES DULCE CAROLINA 3CM2 HIBERNATE EN UNA APLICACIÓN WEB

WEB SERVICES CREACIÓN DEL SERVICIO

1. El entorno de desarrollo Eclipse

Introducción al LabVIEW

19. Packages o paquetes

Manual de NetBeans y XAMPP

Notación UML para modelado Orientado a Objetos

GESTIÓN DE REDES PARTE III

Introducción a ZEUS. Introducción. Curso Doctorado Sistemas Multi-agente. Zeus es una herramienta de desarrollo de SMA.

Tutorial básico del entorno de desarrollo Eclipse.

Java en 3 horas. Ampliación de Sistemas Operativos. Rodrigo Santamaría

Programación orientada a objetos

Tema 1. Introducción a JAVA

Desarrollo de apps para móviles Android. Entorno de desarrollo

Conceptos fundamentales de la POO. Fundamentos de la Programación Orientada a Objetos Objetos y Clases

Introducción a la extensión de scripting en gvsig 2.0

JavaScript como Orientación a Objetos

Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

%& %)& '$!%*+ $, %%%&$ %%

Curso de JavaServer Faces

Herramienta CASE (Bouml)

Implementación de un lenguaje de definición de operaciones complejas en Gestión de Modelos para la herramienta MOMENT

Fundamentos de Programación

Patrones de software y refactorización de código

Programación Avanzada SOLUCIÓN EXAMEN FEBRERO 2011

Registro (record): es la unidad básica de acceso y manipulación de la base de datos.

Partes de un programa en Java. A. Ejemplo de un Programa en Java /* Programa Ejemplo de Java: Muestra una Ventana Archivo: Ejemplo1.

Patrones Creacionales Builder. Patrones Creacionales Abstract Factory. Patrones Creacionales Singleton. Patrones Creacionales Prototype

4994 Introduction to Programming Microsoft.NET Framework Applications with Microsoft Visual Studio 2005

Algunas Herramientas de Apoyo al Análisis y Diseño de Software. Agustín J. González ELO329: Diseño y programación orientados a objetos

Capitulo III. Diseño del Sistema.

CAPÍTULO 3 VISUAL BASIC

Programación Avanzada Ingeniería Civil en Computación

Diseño orientado a los objetos

Iván Ruiz Rube Departamento de Ingeniería Informática Escuela Superior de Ingeniería Universidad de Cádiz

ATLAS MANUAL DE USUARIO ARBOL ACCESIBLE

Cristian Blanco

Universidad Nacional de Luján Departamento de Ciencias Básicas Programación III

CAPITULO V. HERRAMIENTA CASE (Rational Rose, C++)

INTRODUCCION. entidades. Modelo lógico de la base de datos. Matricula. carne. codigo_curso. año semestre nota. propiedades

FEATURE MODELING TOOL MANUALES

Seminario de Herramientas

TEMA 1.-Programación orientada a objetos (POO) Objetivo

Capitulo 5. Implementación del sistema MDM

Lenguajes específicos de dominio gráficos y textuales: Un estudio comparativo

LENGUAJES DE CONSULTA ORIENTADOS A OBJETOS

CORBA desde Java. Diego Sevilla Ruiz Sistemas Distribuidos. 1. Introducción

GUIA DE LABORATORIO N 8 A(Netbeans-java,Glassfish)

El lenguaje de programación Java

Laboratorio 7 Motor de búsqueda web basado en el TAD Árbol Binario de Búsqueda GUIÓN DEL LABORATORIO

Tutorial de UML. Introducción: Objetivos: Audiencia: Contenidos:

Escuela Politécnica Nacional I. Bernal. Iván Bernal, Ph.D. 4

UNIVERSIDAD DE SEVILLA PRÁCTICAS DE LABORATORIO ANÁLISIS SINTÁCTICO (1) LENGUAJES FORMALES Y AUTÓMATAS CURSO 2006/2007

Presentación y Planificación del Proyecto: Administración de Calzado

Programación páginas web. Servidor (PHP)

Entidad Formadora: Plan Local De Formación Convocatoria 2010

Creación un instalador con Visual Studio.NET. Irene Sobrón. Ingeniero de Telecomunicaciones por la Escuela Técnica Superior de Bilbao

IWG-101: Introducción a la Ingeniería. Departamento de Informática, UTFSM 1

KNime. KoNstanz Information MinEr. KNime - Introducción. KNime - Introducción. Partes de la Herramienta. Editor Window. Repositorio de Nodos

Práctica sobre compartición de instancias remotas.

Definiciones. Tema 21_Módulos Menú 1

Tutorial Enterprise Architect 7.5 Versión en español

Diagrama de Clases. Diagrama de Clases

Programación en Java. Programación en OO

Curso de Spring Framework

Administración de Variabilidad en una línea de producto basada en modelos

Java Inicial (20 horas)

Relaciones entre clases: Diagramas de clases UML

INGENIERÍA DEL SOFTWARE I Práctica 4 Interacciones

Ministerio de Educación Base de datos en la Enseñanza. Glosario

2.4 Modelado conceptual

FORMACIÓN Principios de la programación orientada a objetos

Transcripción:

Eclipse Modeling Framewok (EMF) Distributed Systems Diego Sevilla Ruiz DITEC Facultad de Informática Murcia, October 2011 Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 1 / 52

Contents 1 Introduction 2 Modelado y metamodelado 3 Ecore Metamodelo Metamodelos Ecore EMF y Ecore en Eclipse 4 Generación del código del modelo Java: GenModel C++: EMF4CPP 5 Manejo de Modelos y Metamodelos Java C++ Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 2 / 52

Contents 1 Introduction 2 Modelado y metamodelado 3 Ecore Metamodelo Metamodelos Ecore EMF y Ecore en Eclipse 4 Generación del código del modelo Java: GenModel C++: EMF4CPP 5 Manejo de Modelos y Metamodelos Java C++ Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 3 / 52

Eclipse EMF The Eclipse Modeling Framework (EMF) is a powerful framework and code generation facility for building Java applications based on simple model definitions. Designed to make modeling practical and useful to the mainstream Java programmer, EMF unifies three important technologies: Java, XML, and UML. Software is focused on manipulating data that can be modeled, hence, models drive software development. This refcard will get you started with the Eclipse Modeling Framework. Essential EMF. Ed Merks & James Sugrue Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 4 / 52

Eclipse EMF (ii) Cohesive set of tools to support the model-based development (MDE) primarily in Java Defines a framework to easily describe relationships between data structures and transform the into language programming artifacts Define una equivalencia entre XSchema, (Meta)Modelo, UML y código Java anotado Provides a graphical editor for models Provides tools to extract information from programs and turn them into models (T2M), to generate executable code from models (M2T) and to do model transformations (M2M) Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 5 / 52

Contents 1 Introduction 2 Modelado y metamodelado 3 Ecore Metamodelo Metamodelos Ecore EMF y Ecore en Eclipse 4 Generación del código del modelo Java: GenModel C++: EMF4CPP 5 Manejo de Modelos y Metamodelos Java C++ Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 6 / 52

Modeling and metamodeling Un modelo: It is an abstract representation of a domain Captures the important elements and their relationships Los elementos de representación dependen del dominio Por ejemplo, en UML: Se representa el problema con clases y relaciones Se utilizan elementos gráficos para mostrarlos Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 7 / 52

Modelado y metamodelado (ii) Un metamodelo: Describe las características de los modelos en sí, y de los elementos que lo componen Por ejemplo, cualquier modelo UML contiene: Clases Atributos Operaciones Relaciones Herencia Dónde se describe las características de cada elemento estructural del modelo? Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 8 / 52

Modelado y metamodelado (iii) MOF Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 9 / 52

Contents 1 Introduction 2 Modelado y metamodelado 3 Ecore Metamodelo Metamodelos Ecore EMF y Ecore en Eclipse 4 Generación del código del modelo Java: GenModel C++: EMF4CPP 5 Manejo de Modelos y Metamodelos Java C++ Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 10 / 52

Ecore Es equivalente a MOF (EMOF) Especifica las características de las clases (EClass), sus características estructurales (EStructuralFeatures), atributos, operaciones, relaciones (herencia, referencia). Orientado a Java: Permite especificar tipos de datos básicos (Java) No permite el soporte de C++ (directamente). P. ej. no permite especificar la siferencia entre const o no, punteros, etc. Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 11 / 52

Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 12 / 52

Metamodelo: Discusión Nota: Se describen las características de los elementos del modelo de datos El elemento aglutinador (raíz) es el paquete (EPackage) El paquete contiene físicamente a sus elementos (especificación de containment) Los paquetes pueden estar contenidos en otros paquetes Hay una factoría (EFactory) por paquete que permite la creación de los elementos del modelo Las construcciones que describen a un conjunto de elementos (instancias) son clasificadores (EClassifiers): EClass y EDataType Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 13 / 52

Metamodelo: Discusión (ii) Las EClasses tienen superclases y están compuestas por características estructurales (EStructuralFeatures: EReference y EAttribute). Tanto las EReferences como los EAttributes pueden estar dotados de multiplicidad Los EDataTypes modelan tipos básicos o indivisibles del modelo de datos Los EReferences pueden estar contenidos (containment, no tienen entidad propia) o ser referencias estrictamente (punteros) Las Operations modelan operaciones del interfaz (aunque no se provee implementación para ellas) Todos los elementos heredan de ENamedElement (tienen nombre), y de EModelElement (elemento del modelo) Todo elemento del modelo puede tener asociadas anotaciones (EAnnotation): pares nombre/valor para especificaciones extra (p. ej. restricciones OCL ó cadenas de documentación) Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 14 / 52

EMF Tipos de datos (Datatypes) Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 15 / 52

EMF Metamodelos Ecore Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 16 / 52

Metamodelo: Discusión Nota: Se describen las características de cada clase (es una instancia del metamodelo de Ecore) Clasificadores del paquete Clases StructuralFeatures de las clases (EAttribtutes, EReferences, etc.) La clase Node tiene un atributo y dos referencias Los atributos sólo pueden ser EDataTypes, y siempre son contenidos La referencia children es contenida, mientras que parent es un «puntero» Nótese también la referencia eopposite La raíz así se convierte en un contenedor para todo el modelo Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 17 / 52

EMF Instancia de metamodelo Tree Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 18 / 52

Modelo (instancia): Discusión Nota: Se describen las instancias de los datos, organizados según el metamodelo Varias instancias de las clases Contienen los campos rellenos, lo que incluye los StructuralFeatures de las clases (EAttribtutes, EReferences, etc.) Los campos referencia opuestos (parent) se rellenan automáticamente (son relaciones conectadas, todo directo tiene su opuesto) Gracias al metamodelo, podemos recorrer la estructura siguiendo su semántica es decir, obteniendo el «Label» a través del método getlabel() de un nodo se puede seguir por los hijos con getchildren() (se verá después) Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 19 / 52

XMI: Serializado XML 1 < tree:node xmi:version =" 2.0 " xmlns:xmi =" http: // www. omg. org / XMI " 3 xmlns:tree =" http: // www. example. org / tree " label =" root "> 5 < children label ="A"> < children label ="X"/> 7 </ children > < children label ="B"> 9 < children label ="Y"/> </ children > 11 </ tree:node > Notas: Sigue la estructura jerárquica de contenido Las referencias se extraen del metamodelo y de la estructura Aseguran la integridad referencial gracias al metamodelo El metamodelo también se serializa a XMI (también es un modelo) Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 20 / 52

El editor de Metamodelos Crear proyecto New Other... Empty EMF Project Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 21 / 52

El editor de Metamodelos Nombre: es.um.emf.test Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 22 / 52

El editor de Metamodelos El directorio src contiene el código El directorio model contiene modelos y metamodelos Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 23 / 52

Crear metamodelo Ecore Tree (i) Dir. model Click derecho New... Ecore Modeling Framework Ecore model Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 24 / 52

Crear metamodelo Ecore Tree (ii) Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 25 / 52

Editor gráfico del metamodelo Tree.ecore Click derecho Initialize Ecore Diagram file... (Tree.ecorediag) Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 26 / 52

Editor Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 27 / 52

Editor gráfico Paleta Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 28 / 52

Propiedades del nodo raíz Ns Prefix Se utiliza como prefijo de namespace en el XMI Ns URI Identifica al metamodelo de forma unívoca universalmente El metamodelo se puede registrar (y encontrar) en Eclipse con ese nombre único Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 29 / 52

Editor de Ecore no visual Tree.ecore Botón derecho Open With... Simple Reflective Ecore Editor Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 30 / 52

Creando instancias dinámicas El metamodelo describe qué elementos van a existir en el modelo Podemos crear un modelo como una instancia del metamodelo Para cada clase del metamodelo (p. ej. Node) tendremos un conjunto de instancias (p. ej. A, B, X, etc.) iego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 31 / 52

Creando instancias dinámicas (ii) Node Botón derecho New child... Se rellenan las propiedades y las referencias Las referencias inversas se rellenan automáticamente Nótese la referencia al metamodelo El fichero es un fichero.xmi iego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 32 / 52

Contents 1 Introduction 2 Modelado y metamodelado 3 Ecore Metamodelo Metamodelos Ecore EMF y Ecore en Eclipse 4 Generación del código del modelo Java: GenModel C++: EMF4CPP 5 Manejo de Modelos y Metamodelos Java C++ Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 33 / 52

Generación del código del modelo Intuitivamente, una EClass del metamodelo se transformará en una clase del lenguaje de programación Las instancias de esas clases serán el modelo en tiempo de ejecución de los datos de nuestra aplicación Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 34 / 52

Genmodel Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 35 / 52

Genmodel Tree.ecore Botón derecho New... Eclipse Modeling Tools Ecore Generator model Tree.genmodel Next Seleccionar Ecore Model Nótese las posibilidades: Java anotado XML Schema Ecore... Next Seleccionar el modelo origen Tree.ecore Load Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 36 / 52

Genmodel Root packages Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 37 / 52

Genmodel en XMI 1 < genpackages prefix =" Tree " disposableproviderfactory =" true " ecorepackage =" Tree. ecore #/"> < genclasses ecoreclass =" Tree. ecore #// Node "> 3 < genfeatures createchild =" false " ecorefeature =" ecore:eattribute Tree. ecore #// Node / label "/> < genfeatures property =" None " notify =" false " createchild =" false " ecorefeature =" ecore:ereference Tree. ecore #// Node / parent "/> 5 < genfeatures property =" None " children =" true " createchild =" true " ecorefeature =" ecore: EReference Tree. ecore #// Node / children " />... Guarda los datos y parámetros necesarios para emprender la generación de código Nótese las referencias al metamodelo Tree.ecore (URNs) Conocido como decorador del Ecore (añade características a éste) Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 38 / 52

Generate Model Code Propiedades de Tree: Base Package es.um.emf.test Tree.genmodel/Tree, Botón derecho Generate Model Code Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 39 / 52

Model Code Paquete es.um.emf.test.tree: Interfaz puro Paquete es.um.emf.test.tree.impl: Implementación Paquete es.um.emf.test.tree.util: Utilidades iego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 40 / 52

Model Code Package 2 package es.um.emf. test. tree ; public interface TreePackage extends EPackage { 4 String ename = " tree "; String ens_uri = " urn :es.um.emf. test. tree "; 6 String ens_prefix = "es.um.emf. test. tree "; 8 TreePackage einstance = tree. impl. TreePackageImpl. init (); 10 // Singletons ( Ecore metamodel elements ) EClass getnode (); 12 EAttribute getnode_ Label (); EReference getnode_ Parent (); 14 EReference getnode_ Children (); 16 TreeFactory gettreefactory (); } // TreePackage Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 41 / 52

Model Code Factory 1 package es.um.emf. test. tree ; 3 public interface TreeFactory extends EFactory { 5 // Factory Singleton TreeFactory einstance = tree. impl. TreeFactoryImpl. init (); 7 // Create new nodes ( instances ) of the model Nodes 9 Node createnode (); 11 TreePackage gettreepackage (); 13 } // TreeFactory Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 42 / 52

Model Code Node 1 package es.um.emf. test. tree ; public interface Node extends EObject { 3 // Label get / set 5 String getlabel (); void setlabel ( String value ); 7 // Parent get / set 9 Node getparent (); void setparent ( Node value ); 11 // Children 13 EList < Node > getchildren (); 15 } // Node EList<Node> permite también añadir elementos a través de su método add(): node.getchildren().add(x) Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 43 / 52

C++ Con el plugin org.csu.emf4cpp.plugin instalado: Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 44 / 52

C++ Si no se elige wizard el código se genera en el subdirectorio src-gen Similar a la estructura en Java Se generan utilidades de compilación con CMake (CMakeLists.txt, tree.cmake) Paquete tree dentro del subdirectorio tree.hpp y.cpp tree.hpp Incluir el modelo en programas C++ tree/node.{hpp,cpp} Clase Node También Paquete y Factoría Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 45 / 52

C++ Model Code Package 1 namespace tree { 3 class TreePackage : public virtual :: ecore :: EPackage { 5 public : static TreePackage_ptr _instance (); 7 // EClassifiers methods 9 virtual :: ecore :: EClass_ptr getnode (); 11 // EStructuralFeatures methods virtual :: ecore :: EAttribute_ptr getnode label (); 13 virtual :: ecore :: EReference_ptr getnode parent (); virtual :: ecore :: EReference_ptr getnode children (); 15 protected : 17 static std :: auto_ptr < TreePackage > s_instance ; 19 TreePackage (); 21 // EClass instances :: ecore :: EClass_ptr m_nodeeclass ; 23 // EStructuralFeatures instances 25 :: ecore :: EAttribute_ptr m_node label ; :: ecore :: EReference_ptr m_node parent ; 27 :: ecore :: EReference_ptr m_node children ; }; 29 } // tree Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 46 / 52

C++ Model Code Factory 1 namespace tree { 3 class TreeFactory : public virtual :: ecore :: EFactory { 5 public : static TreeFactory_ ptr _ instance (); 7 9 virtual Node_ ptr createnode (); protected : 11 static std :: auto_ptr < TreeFactory > s_ instance ; 13 TreeFactory (); }; 15 } // tree Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 47 / 52

C++ Model Code Node 1 namespace tree { 3 class Node : public virtual :: ecore :: EObject { 5 public : Node (); 7 virtual ~ Node (); 9 virtual void _initialize (); 11 // Attributes :: ecore :: EString const & getlabel () const ; 13 void setlabel (:: ecore :: EString const & _label ); 15 // References :: tree :: Node_ptr getparent (); 17 void setparent (:: tree :: Node_ptr _parent ); 19 :: ecorecpp :: mapping :: EList < :: tree :: Node >& getchildren (); protected : 21 // Attributes :: ecore :: EString m_label ; 23 // References :: tree :: Node_ptr m_parent ; 25 :: ecorecpp :: mapping :: out_ptr < :: ecorecpp :: mapping :: EList < :: tree :: Node > > m_children ; 27 }; } // tree Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 48 / 52

Contents 1 Introduction 2 Modelado y metamodelado 3 Ecore Metamodelo Metamodelos Ecore EMF y Ecore en Eclipse 4 Generación del código del modelo Java: GenModel C++: EMF4CPP 5 Manejo de Modelos y Metamodelos Java C++ Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 49 / 52

Crear un modelo programáticamente Java TreeFactory tree = TreeFactory. einstance ; 2 Node root = tree. createnode (); root. setlabel (" Root "); 4 Node a = tree. createnode (); a. setlabel ("A"); 6 root. getchildren ().add (a); Node x = tree. createnode (); 8 x. setlabel ("X"); a. getchildren ().add (x); 10 Node b = tree. createnode (); b. setlabel ("B"); 12 root. getchildren ().add (b); Node y = tree. createnode (); 14 y. setlabel ("Y"); b. getchildren ().add (y); Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 50 / 52

C++ 1 using namespace tree ; 3 TreeFactory_ptr treefactory = TreeFactory :: _instance (); 5 // Create a Node std :: auto_ptr <Node > root ( treefactory ->createnode ()); 7 root ->setlabel (" Root "); 9 // Create node A Node_ptr a = treefactory ->createnode (); 11 catsaes ->setlabel ("A"); root ->getchildren (). push_back (a); 13 Node_ptr x = treefactory ->createnode (); 15 catsaes ->setlabel ("X"); a->getchildren (). push_back (x); 17 // Create node B 19 Node_ptr b = treefactory ->createnode (); catsaes ->setlabel ("B"); 21 root ->getchildren (). push_back (b); 23 Node_ptr y = treefactory ->createnode (); catsaes ->setlabel ("Y"); 25 b->getchildren (). push_back (y); 27 // Initialize the model umu -> _initialize (); 29 // ( model is deleted automatically ) Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 51 / 52

Referencias D. Steinberg, F. Budinsky, M. Paternostro, Ed Merks EMF: Eclipse Modeling Framework, 2nd Edition. Addison-Wesley Professional, 2009 Ed Merks, J. Sugrue Essential EMF (EclipseCon 09). http://cheat-sheets.biz/saved-copy/rc039-010d-emf.pdf M. Paternostro, K. Hussey Building RESTful Java Applications with EMF. http://www.slideshare.net/kenn.hussey/ building-restful-java-applications-with-emf A. Senac, D. Sevilla EMF4CPP. http://www.catedrasaes.org/trac/wiki/emf4cpp Diego Sevilla Ruiz (DITEC Facultad de Informática) Eclipse Modeling Framewok (EMF) Murcia, October 2011 52 / 52