tp1_mde_mgi
DESCRIPTION
Model driven engineeringTRANSCRIPT
1 2014-2015
UNIVERSITE IBN TOFAIL
Faculté des Sciences
Département d’Informatique
KENITRA
Ingénierie Dirigée par les Modèles (MDE) MGI, Semestre 3
TP n°1 : Modèles et Méta-modèles Ecore
A. Réalisation d’un méta-modèle Ecore en tant que diagramme de type ecorediag
Dans cette partie, on vous demande de réaliser un méta-modèle UML simple du nom ″cdm″
(Class Diagram Model). Le diagramme doit être créé dans l’éditeur Ecore Diagramme, en
ajoutant dans votre projet un élément de type ecorediag. Le méta-modèle UML est celui de
diagramme de classes :
- La classe de base est ModelElement. C’est une classe abstraite qui possède par un
name et un kind.
- Un ModelElement peut être un Package, un PackageElement ou un Attribute.
- Un PackageElement est soit un Classifier soit une Association.
- Un package contient 0 ou plusieurs éléments de type Classifier.
- Il existe deux types de Classifier : les classes et les types de données (DataType).
- Une classe peut posséder 0 ou plusieurs attributs (Attribute).
- Un attribut a un nom et son type est défini par un Classifier.
D’autres informations doivent être représentées comme l’association binaire, la
généralisation-spécialisation. Le fichier XMI suivant représente le méta-modèle en question.
Vous devez le lire, comprendre son contenu afin de pouvoir élaborer votre méta-modèle dans
l’éditeur Ecore Diagram.
<?xml version="1.0" encoding="UTF-8"?>
<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="cdmm" nsURI="http://cdmm/1.0"
nsPrefix="cdmm">
<eClassifiers xsi:type="ecore:EClass" name="ModelElement" abstract="true">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1"
eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="kind" eType="ecore:EDataType
http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="PackageElement" abstract="true"
eSuperTypes="#//ModelElement">
<eStructuralFeatures xsi:type="ecore:EReference" name="namespace" eType="#//Package"
eOpposite="#//Package/elements"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Package" eSuperTypes="#//ModelElement">
<eStructuralFeatures xsi:type="ecore:EReference" name="elements" upperBound="-1"
eType="#//PackageElement" containment="true" eOpposite="#//PackageElement/namespace"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Classifier" abstract="true"
eSuperTypes="#//PackageElement"/>
2 2014-2015
<eClassifiers xsi:type="ecore:EClass" name="Class" eSuperTypes="#//Classifier">
<eStructuralFeatures xsi:type="ecore:EReference" name="forward" upperBound="-1"
eType="#//Association" eOpposite="#//Association/destination"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="reverse" upperBound="-1"
eType="#//Association" eOpposite="#//Association/source"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="attributes" upperBound="-1"
eType="#//Attribute" containment="true" eOpposite="#//Attribute/owner"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="general" upperBound="-1"
eType="#//Class" eOpposite="#//Class/specific"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="specific" upperBound="-1"
eType="#//Class" eOpposite="#//Class/general"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Attribute" eSuperTypes="#//ModelElement">
<eStructuralFeatures xsi:type="ecore:EReference" name="owner" eType="#//Class"
eOpposite="#//Class/attributes"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//Classifier"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Association" eSuperTypes="#//PackageElement">
<eStructuralFeatures xsi:type="ecore:EReference" name="destination" lowerBound="1"
eType="#//Class" eOpposite="#//Class/forward"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="source" lowerBound="1"
eType="#//Class" eOpposite="#//Class/reverse"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="DataType" eSuperTypes="#//Classifier"/>
</ecore:EPackage>
B. Réalisation d’un méta-modèle Ecore dans un éditeur de texte
Dans cette partie, vous devez réaliser un autre méta-modèle Ecore mais cette fois dans
l’éditeur de texte d’eclipse. Ce méta-modèle est celui d’une base de données relationnelle
qu’on appellera rdbm (Relational DataBase Model) et qui est représenté dans le diagramme
Ecore ci-dessous :
3 2014-2015
C. Création d’une instance de méta-modèle Ecore
Créer le genmodel de votre méta-modèle cdm, puis générer le code Java du méta-modèle
ainsi que celui de l’éditeur. Après utiliser cet éditeur pour créer un diagramme de classe dans
l’éditeur hiérarchique que vous venez de créer.
D. Création d’une instance de méta-modèle Ecore dans un éditeur de texte
Vous allez maintenant refaire l’étape précédente mais cette fois le modèle du diagramme de
classes ci-dessous doit être créé dans un éditeur de texte.