Examen CAR 2 Heures Tout documents autorisés le 17 Novembre 2005 Rappel : Tout méta-modèle ou profil doit être commenté! 1 Question de compréhension du cours barème indicatif : 5 points Q : Lorsque l on veut suivre une approche MDA, est-il obligatoire de faire des modèles UML (expliquez)? Non, cela n est pas obligatoire. MDA préconise l élaboration de CIM, de PIM et de PSM. Il n est en aucun cas obligatoire d utiliser UML pour construire l un de ces modèles. On peut parfaitement suivre une approche MDA sans faire de modèle UML! Q : Expliquez les différences entre profils UML et métamodèles MOF? Profils et métamodèle permettent de définir de nouveaux formalismes. La grosse différence entre un profil UML et un métamodèle MOF est que le profil UML n est qu une extension au métamodèle UML. Un modèle profilé reste toujours un modèle UML. Par contre, un métamodèle MOF peut n avoir aucun lien avec le métamodèle UML. Les modèles instances des métamodèles MOF ne sont donc totalement indépendants des modèles UML. Concernant ces deux technologies, il est actuellement difficile de dire aujourd hui si une permet plus de chose qu une autre (l exemple du formalisme de représentation des réseaux est illustratif car il a été traité avec les profils et peut être traité avec les métamodèles). Q : Pourquoi peut-on dire que le MOF est son propre métamodèle (expliquez très précisément)? Si l on veut faire le métamodèle du MOF on tombe sur le MOF lui-même. En effet, tous les concepts du MOF (class, opération attribut, package, ) permettent de construire des «diagrammes de classes». Or, le MOF est lui-même représenté par un diagramme de classe. Donc, le MOF peut s auto définir, il est donc son propre métamodèle! Q : Est-il possible de faire des PIM avec UML? Est-il possible de faire des PSM avec UML? (expliquez précisément chacun des cas) Un modèle UML est, par nature, indépendant d une plate-forme d exécution. Il est donc tout à fait naturel de faire des PIM avec UML. Les profils UML permettent d adapter UML à un domaine particulier. Il est alors possible de construire un profil permettant d adapter UML à une plate-forme d exécution (EJB ou Java par exemple). Ainsi, les modèles profilés selon ces profils seront dépendants d une plateforme d exécution. Ils seront des PSM.
Q : Quel est l intérêt de modéliser une transformation de modèles avec Q/V/T alors que l on peut la coder directement en Java avec EMF? Actuellement, le seul intérêt est de rendre la transformation pérenne. En effet, celle-ci sera exprimée dans un langage standard (QVT). Il n est pas encore réaliste de dire que l intérêt sera de rendre la transformation productive (il n existe pas encore de moteur de transformation QVT). 2 Gestion de Projet barème indicatif : 15 points Métamodélisation On considère le méta-modèle de gestion de projet suivant : Projet 0..1 0..1 intervenant * * suivante * tache Tache description : string * tache Intervenant Il définit qu un projet, identifié par un nom, contient plusieurs intervenants et plusieurs tâches. Une tâche est définie par un nom et une description et peut désigner plusieurs tâches suivantes. Un intervenant est défini par un nom et est assigné à une ou plusieurs tâches. Soit le projet suivant (3 tâches et 2 intervenants): Rédaction du sujet d examen de CAR de l année 2005/2006 Tâche1 : Rédaction v0 Rédiger première version du sujet Tâche2 : Relecture 1 Relire la première version du sujet Xavier Tâche3 : Rédaction 2 Ecrire la deuxième version du sujet Marie-Pierre
Q1 : Nous voulons représenter ce projet sous forme d un modèle conforme au méta-modèle de gestion de projet. Décrivez, les instances du métamodèle de gestion de projet composant ce modèle? Ce modèle est composé de : +Une instance de la métaclasse projet. Celle-ci a pour nom : «Rédaction du sujet d examen de CAR de l année 2005/2006». Cette instance contient toutes les instances des taches et des intervenants décrites ci-après. +Deux instances de la métaclasse intervenant nommée respectivement Xavier et Marie-Pierre +Trois instance de la métaclasse tache nommées respectivement «Tâche1 : Rédaction v0», «Tâche2 : Relecture 1» et «Tâche3 : Rédaction 2». La tache 1 a pour suivant la tache 2 qui a pour suivant la tache 3. L intervenant Xavier est lié à la tache 1 et à la tache 2. L intervenant Marie-Pierre est lié à la tache 2 et à la tache 3. On souhaite maintenant distinguer l intervenant humain de l intervenant machine. En effet, certaines tâches d un projet peuvent être entièrement réalisées par un intervenant machine alors que d autres nécessitent une intervention humaine. Q2 : Modifier le méta-modèle pour introduire cette notion. Intervenant Humain Machine On souhaite maintenant préciser que les tâches qui sont associées aux intervenants machines sont des programmes spécifiés en UML. Plus précisément, ces programmes sont spécifiés par un package UML qui contient tous les éléments UML nécessaires (classes, cas d utilisation, instances, ). Q3 : Modifier le méta-modèle pour préciser le fait qu une tâche, associée à un intervenant qui est une machine, est spécifiée à l aide d un package UML.
Tache description : string UML Package TacheMachine Class Operation Avec cette solution, il faudrait ajouter une contrainte permettant de préciser que les taches associées aux intervenants machine sont obligatoirement des TacheMachine! Transformation Afin de suivre automatiquement le déroulement d un projet, il a été décidé de transformer un projet en une classe UML. Le nom de cette classe correspond au nom du projet Cette classe possède toujours un unique attribut, nommé état, qui permet de connaître l état actuel du projet. Cette classe possède toujours une opération permettant d obtenir la valeur de l attribut «état». Cette classe possède deux opérations par tâche du projet. Une opération pour informer du démarrage de la tâche et une pour informer la fin de la tache. Le code de ces opérations est vraiment sommaire. Il permet simplement d affecter à l attribut «état» une valeur permettant de connaître la dernière action réalisée (démarrage ou fin de la tâche numéro x). Pour le projet donné en exemple, la classe obtenue serait la suivante : Rédaction du sujet d'examen de CAR de l'année 2005/2006 +etat : string +obteniretatcourant():string +démarrertache1() +démarrertache2() +démarrertache3() +finirtache1() +finirtache2() +finirtache3()
Le code de l opération démarrertâche1() serait par exemple : etat = «Tâche 1 démarrée». Ainsi, grâce à cette classe, il serait possible de suivre automatiquement le déroulement du projet «Rédaction du sujet d examen de CAR de l année 2005/2006»! Q4 : Définissez les règles de cette transformation. L objet de la question est de faire apparaître les règles de la transformation (entre les métaclasses des métamodèles). Il fallait aussi montrer que cette transformation n est pas complètement possible car UML ne peut pas contenir du code! Règles : R1 : Pour une instance de la métaclasse Projet construire une instance de la métaclasse UML::Class. Le nom de la classe correspond au nom du projet. R2 : Pour une classe UML construite ajouter un attribut nommé état dont le type est string R3 : Pour une instance de la métaclasse Tache construire deux instances de la métaclasse UML::Operation et faire en sorte que ces opérations appartiennent à la classe construite à partir du projet contenant la tache (cf. R1). Le nom des opérations correspond au nom de la tache précédé respectivement de «demarrer» et «finir». Note, il n est pas possible d ajouter le corps des opérations (méthode) dans le modèle UML à moins d utiliser un profil tel que le profil UML pour Java. Néanmoins, cela violerait l objectif de la transformation! Q5 : Expliquez comment vous pouvez utiliser EMF pour coder cette transformation. Donnez brièvement les classes et les méthodes qu il faudrait développer. L objectif de cette question était de mesurer la compréhension du framework EMF. Pour coder cette transformation, il faut : Générer les API du métamodèle de gestion de projet Utiliser les API du métamodèle UML () Construire un projet Java qui utilise les deux API précédentes. Ce projet contiendra une classe «TranformProjet2UML». Cette classe contiendra une opération par règles. La signature de l opération contiendra deux paramètres : Le paramètre d entrée typé selon l API générée à partir du métamodèle de gestion de projet Le paramètre de sortie typé selon l API UML2 Exemple, pour la R1, public UML2.Class applyr1(projet pr) {} Cette classe contiendra une opération permettant de démarrer la transformation. Cette opération permettra de lire un fichier XMI contenant le modèle d entrée et sauvegardera le modèle de sortie dans un autre fichier XMI. Dans le cas d une tâche exécutée par une machine, le code de l opération associée au démarrage de la tâche devrait contenir, en plus de l affectation de l attribut «état», un appel vers le programme correspondant à la tâche. Ainsi, ce programme serait automatiquement exécuté.
Q6 : Comment modifier les métamodèles et la transformation pour faire en sorte que cela soit possible? Cette question est très délicate. Pour pouvoir songer à faire cela, il faut pouvoir identifier la classe UML contenant l opération «main» du programme. Il faut donc que la TacheMachine référence toutes ces informations. UML spécification Package TacheMachine mainclass Class mainoperation Operation De plus, il reste toujours la limitation de UML qui ne peut pas contenir de ligne de code. Synthèse : Q7 : Cette utilisation des techniques de métamodélisation est-elle cohérente avec l approche MDA? Ce que nous venons de faire ne suit pas les principes de l approche MDA. En effet, il n existe pas de CIM, de PIM et de PSM. Pour autant, nous avons utiliser toutes les technologies supports au MDA (modélisation et transformation de modèles). Q8 : Est-il possible de parvenir au même résultat (modélisation de projet, génération de code, ) en utilisant uniquement le mécanisme de profil UML? Pour pouvoir répondre par l affirmative à cette question, il fallait présenter un profil UML permettant de modéliser des projets. Cela est faisable car cela ne nécessite que peu de stéréotypes et de tagged value. Le standard SPEM définit un tel profil Pour pouvoir répondre par la négative à cette question, il fallait prouver qu il n existe pas de profil permettant de modéliser des projets. Chose fausse car cela a déjà été dans un standard OMG, le standard SPEM.