Professional Documents
Culture Documents
Exprimenter le langage ATL ddi la transformation de modle pour limplmentation dune mthode de transformation dun diagramme UML en un schma CWM.
Etudiant :
Encadrants :
Antoine Wiedemann
Etudiant en Master 2me anne mention Informatique, Mathmatique et leurs Applications, option recherche Image et Calculs lUniversit de La Rochelle.
1 2
4 5
Introduction ...................................................................................................................... 1 Gnrer un modle relationnel normalis partir de diagrammes de classes UML [1] ................................................................. 2 2.1 Introduction dune nouvelle forme normale : la normalisation_L ............................. 2 2.1.1 Normalisation en conception de base de donnes []. ......................................... 2 2.1.2 Les premires rgles de normalisation ............................................................... 2 2.1.3 Normalisation allge (Normalisation_L), prsente dans larticle de M.C. Mafaye, J.Y. Lafaye et G. Louis [1]................................................................................... 3 Quelques dfinitions......................................................................................................... 4 3.1 Modle........................................................................................................................ 4 3.2 UML 2.0 ..................................................................................................................... 4 3.3 OCL 2.0...................................................................................................................... 6 3.4 CWM .......................................................................................................................... 6 3.5 Metamodle................................................................................................................ 9 3.6 MOF ......................................................................................................................... 10 La gnration dun modle relationnel vue comme une transformation de modle. ....................................................................... 11 Lingnierie dirige par les modles, ou Model-driven Architecture (MDA) .......... 12 5.1 MDA......................................................................................................................... 13 5.2 QVT.......................................................................................................................... 16 ATL.................................................................................................................................. 16 6.1 Lopration lmentaire de transformation : la rgle ATL ...................................... 17 6.2 Utilisation dATL..................................................................................................... 19 6.2.1 Spcification des mtamodles ........................................................................ 19 6.2.2 Spcification des modles ................................................................................ 22 6.2.3 Le module ATL................................................................................................ 24 6.3 Des exemples de cas dutilisation dATL ................................................................ 25 Implmentation............................................................................................................... 26 7.1 Un exemple de modle de domaine ......................................................................... 26 7.2 Accoucher les mtamodles ..................................................................................... 27 7.2.1 Spcifier le mtamodle cible : le mtamodle de CWM. ............................... 27 7.2.2 Spcifier le mtamodle source, le mtamodle de domaine ou encore le mtaMDC. ........................................................................................................................ 28 7.2.3 Rsultat : le mtaMDC..................................................................................... 29 7.2.4 Construire un exemple de modle conforme.................................................... 31 7.3 Extraire de lalgorithme les rgles de transformation .............................................. 34 7.3.1 Algorithme gnral de traduction : Objet vers relationnel normalis_L.......... 34 7.3.2 Identifier les lments et leurs antcdents ...................................................... 36 7.3.3 Dterminer les oprations de traduction........................................................... 37 7.3.4 Exprimer les oprations dans le langage ATL ................................................. 37 7.3.5 Exemple 1, Classe_Table ................................................................................. 37 7.3.6 Exemple 2, AssoBinaire_Cas2......................................................................... 38 7.4 Contrler, complter, corriger.................................................................................. 43 Conclusions lissu de lexprimentation.................................................................... 44 8.1 Les avantage dATL................................................................................................. 44
8.2 Inconvnients dATL ............................................................................................... 45 8.3 Une ou plusieurs transformations ?.......................................................................... 45 8.3.1 Chanage de transformations............................................................................ 45 8.3.2 Cration de plusieurs mtamodles intermdiaires .......................................... 45 9 Travaux futurs................................................................................................................ 46 9.1 Dlimiter lintervention dATL dans le processus................................................... 46 9.2 Terminer lvolution du mtaMDC.......................................................................... 46 9.3 Terminer lextraction de rgles de lalgorithme....................................................... 46 9.4 Explorer les possibilits dinterfaage ..................................................................... 47 10 Conclusion....................................................................................................................... 47 11 Annexes ........................................................................................................................... 48 11.1 Le code complet de la transformation (module MDC2MLRnL.atl) ........................ 48 11.2 Le module MDC2Chemins.atl ................................................................................. 50 11.3 Description des mtaclasses du mtaMDC. ............................................................. 51 11.3.1 Classe_persistante ............................................................................................ 51 11.3.2 Generalisation_persistante ............................................................................... 52 11.3.3 Association_persistante.................................................................................... 53 11.3.4 Attribut ............................................................................................................. 53 11.3.5 ID...................................................................................................................... 54 11.3.6 ID_exportable................................................................................................... 55 11.3.7 Symb_ID_exportable ....................................................................................... 55 11.3.8 Composant_identifiant ..................................................................................... 56 11.3.9 Espace_de_recherche ....................................................................................... 56 11.3.10 Arc_de_composition .................................................................................... 57 12 Ressources Internet et bibliographiques ...................................................................... 59
1 Introduction
Le problme de la gnration automatique de base de donnes partir dun diagramme de classe a dj t largement tudi et enseign sur le plan thorique. Souvent, on se contente dtudier les diffrents cas de figure qui peuvent se prsenter en terme de multiplicits des associations entre classes, et de dterminer dans chaque cas le schma relationnel adapt pour implanter ces associations. En pratique pourtant, le procd se rvle bien plus complexe ds lors que lon aborde des cas concrets et que lon se donne des exigences sur la qualit de la base de donnes rsultante. Que ce soit sur le plan du processus de normalisation, de la conservation des connaissances mtier injectes par le concepteur tout au long du processus de gnration, et/ou plus concrtement de lergonomie des outils disponibles sur le march, beaucoup reste faire. Ainsi, pour aller plus loin dans la prcision et la correction sans perdre de vue la simplicit dutilisation, M.C. Lafaye, J.Y. Lafaye et G. Louis (ci-aprs nomms les auteurs) proposent dans leur article Gnrer un modle relationnel normalis partir de diagrammes de classes UML [1] un processus complet qui en plus dadresser les problmes identifis plus haut, tire partie dune nouvelle approche pleine de promesse dans lunivers du gnie logiciel : lingnierie dirige par les modles (MDA en anglais). Pour valider les avantages de ce processus et de la mthode quil incarne, il a t choisi de tenter une partie de son implmentation dans le langage ATL spcialement conu pour la transformation de modles. Ce langage est dvelopp dans le cadre du projet ATLAS [2] men luniversit de Nantes par une quipe de chercheurs de lINRIA. Le travail prsent ici est une exprimentation et une valuation de lutilisation dATL pour raliser cette implmentation.
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
Deuxime forme normale Une relation est en deuxime forme normale si et seulement si elle est en premire forme normale, quelle na quune seule cl, et que tout attribut n'appartenant pas la cl ne dpend pas d'une partie de cette cl. Troisime forme normale Une relation est en troisime forme normale si et seulement si elle est en deuxime forme normale et si chaque attribut non cl est en dpendance non transitive avec la cl primaire. Forme normale de Boyce-Codd (BCNF) Une relation est en forme normale de Boyce-Codd si et seulement si seuls les dterminants sont des cls candidates. Quatrime et cinquime formes normales. Pour traiter les cas plus complexes ou apparaissent des association n-m entre les relations du schma relationnel, la thorie de la normalisation introduit, au-del des simples dpendances fonctionnelles qui sont utiliss dans les noncs de ces premires formes normales, les notions de dpendances multi-values et de composantes de jointure (ou dpendance de jointure). Ltude de ces notions sort du cadre du prsent travail. Elles sont simplement mentionnes ici puisquelles font partie de larsenal des outils qui ont ts utiliss par les auteurs du processus pour garantir sa qualit. Lapplication de ces principes permet une amlioration considrable de la qualit de la base obtenue partir du schma ainsi normalis. Elle facilite le respect des contraintes dintgrit imposes lors de la conception en vitant la redondance des donnes et donc en rendant les mises jour plus aises. 2.1.3 Normalisation allge (Normalisation_L), prsente dans larticle de M.C. Mafaye, J.Y. Lafaye et G. Louis [1]. Comme nous lavons vu dans la section prcdente, la thorie de la normalisation gnralement admise aujourdhui, et qui par son application en conception de base de donnes est un gage de qualit, nonce un certain nombre de principes, qui conduisent la modification de la structure dun schma relationnel initial. Cependant, lapplication stricte de la normalisation conduit dans certains cas la cration de tables supplmentaires, qui ne font que satisfaire au principe de conservation des dpendances. Cest pourquoi dans leur article [1], les auteurs sautorisent quelques entorses ces rgles de normalisation, pour pouvoir les appliquer de faon plus raliste sans introduire forcment de redondance. Cette normalisation allge , ou normalisation_L propose par rapport la normalisation stricte les nuances suivantes : Les attributs valeur NULL sont admis Les rgles des premires formes normales, jusqu la BCNF, ne sont appliques non pas toutes les dpendances fonctionnelles mais seulement celles permettant de collecter lensemble des contraintes dunicit et de rfrence sur les tables relationnelles.
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
3 Quelques dfinitions
Il convient, avant daller plus loin, de dfinir ce que lon entend ici par modle, et galement de mtamodle ainsi que larticulation entre ces concepts.
3.1 Modle
Un modle pourrait tre dfini comme une reprsentation abstraite de quelque chose. En pratique, les modles sont prsents partout autour de nous dans la vie courante, et les exemples sont nombreux. Un plan de votre maison par exemple est le modle partir duquel on a construit la maison que vous habitez. Ce plan regroupe des caractristiques de dimension que votre maison respecte (en principe). Dans le contexte de la modlisation, on dit alors que votre maison est reprsente par son modle (son plan). Un modle peut galement reprsenter des choses plus abstraites, comme par exemple une squence doprations qui senchanent dans le temps, ou bien alors lorganisation et les interactions qui ont lieu entre les employs dune entreprise. Il est important de noter que plusieurs entits distinctes peuvent tres reprsentes par un unique modle donn. Par exemple, dans un immeuble dhabitation, tous les appartements sont souvent construits partir dun nombre limit de modles diffrents (un modle de T3, un modle de T2, etc.). Intuitivement, les atouts de lutilisation dun modle sont nombreux, surtout comme outil de communication. Reprenons lexemple de la maison. Le plan dune maison est le fruit dune concertation entre un architecte et le futur propritaire, et permet de visualiser lallure gnrale du btiment. Il permet galement de faire des calculs de dimension pour les matriaux utiliss lors de la construction, mais aussi de prsenter le projet la mairie pour obtenir un permis de construire. Le plan est naturellement relu par lentrepreneur et utilis comme guide de montage pendant la construction. Enfin, lors dun ventuel recours du propritaire qui a not une non conformit de louvrage termin avec le plan initial, cest le document qui fait foi et qui est prsent une instance judiciaire. Cette notion peut sappliquer de nombreux domaines, et en particulier celui qui nous intresse, linformatique. Dans ce cas, le modle reste un outil de communication, mais les acteurs ne sont plus systmatiquement humains. Lexemple le plus connu est la programmation, o un oprateur humain (le programmeur) crit un modle de comportement ou de calcul (un programme), et le transmet travers un processus de compilation ou dinterprtation au systme informatique qui produit un comportement ou des calculs dcrits dans le modle initial. De la mme faon que le plan de larchitecte est crit avec une syntaxe, une nomenclature et des symboles picturaux prcis, de nombreux langages de programmation diffrents coexistent et peuvent chacun exprimer certains types de modles de cacluls. On voit donc que mme si le concept de modle est trs rpandu, les langages pour les exprimer sont trs variables.
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
smantique et pratique de grandes qualits dutilisation, et dans le cas prsent de la conception de base de donnes, UML est depuis longtemps utilis pour spcifier un haut niveau dabstraction la structure et larticulation des donnes, sous forme respectivement de classes et dassociations. Par ailleurs, un avantage de cette technologie, la fois cause et consquence de sa grande popularit, est la profusion sur le march doutils plus ou moins ergonomiques ddis la cration et la manipulation de diagrammes UML. Cest pourquoi il a t choisi, dans limplmentation de lalgorithme prsent ici, dutiliser un diagramme de classe UML comme moyen de dialogue avec le concepteur, pour capter ses exigences et ses connaissances mtier. Le cadre du problme tant bien dlimit, nous nutiliserons pas toute la complexit du langage UML. Nous attendons du concepteur quil exprime des informations de type structurelles et pas dynamiques. Ainsi, parmi la multitude de types de diagrammes prdfinis par la spcification UML [6], nous nutiliserons que le format diagramme de classes. Nous pourrons mme nous satisfaire dun sous-ensemble des classes prdfinies dans le package Kernel de la spcification de la superstructure dUML 2.0. Ces classes sont indiques dans le diagramme ci-dessous.
<<metaclass>> DirectedRelationship
<<metaclass>> Relationship
<<metaclass>> Element
* constrainedElement
<<metaclass>> Namespace
<<metaclass>> PackageableElement
MultiplicityElement <<metaclass>> type Type 0..1 <<metaclass>> TypedElement isOrdered : boolean isUnique : boolean
<<metaclass>> StructuralFeature <<metaclass>> Class 0..1 class * operand <<metaclass>> Association 0..1 association <<metaclass>> AssociationClass 2..* memberEnd 0..1 expression <<metaclass>> Expression symbol : string
<<metaclass>> Constraint
Figure 1 - Extrait du mtamodle UML 2.0 Cet ensemble de classes prexiste dans la spcification, chacune avec sa smantique et ses caractristiques, en terme dattributs, de multiplicits, mais aussi de lien les unes avec les autres. Elles ne sont pourtant que rarement faites pour tre utilises telles quelles, mais plutt pour constituer les lments de base la construction dautres classes, plus finement dfinies au plus proche des besoins de lutilisateur (leur majorit est en consquence dfinie comme abstraite, do leur nom de mtaclasses ). Nous avons ainsi cr un nouvel ensemble de classes spcifiques au problme pos, soit en hritant des classes de base mentionnes dans le 5
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
diagramme prcdent, soit en en dfinissant de nouvelle. Cet ensemble nous permet dans lalgorithme de proposer au concepteur le vocabulaire ncessaire et suffisant pour exprimer ses besoins et ses souhaits, en terme de structure de donnes, darticulation des donnes et didentification. Ces mtaclasses sont prsentes plus loin.
3.4 CWM
CWM [7], pour Common Warehouse Model, est lui aussi un langage, comme UML dont il reprend la grammaire et spcialise la smantique. Ce langage est galement une spcification adopte par lOMG, et tente de rpondre aux problmes poss par les simples constatations suivantes. Les statistiques montrent quen moyenne, la quantit dinformation stocke par une organisation donne double tous les cinq ans. La plupart du temps, la gestion de ces donnes est rendue extrmement difficile par leur surabondance, leur redondance et leur htrognit. Leur stockage dans des entrepts de donnes ( data warehouse en anglais) structurs est indispensable pour les rendre exploitables. Or un des aspects essentiels du stockage de donnes dans des entrepts est la description de ces mmes entrepts, pour permettre entre autre aux applications tierce den connatre la structure et ainsi de pouvoir y puiser linformation. Cette description prend la forme de mtadonnes, c'est--dire dans le cas gnral de donnes qui dcrivent les donnes. Pour compliquer encore la situation, on sait quen pratique de nombreux systmes de stockage de donnes diffrents existent et sont utiliss. Ainsi ds lors quun besoin dchange de donnes va apparatre entre deux systmes,
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
le premier ne pourra se contenter dexploiter sa propre description mais aura aussi besoin de celle de lautre. On utilisera alors lchange des mtadonnes dcrivant les deux systmes (interchange of warehouse metadata). Cest l lintrt du langage CWM. Il propose un standard pour lchange de ces mtadonnes, mais aussi pour exprimer leur transformation, leur analyse, leur cration et leur gestion. En pratique, CWM est en fait constitu dune partie du langage UML 1.4 (le package Object Model) dont tous les lments qui ne sont pas pertinents dans les scnarii de stockage de donnes ont ts supprims. Comme cela est le cas pour UML, nous ne faisons quant nous quune utilisation partielle de CWM, puisque nous nous contentons de la partie relationnelle et statique du langage. Notre but est en effet daboutir un modle conforme CWM ddie la gnration de code SQL pour la cration des tables, attributs, cl et rfrences dcrites dans le modle. Les classes CWM que nous utiliserons, directement ou par hritage sont les suivantes et sont donc un extrait de la spcification de lOMG.
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
namespace 0..1 1..* feature StructuralFeature 1..*feature Namespace keyRelationship * keyRelationship 0..1 owner 1 type Classifier Package * KeyRelationship * /ownedElement
* typedFeature
Attribute
DataType
Ressource::Relational 1..* /feature ColumnSet 1 ForeignKey * /ownedElement * /uniqueKey UniqueConstraint 1..* /ownedElement
Column * col
NamedColumnS et
PrimaryKey /ownedElement 1
Figure 2 - Extrait du mtamodle de CWM Notez quici, contrairement au cas prcdent dUML, nous ne nous sommes pas permis de raffiner les classes prdfinies. Cela peut paratre trivial, mais tout lintrt du standard CWM est quil reste standard, et quun diagramme exprim dans ce langage puisse tre inject dans un outil de gnration de code compatible. Une quelconque modification des classes de base de CWM compromettrait voire anantirait cette ncessaire compatibilit. Cependant, des pistes de recherche pourraient nous amener introduire comme pour le modle de domaine initial des classes supplmentaires, qui hriteraient ou non des classes prdfinies par CWM, et qui nous serviraient, lors de certaines tapes du processus et avant la production dun modle final exclusivement conforme CWM, exprimer des rsultats
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
intermdiaires o des informations ncessaires aux traitements automatiques ultrieurs sont encore prsents sous forme dautre classes que celles prexistantes dans la spcification.
3.5 Metamodle
Un mtamodle est simplement une description dun langage de modlisation. Il apporte les rgles syntaxiques qui permettent de lutiliser (dcrire un modle dans ce langage) et le sens de chaque item prsent dans ce langage. Par exemple, la spcification du langage Java, c'est--dire sa grammaire et sa smantique, constitue le mtamodle du langage Java. Dans le contexte de la modlisation on dit quun programme Java sans erreur syntaxique est conforme au mtamodle du langage Java. Attention, cette conformit ne garantit pas que le programme ne contient pas derreur dexcution, ou mme quen labsence derreur dexcution, les rsultats obtenus lissu de son excution seront ceux attendus par le programmeur.
Figure 3 - Exemple de trois classes dun modle dont deux sont conformes leur mtaclasse dans le mtamodle Remarquons quun mtamodle est donc par essence un modle puisquil correspond la dfinition de reprsentation abstraite donne plus haut. Par voie de consquence, pour peu que ce mtamodle soit exprim dans un langage prdfini, il possde lui-mme un mtamtamodle qui dcrit prcisment ce dernier nouveau langage. Nous voyons alors se profiler, pour un modle donn, une hirarchie infinie de mtamodles se dcrivant les uns les autres. En pratique, cette hirarchie nest pas infinie. Elle est dailleurs souvent trs courte, puisque nous disposons en ralit dun unique mtamodle que nous partageons tous et qui grce son extrme richesse nous permet de dcrire tous les autres. Il sagit simplement de la langue crite ou orale. En effet, lintrt des langues est quelles sauto dcrivent, c'est--dire que lon peut les utiliser pour spcifier la faon de les utiliser. Prenez un dictionnaire de franais, les dfinitions de chaque mot sont rdiges en franais. Prenez une grammaire franaise, nouveau, les rgles de grammaire sont exprimes par des phrases qui utilisent et respectent ces mmes rgles. Dans le cas du langage de programmation Java par exemple, le mtamodle (disons pour simplifier sa documentation), est simplement exprime en langue crite, que ce soit langlais, le franais ou le danois, et il nest pas ncessaire dajouter une nouvelle description cette documentation.
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
3.6 MOF
Pour permettre au langage de dcrire toute chose, il faut lenrichir en permanence avec une trs grande varit de syntaxes, toutes sortes de cas particuliers, une trs grande souplesse et une quantit norme de vocabulaire qui le rend difficile traiter automatiquement. Pour palier ces problmes et faciliter lchange de mtadonnes, lOMG a spcifi un langage objet graphique restreint spcialis dans la description de mtamodles. Il sagit du langage MOF [9] (pour Meta Object Facility). La valeur ajoute de ce nouveau langage est quil possde un nombre limit de mots , ici des classes, et une syntaxe prcise et invariante. Par ailleurs, et cest essentiel, comme les langues il sauto dcrit. Ainsi, dans un contexte de modlisation, on sait avoir toujours notre disposition un langage gnralement admis et la smantique bien dfinie pour coiffer la hirarchie des modles/mtamodles. LOMG prcise alors quen pratique, la trs grande majorit des cas de modlisation pourra se contenter de lutilisation de 4 niveaux au maximum comme le montre le schma ci-dessous.
Figure 4 -Larchitecture 4-niveaux dfinie par lOMG Ces niveaux prennent les nom M0 jusqu M3, et reprsentent chacun un tage de la hirarchie des modles/mtamodles dont nous parlions prcdemment. Dans lexemple prcis de la figure ci-dessus, on retrouve au sommet de la hirarchie (niveau M3) le langage MOF qui spcifie et dcrit le langage du mtamodle dUML (niveau M2), lui-mme dfinissant les lments dun modle UML (niveau M1) dont une des classe donne lexcution une instance (niveau M0).
10
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
Les trois derniers langages que nous avons vu, (UML, CWM et MOF) sont donc tous trois issus des rflexions de lOMG sur les notions de modlisation et de mtamodlisation. Ils ont ts crits et rcrits pour pouser leur vision hirarchique expose prcdemment, et font tous trois partie de leur architecture de mtadonnes (OMG Metadata Architecture).
Figure 5 -Larchitecture de mtadonnes de lOMG Paraphraser ce tableau constitue un bon rsum des concepts essentiels que nous venons dexposer. Les langages de modlisation UML et CWM du niveau M1 servent modliser des systmes ou des entrepts de donnes au niveau M0. Ces langages sont dcrits au niveau M2 par leurs mtamodles respectifs, en utilisant un langage spcifique, le MOF, lui-mme dfini par son propre mtamodle au niveau M3. Nous pouvons maintenant avancer vers la manipulation de ces modles et en particulier leur transformation.
11
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
diagramme exprim en UML en un schma exprim en CWM. Toute ces tapes et en particulier cette dernire, constituent des transformations de modle, bien que parfois ces transformations se rduisent des calculs lmentaires.
Modle UML
Transformation
Modle CWM
Figure 6 - La transformation d'un modle Nous verrons comment lingnierie dirige par les modles et le standard MDA sont des rponses concrtes qui permettent prcisment deffectuer ce passage. Nous prsenterons galement limplmentation de ce cette approche, o nous avons utilis le langage ATL.
12
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
5.1 MDA
Figure 7 - Logo MDA En 2001, lOMG a prsent le fruit de ses rflexions dans un document Overview and guide to OMG's architecture [8], o le groupe introduit son architecture dirige par les modles (Model Driven Architecture en anglais). Il y est montr comment utiliser intensivement les modles pour le dveloppement logiciel, et un ventail dexemples dimplmentation y est dcrit. LOMG dfinit dans ce guide MDA plusieurs niveaux dabstraction et dindpendance vis--vis dune implmentation particulire dans un environnement logiciel et matriel particulier. On retrouve ainsi essentiellement, du plus indpendant au plus spcifique, les niveaux Computation independant , Platform independant et Platform specific . Il est propos dexprimer (de modliser) successivement un problme dans ces trois niveaux, dabord au plus gnral pour capter le mieux possible les besoins souvent exprims par des non-spcialistes, jusquau plus fin permettant ainsi dans lidal la gnration directe de code fonctionnel pour une configuration logicielle et matrielle donne. Les deux niveaux les plus utiliss sont les deux derniers, Platform independant et Platform specific . Pour permettre le passage ou la traduction de lun vers lautre, lapproche MDA sous-entend tout dabord de modliser le problme ou le systme considr au niveau le plus indpendant, puis dutiliser diffrents types de transformation de modle pour obtenir le modle spcifique la plateforme cible.
13
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
Figure 8 - Vue gnrale dune transformation dun PIM en PSM Ces modles sont appels PIM (pour Platform Independant Model et PSM (pour Platform Specific Model ), et sont exprims dans nimporte quel langage (par exemple UML que nous avons dj voqu). Le rsultat de la transformation du PIM laide dune technique particulire sera non seulement le PSM mais galement lenregistrement de la transformation, cest dire la correspondance entre les lments gnrs en sortie et leurs parents , ou origines dans le PIM ainsi que les parties de la transformation (des rgles ou des liens) qui ont conduit la cration des lments en sortie. LOMG propose une classification des transformations en 5 grands types :
Transformations utilisant le marquage. Ici, larchitecte du systme marque les lments du PIM en puisant dans un ensemble de marqueurs prdfinis pour une plateforme cible donne. Les rles des lments source ainsi indiqus, on gnre par lintermdiaire des liens prvus dans le mapping , les lments du PSM qui correspondent.
14
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
Transformation utilisant la fusion de modles. Cette deuxime faon de procder est propose dans le guide de lOMG comme trs gnrique, et il est indiqu sans plus de prcisions que diverses dclinaisons MDA en drivent.
Transformations utilisant les mtamodles Dans ce cas, cest en spcifiant des rgles de transformation directement entre les lments des mtamodles du PIM et du PSM que lon cre la transformation. Cest cette technique qui est utilise par loutil ATL sur lequel nous reviendrons en dtail.
Transformations utilisant les types Cette fois-ci, on utilise plutt des types que des lments de mtamodles pour identifier les correspondances. Ces types peuvent reprsenter des fonctionnalits ou des caractristiques aux niveaux indpendants de la plateforme ou spcifiques un environnement.
15
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
Transformation utilisant les types et les patrons. Les liens sont spcifis entres des types et des patrons dfinis pour le PIM et le PSM. Cette variante reprend simultanment les principes des deux prcdentes.
Pour rsumer, quel que soit le type de transformation utilis, le PSM sert finalement de base la gnration de code adapt la plateforme cible. Dans notre cas, le Platform specific model sera un modle conforme CWM [7], et constituera un pont vers la gnration de code SQL.
5.2 QVT
Dans le cadre de lapproche MDA, lOMG introduit le langage QVT [9] (pour Querry, View, Transformation). QVT est une spcification couple celle du MOF, et comme son nom lindique nest plus ddie la spcification de modles, mais leur manipulation. Ce langage possde une nature hybride dclarative/imprative et implmente la transformation de modle de diffrentes manires. Cette spcification est encore en travaux aujourdhui, et les fonctionnalits en matire de visualisation de modles sont peu avances. Nous la citons ici car elle possde des liens historiques importants avec le langage ATL que nous verrons plus loin (section 6).
MDA, associ ses outils tels que MOF/QVT et UML/OCL, est donc un nouveau paradigme qui offre des possibilits nouvelles en matire dingnierie logicielle. Dans le cadre des bases de donnes, ces techniques pourraient peut-tre permettre de faciliter la modlisation des systmes, par le dveloppement doutils de conception plus ergonomiques et rigoureux. Le travail prsent explore une partie de ces possibilits.
6 ATL
Suite la publication en 2001 du standard MDA par lOMG, de nombreux diteurs de logiciels et laboratoires de recherches ont mit sur le march des outils se rclamant de cette architecture. Parmi ceux-ci le laboratoire de lINRIA de Nantes a dvelopp le langage ATL
16
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
(pour ATLAS Transformation Language) de transformation de modles dans le cadre de son projet ATLAS [2]. Ce langage est officiellement parti dune tentative dimplmentation du QVT Request For Proposal de lOMG, en reprenant en particulier les diverses faons dclaratives et impratives de spcifier une transformation. Il est dvelopp sur la plateforme Eclipse et plus particulirement sur sa branche EMF (pour Eclipse Modeling Framework). Il est accompagn de nombreux outils pour faciliter son utilisation. La mise en forme des mots cls du langage est assur dans lditeur de code ATL, un debugger est fourni, et une notation textuelle simple appele km3 (pour Kernel MetaModel) permet la spcification de mtamodles. Pour raliser notre objectif initial dautomatiser le calcul dun schma relationnel CWM partir diagramme de classes UML, nous nutilisons que les fonctionnalits de transformation dATL, qui sont dailleurs les plus dveloppes. Cependant, ce langage permet galement lcriture de simples requtes sur des modles, comme le prvoit le volet Query de QVT. Dailleurs, il est vident que faire une transformation de modle serait difficile sans la capacit de lire (et donc deffectuer des requtes sur) le modle source. Ainsi pour les transformations comme pour les seules lectures de modles, ATL utilise intensivement le mode dcriture et la smantique des mots cls de la norme OCL (section 3.3), aujourdhui dans sa version 2.0.
17
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
attributeA et attributeB sont des attributs de la mtaclasse OutputElement Leur valeur est initialise laide des valeurs des attributs i.attributeB, i.attributeC et i.attributeD de la mtaclasse InputElement.
Voici comment on pourrait formuler la fonction de cette rgle en langage naturel. La rgle ForExample, pour chaque lment i de type InputElement quelle identifie dans le modle source, cre dans un modle cible un lment o de type OutputElement, et initialise les valeurs des attributs attributeA et attributeB de o avec les valeurs des attributs attributeB, attributeC et attributeD de i. Dans cet exemple simple, on voit lutilisation du . , issu de la spcification OCL et reprit par ATL, qui permet dans les expressions i.attributeB, i.attributeC et i.attributeD de naviguer dans le modle source i. En plus des rgles, le langage ATL dispose du mot cl helper , qui permet de dfinir des macros lextrieur des rgles pour factoriser des parties de code souvent utilises. Des exemples de ces helpers sont utiliss et expliqus par la suite. Un programme ATL, appel un module, est essentiellement un groupement de rgles et de helpers. En dehors du module lui-mme, les lments fixes de la traduction sont donc les deux mtamodles source et cible. Le modle source peut quant lui tre vu comme le paramtre de la transformation, et le modle cible son rsultat. Cest travers la configuration de lenvironnement dexcution du programme que lon spcifie concrtement dans quels fichiers le moteur de traduction doit chercher les mtamodles, le modle source, le fichier programme, et dans quel fichier on attend quil crive le modle rsultat. Nous lavons vu, les modles source et cible de la transformation sont conformes leurs mtamodles respectifs fournis par lutilisateur. Notons quun module ATL peut lui aussi se reprsenter sous forme dun modle, puisque comme nimporte quel langage ATL possde son propre mtamodle. Notons enfin quATL utilise nativement comme mta-mtamodle une version peine diffrente du MOF, le mta-mtamodle Ecore dfini par la branche EMF de la plateforme Eclipse. Le schma suivant illustre ces principes travers lexemple dune transformation ATL nomme Author2Person, destine transformer un modle nomm Author en un modle nomm Person. En pratique, les modles et leurs mtamodles cibles et source prennent dans lenvironnement de dveloppement Eclipse la forme de fichiers texte au format xmi avec une extension .ecore.
18
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
Les mtamodles UML 2.0 et CWM sont crits dans le langage km3 dans deux fichiers textes distincts : MDC.km3 (pour Modle De Domaine) dans lequel nous avons spcifi deux package, la fois la partie du mtamodle dUML 2.0 qui nous intressait, et un package o nous avons regroup les mtaclasse spcifique notre domaine. MLRnL.km3 (pour Modle Logique Relationnel normalisL) dans lequel nous avons extrait les packages et les mtaclasses qui nous intressaient de la spcification CWM de lOMG.
19
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
Figure 11 -Extrait dun fichier de dfinition du mtamodle UML 2.0 au format km3 A partir de ces deux fichiers textes distincts, on obtient laide dun injecteur accessible travers linterface de la plateforme eclipse les deux fichiers xmi correspondants.
20
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
Dans ces fichiers xmi, on trouve les classes dfinies initialement en km3 sous forme textuelle traduite en terme de mtaclasses (puisquil sagit dun mtamodle) en xmi , donc galement sous forme textuelle, et conformes au mta-mtamodle Ecore (trs proche du MOF). Voici les mmes mtaclasses que dans lexemple prcdent exprimes cette fois-ci au format xmi.
<?xml version="1.0" encoding="ISO-8859-1"?> <xmi:XMI 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"> <ecore:EPackage name="UML20"> <eClassifiers xsi:type="ecore:EClass" name="Element"/> <eClassifiers xsi:type="ecore:EClass" name="NamedElement" abstract="true" eSuperTypes="/0/Element"> <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" unique="false" eType="/2/String"/> </eClassifiers> <eClassifiers xsi:type="ecore:EClass" name="Namespace" abstract="true" eSuperTypes="/0/NamedElement"/> <eClassifiers xsi:type="ecore:EClass" name="Classifier" abstract="true" eSuperTypes="/0/Namespace /0/Type"> <eStructuralFeatures xsi:type="ecore:EReference" name="generalization" ordered="false" upperBound="-1" eType="/0/Generalization" containment="true" eOpposite="/0/Generalization/specific"/> </eClassifiers> <eClassifiers xsi:type="ecore:EClass" name="Class" eSuperTypes="/0/Classifier"> <eStructuralFeatures xsi:type="ecore:EReference" name="ownedAttribute" ordered="false" upperBound="-1" eType="/0/Property" containment="true" eOpposite="/0/Property/class"/> </eClassifiers> </ecore:EPackage> </xmi:XMI>
Figure 13 -Extrait dun fichier de dfinition du mtamodle UML 2.0 au format xmi Maintenant au format xmi et comme nous venons de le dire conforme au mtamtamodle Ecore inclus dans le plugin EMF declipse, le mtamodle peut tre interprt et affich par lditeur graphique dvelopp dans le cadre de ce mme plugin.
21
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
6.2.2 Spcification des modles Bien que de nombreux outils plus ou moins faciles mettre en uvre soient en principe disposition, lcriture dun modle est plus fastidieuse. On ne peut plus utiliser le langage km3 exclusivement ddie la dfinition de mtamodles. Il faut alors commencer par crire directement un fichier texte au format xmi en spcifiant les lments du modle avec leurs balises ouvrantes et fermantes. Dans lexemple suivant, on a cr un fichier exemple.ecore o lon dfinit la main une classe de type Classe. Le type Classe est une rfrence la mtaclasse du mme nom dans le mtamodle UML20 lui-mme rfrenc par lattribut xmlns de la balise xmi:XMI.
<?xml version="1.0" encoding="ISO-8859-1"?> <xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns="UML20"> <Class> </Class> </xmi:XMI>
Figure 15 -Exemple de dpart de dfinition dune classe, dans un fichier ecore au format xmi Pour autant que la syntaxe xmi soit correcte et conforme au mtamodle, lditeur permet ensuite daccder plus facilement, la souris, aux attributs et aux associations des lments prcdemment crs.
Figure 16 - Un onglet Properties permet daccder aux proprits de la classe Class. En plus de pouvoir diter dans un onglet les valeurs des proprits de llment slectionn, un menu contextuel accessible par clic droit sur le mme lment permet dans certains cas de provoquer la cration de nouveaux lments issus du mtamodle. Par exemple, on voit dans notre extrait du mtamodle dUML 2.0 que les lments de type Class possdent entre autre par leur membre ownedAttribute des lments de type Property. Cette relation est une relation dagrgation, prcise dans notre fichier km3 original du mtamodle UML 2.0 par le mot cl container
22
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
class Class extends Classifier { reference ownedAttribute[*] container : Property oppositeOf "class"; }
Figure 17 - Le mot cl container permet de reflter une aggregation UML Cette qualit particulire de la relation entre Class et Property, permet de disposer dans lditeur de la plateforme eclipse de la fonction de gnration automatique dlments fils dun autre. Cest cette fonction que nous utilisons dans lexemple ci-dessous.
Figure 18 -Le menu contextuel New Child Une fois un lment contenu par un autre cr, une variante de la fonction New Child est alors disponible, puisque lon peut crer la souris des lments jumeaux , du mme niveau dans la hirarchie contenants/contenus. Lexemple suivant montre comment crer une deuxime proprit pour la mme classe, en utilisant cette possibilit.
23
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
A laide de ces derniers mcanismes et de longlet Properties, on peut ainsi spcifier relativement aisment une classe. Cependant, lexprience montre qucrire ainsi des modles complets reste assez fastidieux. 6.2.3 Le module ATL Lcriture du programme de transformation proprement dit (annexe 11.1) ne pose en pratique aucun problme. Elle se rsume simplement la cration dun fichier texte avec lextension atl, o lon crit les rgles de transformation et les helpers.
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
Class2Relational
25
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
7 Implmentation
Le cadre technique et les notions qui sont manipules sont maintenant dfinis. Nous pouvons aborder les dtails de lexprimentation que nous y avons men. Lordre dans lequel les tapes sont dcrites correspond lordre chronologique du dveloppement dune transformation de modle en gnral. En pratique cependant, dans notre cas de recherche comme dans dautres, ce processus est loin dtre linaire, et de nombreuses rtroactions ont lieu entre les phases de dveloppement. Pour nous aider, nous avons reprit ltude de cas dtaill par les auteurs du processus de conception dans leur article pour illustrer leurs propositions.
<<persistent_class>> Personne {Alias(PERS)} K1_PERS {Id_PERS} Id_PERS : undefined Nom : undefined Adresse : undefined K1_ETUD <<ID>> {Numro}
tuteur 0..1 * * <<persistent_class>> Stage {Alias(STG)} 1 Id_STG : undefined 0..1 Sujet : undefined Dbut : undefined Fin [0..1] : undefined 1 K1_PROP <<ID>> {ID_PROP} 0..1 K1_SOUT <<ID>> {K_STG} K1_ENT <<ID>> {Siret}
<<persistent_class>> Proposition {Alias(PROP)} Sujet : undefined Lieu : undefined Date : undefined * 1 entreprise <<persistent_class>> Entreprise {Alias(ENT)} Siret : undefined Raison_sociale : undefined Adresse : undefined
Figure 22 - Exemple de modle de domaine annot utilis dans larticle [1] Cet exemple prsente le cas o un utilisateur a besoin denregistrer diverses informations relatives des stages dtudiants. On retrouve dans donc dans le modle de domaine des classes qui doivent terme permettre la persistance de ces informations. Le nom
26
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
des classes est explicite, on voit ainsi que le concepteur cherche enregistrer ltudiant qui a effectu le stage, lenseignant qui a ventuellement t le tuteur encadrant ce stage, de quelle proposition formule par quelle entreprise est issu ce stage, et ou et quand aura lieu sa soutenance. Comme nous lavons dit, le choix du langage UML pour exprimer le modle de domaine permet au concepteur dutiliser sa prsuppose connaissance de ce langage pour enrichir son modle. On voit par exemple quil a intelligemment factoris certaines informations personnelles pour les classes Enseignant et Etudiant dans une superclasse commune Personne, en utilisant le mcanisme dhritage dUML. On voit galement que le concepteur, en associant les classes les unes avec les autres, a spcifi des cardinalits varies sur ces associations. Ces cardinalits portent beaucoup de sens, sont prises en compte dans lalgorithme de transformation, et induisent des stratgies de cration de cl diffrentes dans le modle relationnel final. Pour faciliter le travail du concepteur lors de la spcification du modle de domaine, les auteurs de lalgorithme ont par ailleurs enrichi le vocabulaire UML avec deux strotypes importants, les strotypes persistent_class et ID . Le strotype persistent_class permet de spcifier explicitement quelles classes de son modle de domaine il souhaite voir implantes sous forme de tables dans le modle relationnel. Cette distinction entre les classes persistantes et non-persistantes lui permet davoir plus de liberts pour crer lors de la conception des classes utilitaires utiles ce moment l mais sans information pertinente prenniser. Le strotype ID permet quant lui au concepteur de spcifier des identifiants pour les classes. Ces identifiants et leur traitement sont essentiels dans lalgorithme de cration et de rsolution des cls du modle relationnel final. Ils constituent les briques de construction des cl primaires et des cls trangres des tables et des rfrences dduites du modle de domaine. Bien quil puisse dfinir un ou plusieurs identifiants par table, le concepteur ny est pas oblig. Le processus prvoit alors leur gnration automatique par le systme, pour sassurer que chaque table ait au moins un identifiant unique.
27
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
exclusivement sur ces trois packages pour nos besoins. Nous nous approprions la syntaxe et la smantique dcrite dans la spcification de lOMG pour documenter les modles relationnels que nous produisons. Dans la plateforme eclipse, la spcification concrte du mtamodle cible a simplement consist rcrire dans le langage km3 les contenus de ces 3 packages pour les injecter dans la plateforme sous forme de fichier ecore.
Figure 24 - Rsultat de linjection du fichier km3 7.2.2 Spcifier le mtamodle source, le mtamodle de domaine ou encore le mtaMDC. Le travail effectu pour aboutir un mtamodle de modle de domaine complet a t beaucoup plus long et sinueux. Il a consist mener plusieurs recherches en parallle dtailles dans les sections suivantes.
28
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
Ceci peut tre vu comme une phase de rtro-modlisation. Bien sr, comme le modle de domaine est crit en utilisant le langage UML 2.0, tous les lments (classes, associations, multiplicits) sont lincarnations des mtaclasses correspondantes dans le mtamodle UML 2.0 (cf mtamodle en page 5). Mais comme nous lavons dit, nous avons souhait limiter le vocabulaire disponible un sous ensemble restreint dUML, et plus encore des spcialisations dun sous-ensemble des mtaclasses UML. Ainsi par exemple, plutt que de se contenter de la classe Class du mtamodle UML 2.0 comme mtaclasse de la classe persistante Stage de notre MDC, nous avons dfini une nouvelle mtaclasse, nomme Classe_persistante, qui hrite de la mtaclasse Class, et qui est spcialement ddie tre utilise comme type pour les classe persistante dans un modle de domaine. Le mme phnomne sest produit pour les attributs des classes persistantes. L, nous avons cre une nouvelle mtaclasse nomme Attribut, hritant de la mtaclasse Property du mtamodle UML, pour dfinir spcifiquement le type attributs des classes persistantes . De la mme faon, on a ajout les mtaclasses Generalisation_persistante et Association_persistante notre mtaMDC. A linverse, nous nous sommes parfois repos sur les mtaclasses dUML, comme par exemple la mtaclasse nomme Expression, pour permettre au concepteur dcrire les cardinalits des extrmits des associations persistantes.
7.2.2.2 Ajouter des classes utilitaires
Toutefois, en plus des mtaclasses ncessaires exprimer les types des lments prsents dans le MDC, nous savions avoir besoin au cours de lalgorithme dexprimer dautres concepts que ceux prsents et visibles dans le MDC final tel quil est prsent la figure de la page 26. Cest par exemple le cas de la mtaclasse Arc_de_composition, ou Espace_de_recherche. Si aucun lment de ces types napparat plus dans le MDC final, cest que ces lments nont eu de sens que temporairement au cours de lalgorithme. Ils ont cependant ts indispensable, et leur reprsentation ncessit quon ajoute au mtamodle une mtaclasse propre.
7.2.2.3 Mrir les relations entre les mtaclasses et la signification de ces liens
Ajouter des mtaclasses au mtamodle naurait pas de sens si les concepts quelles refltent navaient aucun lien entre eux. Par exemple, la notion dattribut na de sens quen conjonction avec la notion de classe persistante. Cest pourquoi dans le mtamodle on trouve une association entre les deux classes du mme nom. Il en va de mme pour toutes les classes du mtaMDC. 7.2.3 Rsultat : le mtaMDC Dans notre exprience, et comme nous lavons dj dit, la spcification du mtaMDC a t trs longue. En effet, partir dun premier essai, le travail a immdiatement aprs consist tenter de recrer un modle de domaine quivalent celui de larticle et bien entendu conforme cette premire spcification de mtaMDC. La pratique soulevait alors des problmes imprvus au dpart ou bien souvent galement des divergence dinterprtation des lments du mtaMDC, et nous amenait rviser ce dernier. Ce processus de spcification est encore en cours aujourdhui. Certains concepts tels que larc de composition pourraient par
29
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
exemple tre amens disparatre dans de futures versions du mtaMDC. La figure ci-dessous traduit notre vision linstant de la rdaction de ces lignes, avec ses imperfections. Pour rsumer, le mtamodle des modles de domaines complets est construit sur la base des mta classes existantes dans la norme UML 2.0. Dix classes spcifiques notre problme sont ajoutes dans un nouveau package MDC avec les hritages et les associations suivantes :
<<metaclass>> Constraint <<metaclass>> Generalization <<metaclass>> Association <<metaclass>> Class <<metaclass>> Property
Generalisation_persistante 1 Association_persistante 1 {xor} 1 propritaire Classe_persistante extrmit 1 Alias : string * * CalculerEspace() 1 1 origine 1
1..* attribut
Attribut
1 Espace_de_recherche 1 1..*
composant
1..*
Composant_identifiant
ID_exportable
Figure 25 - Notre mtamodle de domaine construit sur UML 2.0 Les classes en blanc appartiennent au package Classes du mtamodle UML 2.0. La description formelle des nouvelles mtaclasses introduites ici, comme celle des associations qui les relient est disponible en annexe 11.3. Une fois cette spcification tablie, son intgration dans lenvironnement eclipse se fait comme vu prcdemment par lintermdiaire de sa rcriture en km3. Le fichier MDC.km3 contient cette traduction. Y sont inclus les deux package UML20 qui regroupe les mtaclasses slectionnes parmi celles du mtamodle UML 2.0 (voir ci-dessus- Extrait du mtamodle UML 2.0 en page 5) et MDC qui contient lui les mtaclasses spcialises ajoutes par nos soins. Le fichier MDC.km3 est ensuite inject dans le format xmi conforme au mtamodle Ecore du plugin EMF declipse.
30
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
7.2.4 Construire un exemple de modle conforme En thorie, ayant en main les mtamodles source et cible, nous pourrions ce stade crire directement et compltement la transformation en code ATL. Cependant, pour pouvoir ds nos premiers pas dans cette criture tester notre code, nous aurons invitablement besoin dun modle candidat passer en paramtre la transformation. En pratique donc, il convient dabord de se donner ce modle candidat, en crant dans notre cas un exemple de modle conforme au mtamodle source dvelopp prcdemment. Les mtaclasses source dont nous disposons, doivent donc permettre au concepteur de construire les modles dentre du processus, appels modles de domaine. Voici, quelques exemples extraits de ltude de cas relatif aux stages dtudiant de larticle [1].
Figure 26 - La classe Stage Voici la classe stage avec ses attributs, ses ID, son espace de recherche et son symbole exportable. La nomenclature des lments est automatique et reprend dabord le nom de la mtaclasse dans le mtamodle laquelle llment se conforme, puis la valeur de lattribut name de llment, quand cet attribut est valu (ce qui est toujours le cas dans lexemple). Notez la reprsentation arborescente dans lditeur eclipse. Cette reprsentation vient du fait que toutes les mtaclasses (les types) des lments lists ci-desssus, c'est--dire les mtaclasses Attribut, ID, Espace_De_Recherche et Symbole_ID_Exportable, sont lies la mtaclasse Classe_persistante par des relations dagrgation dans le mtaMDC. Cette notion dagrgation est traduite visuellement par cette structure arborescente. Voyons maintenant en dtail llment de type Espace_de_recherche li la llment de type Classe_persistante Stage.
31
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
Figure 27 - Dtail de lespace de recherche de la classe Stage Comme nous venons de le dire, cet lment est reprsent dans llment Classe_persistante Stage cause du lien dagrgation qui les relie dans le mtaMDC. Lexistence de ce lien est confirme par la valeur de la rfrence nomme Classepersistante appartenant llment Espace_de_recherche Stage. On peut en effet lire dans longlet Properties de ce dernier lment que sa rfrence une classe persisante pointe vers la Classe_persistante Stage. Utilisons le mme mode de lecture pour voir que llment Espace_de_recherche Stage est li, par sa rfrence nomme Composantidentifiant, quelques lments de ce type, ici les lments Attribut Id_STG, Attribut Sujet, Attribut Debut, Attribut Fin et dautres encore. Un coup dil au mtaMDC nous indique quen effet, il existe une association entre la mtaclasse Espace_de_recherche et la mtaclasse Composant_identifiant, et que les multiplicits permettent un lment de type Espace_de_recherche dtre reli plusieurs lments de type Composant_identifiant. Notons galement que lhritage entre la supermtaclasse Composant_identifiant et la mtaclasse fille Attribut, permet de dire quun lment de type Attribut est aussi un lment de type Composant_identifiant, et peut ce titre tre reli un lment de type Espace_de_recherche. Prenons le cas plus complexe dune association persistante, par exemple entre la classe persistante Stage et la classe persistante Etudiant. Comme dans les cas prcdents, le concept dassociation persistante existe dans le mtaMDC sous la forme de la mtaclasse Association_persistante. Contrairement au cas prcdent cependant, il ny pas de lien dagrgation entre les mtaclasses Association_persistante et Classe_persistante, il ny a mme aucun lien direct entre les deux mtaclasses. Pour comprendre la faon dont sont modlises dans le mtamodle les associations entre les classes persistantes, il faut se reporter au package Class du mtamodle UML 2.0 et en particulier la partie qui a t reprise dans le mtaMDC. Voici concrtement la modlisation de lassociation entre les classes persistantes Stage et Etudiant.
32
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
association
symbol=1
asso_STG_ETUD:Association_persistante
Figure 28 - Modlisation de l'association Stage Etudiant Comme on le voit, cette association met en jeu tout la fois des lments de type Classe_persistante et Association_persistante bien sr, mais aussi de type Property et Expression. Voici la traduction de cette modlisation dans lenvironnement eclipse.
Figure 29 - Les lments impliqus dans la modlisation de lassociation Stage Etudiant Remarquez, dans les proprits de llment Association_persistante Stage Etudiant slectionn dans lditeur, la valeur de la rfrence Member_end, qui pointe vers les lments de type Property, comme indiqu la modlisation de la Figure 28 - Modlisation de l'association Stage Etudiant ci-dessus.
33
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
Le reste de la lecture du modle de domaine conforme au mtaMDC issu de ltude de cas de larticle se fait de la mme manire.
34
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
. Donner la composition de lidentifiant en utilisant lespace de recherche calcul par le systme FinPour } S : prsenter au concepteur la liste de classes sans identifiants exportables SI le concepteur dclare avoir termin ALORS MD compltement annot FSI FTQ S : Affecte un identifiant systme chaque classe reste sans identifiant exportable FAIT : MDC construit
Utilisation dATL
post : On dispose des premiers proto-schmas relationnels S : Appliquer lalgorithme de calcul des cls ; { - Capturer le graphe G de la relation de composition des identifiant - Grer les arcs dimportation - Dtecter les cycles lmentaires TANT QUE [ Il existe des cycles lmentaires ] - Solliciter le concepteur pour rompre le cycle - SI [ proposition correcte du concepteur ] ALORS Appliquer la proposition SINON remplacer un identifiant compos choisi sur le cycle par un identifiant systme. FSI FTQ post : Il nexiste plus de cycle lmentaire S : Prsenter au concepteur les choix didentifiants exportables C : Choisir les cls primaires parmi les identifiants exportables S : Rsoudre les identifiants imports { - Mettre G en ordre (identifiants complexes la racine et attributs comme feuilles) - Rsoudre le calcul des identifiants de proche en proche (en partant des attributs) TANT QUE [ il existe des composants non traits ] FAIRE - Choisir un identifiant I ayant comme fils uniquement des identifiants traits et/ou des attributs) ; - Traiter lidentifiant I en lui affectant comme attributs lensemble des attributs de sa descendance. FAIT S : Produire le MLRnL { - Grer les identifiants substituables et non substituables - Utiliser les noms de rle pour nommer les identifiants concerns - Lister les contraintes de cls et de dpendances de rfrences } FAIT post : le MLRnL est disponible Dans certains cas, guids par le mtier, on fragmente verticalement des tables cls quivalentes.
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
On remarque que lalgorithme nest pas intgralement automatique, et que lutilisateur est rgulirement appel prendre des dcisions. Larticulation entre les tapes automatiques et manuelles soulve des questions sur lesquelles nous reviendrons (section 8.3). Notons simplement pour le moment que la transformation prise dans son ensemble nest pas monolithique, et quelle comporte au contraire de multiples oprations de diverses nature, tantt de dialogue avec lutilisateur, tantt de calcul dun espace de recherche ou didentifiants, et finalement rarement de transformation proprement dite. On a vu par ailleurs quATL, bien que dot dune forme imprative qui le rend apte la programmation de nombreuses oprations, est par essence destin tre utilis sous sa forme dclarative ddie elle exclusivement la transformation de modles. Par l on comprend pourquoi nous avons pour linstant rserv lutilisation dATL la partie du processus pour laquelle il est le plus efficace : la construction du MLRnL partir du MDC annot par lutilisateur, tape signale au milieu de la Figure 30 - Algorithme gnral de transformation. En exploitant les indications de larticle [1] pour le traitement des diffrents lments du modle source (classes, tables, associations, gnralisations) on garantit implicitement le respect de la normalisation_L. Lautomatisation de cette construction se dcompose en trois grandes phases qui sont dtailles dans les 3 sections suivantes. 7.3.2 Identifier les lments et leurs antcdents Cette tape consiste dterminer quels lments du modle sources sont lorigine des lments crs dans le modle cible. En ralit, la rflexion se fait plutt au niveau des mtamodles. En effet, comme nous lavons prsent dans la section 6 ci-dessus, les rgles de transformation exprimes en ATL font exclusivement rfrence aux lments des mtamodles cible et source. La question de la correspondance entre ces lments se ddouble alors de la faon suivante : 1. Lors de la transformation, que devient cet lment de notre mtamodle source? 2. Quels lments du mtamodle source permettent dobtenir, par leur transformation, cet lment du mtamodle cible ? Pour les classes persistantes et de leurs attributs du modle source, nous savons pouvoir rpondre la question 1. En effet, les unes deviennent intuitivement des tables et les autres des colonnes de ces mmes tables. Les autres informations contenues dans le modle source, comme les identifiants, les associations et les gnralisations, doivent subir un traitement plus complexe qui est dcrit dans larticle [1] pour tous les cas de figure. Comme nous venons de le dire, un exemple trivial est la correspondance entre les mtaclasses Classe_persistante du mtaMDC et Table du mtamodle CWM. Il sagit l dune bijection sans ambigut, et les rponses concernant ces lments aux deux questions cidessus sont homognes : un classe persistante donne une table, et une table vient dune classe persistante (ceci nest pas tout fait exact, puisquune composante de jointure reprsente par une table dans le schma relationnel est engendr non pas par une classe persistante, mais par une association N-M). Prenons maintenant la mtaclasse Association_persistante du mtaMDC, et posons nous la premire question : que devient-elle dans la transformation ? La rponse est plus complexe que dans le cas prcdent. En effet, larticle [1] nous indique que le traitement des associations persistantes est conditionn par les multiplicits de leurs extrmits. Il faut dans certains cas crer une composante de jointure, dans dautre seulement une cl trangre, dans
36
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
dautre encore deux cl trangres symtriques. Cette interprtation du texte nous montre que la deuxime question pose sur la mtaclasse ForeignKey du mtamodle CWM na pas non plus de rponse unique. On peut ainsi obtenir de multiples manires une cl trangre dans notre schma relationnel, et il ny a donc plus de bijection entre une association persistante et une cl trangre. La grande varit de configurations possibles du modle source rend difficile didentifier les correspondances qui nous intressent pour programmer sa transformation. Mais ce travail danalyse a t effectu au pralable dans larticle [1], et limplmentation ne consiste donc qu ne rien oublier de tous les cas dcrits. 7.3.3 Dterminer les oprations de traduction Lidentification des correspondances entre les mta-lments sources et cibles dans tous les cas de figure nest bien entendu pas suffisante. La dfinition dune fonction ne se rsume pas celle de ses domaines de dpart et darriv. Un travail supplmentaire consiste dterminer pour chaque correspondance les calculs, tests et affectations oprer sur les lments. Notez que le langage ATL ne permet pas de modifier le modle source, qui est donc en lecture seule, et quil ne permet pas non plus de lire dans les lments cibles crs au cours dune transformation. Cest pourquoi des trois genres dopration lists ci-dessus, les calculs et les tests sopreront sur les valeurs dattributs ou de rfrences du modle source, et les affectations se feront exclusivement sur des valeurs dattributs ou de rfrence du modle cible. Ce mode de travail est cohrent avec une expression des rgles de transformation au niveau des mtamodles, puisque les attributs et les rfrences, au moment de lcriture du programme, ne sont pas connus en terme dlments dun modle dentre, mais en terme de types dlment quil sera possible de rencontrer dans un modle dentre. Par exemple, on ne peut pas dire que l on transforme la classe persistante A en la table A . Cette proposition fait rfrence la classe persistante A, qui est certes un lment dun modle de domaine valide et conforme au mtaMDC, mais qui nexiste pas ou nest pas connu au moment de lcriture de la rgle de transformation dune classe persistante en une table. Pour que la rgle soit gnrique et que la transformation dans son ensemble puisse sappliquer toutes sortes de modles, elle ne saurait rfrencer directement les lments du modle source. Pour traduire lexemple prcdent, on dira donc plutt que chaque lment de type classe persistante du modle source donne lieu la cration dun lment de type table dans le modle cible, et prend le nom de llment source . 7.3.4 Exprimer les oprations dans le langage ATL Enfin, une fois la smantique des rgles de transformation extraite en langage naturel, il sagit dexploiter les fonctionnalits du langage ATL pour en obtenir lquivalent dans notre module, ici le fichier MDC2MLRnL.atl . 7.3.5 Exemple 1, Classe_Table Reprenons lexemple de la transformation dune classe persistante en une table. Voici la rgle crite en ATL.
37
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
Figure 31 - Une table pour une classe, en ATL La ligne 33 donne le nom de la rgle. Le mot cl from indique le type dlment qui sera utilis comme paramtre dentre pour lexcution de cette rgle et le nom de ce paramtre dans le scope de la rgle. Ici le paramtre nomm classe prendra successivement la valeur de tous les lments de type ClassePersistante dfini dans le mtaMDC (identifi par le nom du package MDC ). Cette rgle sera excute une fois sur chaque lment de type ClassePersistante du modle source. Le mot cl to ouvre quant lui la dfinition de la liste des lments qui doivent tres crs dans le modle cible, partir de llment classe . Ici par exemple, puisque lon a une bijection simple entre les classes persistantes et les tables, on ne cre quun seul lment de type Table, dfini dans le mtamodle CWM identifi par le nom de son package MLRnL , et qui prend dans le scope de la rgle le nom de variable t. Les lignes 36 et 37 correspondent enfin laffectation des valeurs des attributs de llment cre. Lattribut name de llment t prend pour valeur la valeur de lattribut name de llment classe, et on fixe dautorit la valeur de lattribut isTemporary de llment t false. La navigation de la variable classe vers son attribut name , la ligne 36, et permise par lutilisation de la syntaxe OCL [12]. 7.3.6 Exemple 2, AssoBinaire_Cas2 Avant daborder cet exemple, reprenons son origine dans larticle. Ce cas prcis de transformation sapplique lorsque lon rencontre une association binaire (ne reliant que deux classes persistantes).
S rleS as : undefined ... : undefined mS..MS A T rleT mT..MT at : undefined ... : undefined
Figure 32 - Cas gnrique dassociation UML trait par la Normalisation_L Le cas gnrique reprsent ci-dessus est divis en plusieurs sous catgories : les cas MT >1 et MS >1, MT = 1 et MT > 1 et MS 1. La deuxime catgorie, (MT = 1), conduit quelques soient les valeurs des autres bornes des multiplicits de lassociation dune part lajout dun attribut K_T tabS, et la cration dune cl trangre qui rfrence tabT depuis tabS. La smantique de cette rgle de transformation est beaucoup plus riche que dans lexemple 1 et ncessite pour sa traduction en ATL la mise en uvre de nombreuses fonctionnalits du langage. Voici le code correspondant.
38
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
Figure 33 - La rgle AssoBinaire_Cas2 Comme dans lexemple 1, on retrouve les mots cls familiers rule , from et to , qui jouent le mme rle que prcdemment. Notons cependant ds prsent la suite de la spcification du type dlment que lon cherche dans le modle source (fin de ligne 88) lapparition entre parenthses dun guard . Il sagit dune expression boolenne qui si elle svalue faux, interdit lexcution de la rgle. Dans notre cas, on utilise cette fonctionnalit pour viter que la rgle AssoBinaire_Cas2 ne sapplique dautres associations persistantes que celles correspondantes au cas MT = 1 indiqu dans larticle. Voyons le dtail de ce guard, qui contient deux helpers (macros) imbriqus : le helper cas2 disponible sur llment thisModule , lui-mme faisant appel en paramtre au helper cardinalite disponible sur llment a
7.3.6.1 Le helper cardinalite
39
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
Figure 34 - Le helper cardinalites Comme tous les helpers quil est possible de dfinir avec ATL, celui-ci est invoqu comme nous lavons vu par son nom dfini ligne 5, ligne o lon trouve galement prcd du mot cl context le type dlment auquel ce helper peut sappliquer, et le type de la valeur renvoye, indiqu en vert comme tant une squence dentier. Les diffrents types disponibles ici et dans le reste des modules ATL sont les types primitifs dfinis dans la norme OCL. La ligne 6, laide de loprateur OCL collect , amorce le parcours de tous les lments de la collection des memberEnd de llment self . self reprsente ici le contexte dxcution du helper, c'est--dire un lment de type AssociationPersistante . Le parcours de cette collection se fait en affectant la variable u successivement les valeurs des lments de la collection. A chaque nouvelle valeur de u, on applique ensuite le code des lignes 7 12, et on renvoie les rsultats sous forme dune nouvelle collection. Ici, le but des lignes 7 12 est de convertir en entier les expressions des cardinalits de lassociation persistante self . Pour ce faire, on dclare la ligne 7 une nouvelle variable locale lv en utilisant les mots cls OCL let et in . lv , pour lowerValue, prend pour valeur une squence dun lment gal la conversion en entier ( toInteger() ) de la valeur de lattribut symbol de llment point par la rfrence lowerValue de la variable u . Pour bien comprendre cette navigation complexe, on peut se reporter la fois au mtaMDC (en particulier sa partie extraite du mtamodle dUML 2.0 la Figure 1) et lexemple de la Figure 28 - Modlisation de l'association Stage Etudiant. Une deuxime partie de code (lignes 8 12) permet de prvenir le cas ou le symbole dune borne suprieur de multiplicit est une toile, auquel cas loprateur toInteger() ne peut tre utilis. Un test nous permet alors de convertir cette toile en un entier trs grand. Nous venons de le voir, lexpression du guard de la rgle AssoBinaire_Cas2 utilise le helper cardinalites . Les helpers tels que celui-ci permettent dans ATL, comme les fonctions dans dautres langages de factoriser du code rutilisable. Lcriture dun helper pour obtenir les cardinalits dune association nous a simplement permis la rutilisation de son code pour le calcul de la variable local index dfinie plus loin.
7.3.6.2 Le helper cas2
Figure 35 - Le helper cas2 Dans lexpression du guard de la Figure 33, on trouve galement un appel au helper cas2 , partir de llment thisModule . Ce dernier lment reprsente dans ATL le module en cours dexcution, et permet daccder aux helpers particuliers dont la dfinition ninclue pas de contexte. Cest prcisment le cas de cas2 . Par ailleurs, une diffrence importante entre les helpers cardinalites et cas2 est la spcification dans la signature de ce dernier de paramtres. Il sagit ici dun paramtre c qui est une squence de squences dentiers. La dfinition du type de ce paramtre est homogne avec celle du type de retour du helper cardinalites , et nous avons ainsi pu les chaner dans la dfinition du guard de la 40
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
rgle AssoBinaire_Cas2 . Le code du helper cas2 , en ligne 21, permet simplement de vrifier que nous sommes bien dans un cas o dune part lassociation dont sont extraites les multiplicits est bien binaire ( c->size() = 2 ) et dautre au moins une des bornes suprieures des multiplicits des extrmits de lassociation persistante est bien gale 1 ( reste de la ligne). Autre nouveaut dans lexpression de cette rgle, un nouveau mot cl using ajout ligne 89 permet simplement douvrir un espace de dfinition de variables locales. Ici par exemple, quatre variables sont dfinies : index, de type entier, utilis uniquement comme outil de calcul pour dterminer dans les lignes suivantes (96 et 97) quelles sont effectivement les classes S et T de la Figure 32 - Cas gnrique dassociation UML trait par la Normalisation_L. Le calcul de la valeur de cet index repose sur le test de la ligne 91, qui lui-mme fait appel, travers le mot cl cardinalites au helper ( la macro) du mme nom. Ce helper a dj t dcrit, rappelons simplement quil permet dobtenir, partir dun lment de type AssociationPersistante reliant deux classes persistantes (ici identifi par la variable nomme a), la squence des couples de bornes de multiplicits de chaque extrmits de lassociation : { { lowerValue extrmit 1 ; upperValue extrmit 1 } ; { lowerValue extrmit 2 ; upperValue extrmit } }. La partie gauche du test dgalit renvoie donc la dernire valeur du premier couple prit dans cette squence de multiplicits. Si cette valeur est 1, on affecte la valeur 1 la variable entire index, sinon, index vaut 0. classeT, de type ClassePersistante, qui rfrence llment du modle source correspondant la classe T de la Figure 32 - Cas gnrique dassociation UML trait par la Normalisation_L. Ce rsultat est obtenu en utilisant la variable index dfinie juste au-dessus, et la navigation OCL. Ligne 96 par exemple, la partie gauche de lassociation utilise la rfrence memberEnd de llment a pour accder la collection des extrmits de lassociation persistante a. De cette collection, loprateur OCL at() permet dextraire llment la position calcule par 2 index . Si lon suit la structure du mtaMDC, on sait obtenir alors un lment de type Property. Depuis ce dernier lment on peut enfin accder par sa rfrence type la classe persistante qui nous intresse. A nouveau, on peut se reporter lexemple de la Figure 28 - Modlisation de l'association Stage Etudiant. classeS, de type ClassePersistante, qui rfrence de la mme faon que prcdemment llment du modle source correspondant la classe S de la Figure 32 - Cas gnrique dassociation UML trait par la Normalisation_L. symboleT, de type chane de caractre, qui rfrence lattribut name de llment de type SymboleIDExportable point par la rfrence symboleidexportable de la variable locale classeT. Cette dernire longue navigation est nouveau possible grce lutilisation du langage OCL. Ces quatre variables locales sont ensuite accessibles lintrieur de la ou des clauses to qui suivent le bloc using . Dans notre cas, leur utilisation permet de rendre plus lisible le code de la transformation, en remplaant des expressions OCL complexes par un simple nom au sens intuitif.
41
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
Comme nous lavons vu en dbut de section 7.3.6, la prsence dans le modle source dune association persistante binaire avec les multiplicits indiques donne lieu la cration dans le modle cible de deux lments simultanment, la fois un attribut de type colonne llment correspondant la table tabS de lexemple gnrique de la Figure 32 - Cas gnrique dassociation UML trait par la Normalisation_L, mais aussi la gnration dune cl trangre rfrenant tabT depuis tabS . La clause to de la rgle visible en Figure 33 - La rgle AssoBinaire_Cas2, possde pour cette raison deux parties. Voici la premire :
Figure 36 - Premir lment gnr par la clause "to" Dans un premier temps, on gnre naturellement un lment c de type Column. Pour fixer lappartenance de cette nouvelle colonne la table S, on affecte la rfrence columnset de llment c la variable locale classeS . On voit ici que comme indiqu prcdemment (section 7.3.3), laffectation de la rfrence columnset nutilise pas la valeur dun lment du modle cible, mais bien celle dun lment du modle source ( classeS ). La ligne 104, quant elle, utilise le helper nomCol disponible dans le contexte gnral du module, pour gnrer un nom de colonne explicite pour la cl trangre dans tabS partir des deux classes lies pas lassociation a , et du nom de la rgle. Dans un deuxime temps, nous crons, au-del de la nouvelle colonne dans tabS , llment de type ForeignKey qui incarne la cl trangre liant cette nouvelle colonne et la cl primaire de tabT . Cest la deuxime partie de la clause to :
Figure 37 - la deuxime partie de la clause "to" La ligne 107 cre llment fk , de type ForeignKey proprement dit. Il faut se reporter au mtamodle CWM pour bien comprendre comment est modlise une cl trangre. Disons simplement que ses deux rfrences essentielles sont dune part uniqueKey , qui doit pointer vers la cl unique (une cl primaire tant une cl unique) que cette cl trangre rfrence, et dautre part feature qui indique la ou les colonnes qui constituent, dans la table qui contient la cl trangre, le corps de la cl. Cest ces deux rfrences importantes qui sont tablies aux lignes 109 et 110 du code de la Figure 37 - la deuxime partie de la clause "to". La premire, ligne 109, est un peu particulire. Il sagit l comme nous venons de le dire de faire pointer la rfrence uniqueKey de la nouvelle cl trangre fk frachement 42
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
cre vers la cl primaire de la table tabT , elle-mme rsultat de la transformation de la classe classeT . Or, comme nous lavons dj mentionn, le langage ATL ne permet pas dutiliser dans les affectations des valeurs des lments du modle cible des valeurs dautres lments du modle cible. Pour raliser tout de mme cette affectation, il faut pour dsigner un lment du modle cible utiliser sont antcdant dans le modle source. Cest ce que nous faisons ici, avec une subtilit supplmentaire. Les lments de types PrimaryKey qui apparaissent dans le modle cible sont gnrs partir des lments de type SymboleIDExportable du modle source, par la rgle ci-dessous.
Figure 38 - Rgle de gnration des cls primaires Dans cette autre rgle, on voit cependant que les lments de type PrimaryKey sont crs (ligne 61) parmi dautres lments (lignes 56 et 67). Pour que dans le code de la figure 35 la machine affecte bien la rfrence uniqueKey le sous-ensemble de type PrimaryKey gnr par la rgle de la figure 36, on utilise loprateur ATL resolveTemp(), qui permet de prciser avec ses deux paramtre (<nom_de_rgle>, <nom_lment_cible>), llment prcis du modle cible dont on souhaite obtenir la valeur. Dans larticle [1] le traitement des associations binaires est bien plus complet et prvoit une multitude de stratgies en fonction de chaque cas particulier des multiplicits non seulement des associations mais galement des attributs qui constituent leurs extrmits. Cest la richesse des ces stratgies qui incarnent dans le code les concepts de la forme normale allge, ou normalisation_L. Tous ces cas ne sont pas encore traits par le code ATL complet fourni en annexe (section 11.1). Ltude de lexemple de la section 7.3.6 fourni cependant les cls pour comprendre comment les cas qui restent traiter pourraient tre programms.
43
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
Comme nous lavons expliqu, une transformation ATL produit un modle cible au format xmi. Ce nouveau modle est donc interprtable par lditeur du plugin EMF. Voici cidessous un court extrait du modle cible, stock dans le fichier tables.ecore , o nous trouvons entre autre llment Stage de type Table . Lutilisation de lditeur et de son onglet Properties permet ainsi de contrler non seulement la prsence des lments attendus dans le modle cible, tels que les tables, les colonnes, les cls, mais galement la valeur des attributs et des rfrences de ces lments.
44
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
45
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
mtaclasses strictement ncessaires lexpression des concepts manipuls ce moment l. Cela aboutira la cration de multiples mtamodles, dont les mutations tout au long du processus de transformations accompagneront les changements de domaines de modlisation.
9 Travaux futurs
9.1 Dlimiter lintervention dATL dans le processus
Les considrations prcdentes relatives au chanage des transformations nous ont permit danticiper lapparition dune tentation peut-tre contre-productive dans lutilisation dATL. En effet, la puissance du langage lui permet dexcuter des oprations pour lesquels il nest malgr tout pas fait. Cest le cas par exemple du calcul des espaces de recherches des classes persistantes. Certes, le code fourni en annexe montre que limplmentation en ATL dune telle tche est possible, mais est-ce vraiment performant ? Ce calcul ne peut-il pas valablement tre opr plus facilement dans dautres langages plus adapts. Nous navons pas de rponse cette question pour le moment, mais peut-tre faudra-t-il tre attentif, lors de llaboration dun processus complet de traduction, bien prciser le domaine dintervention du langage ATL, en le limitant au maximum aux tapes o il est bien le plus adapt.
46
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
10 Conclusion
Lobjectif de ce travail tait de dterminer ladquation entre lutilisation du langage de transformation de modle ATL et le besoin dimplmentation dun processus de traduction dun modle UML en un modle CWM exprim par les auteurs dans leur article [1]. A travers lexprience mene ici, on a pu apporter plusieurs rponses. Premirement, le langage ATL sadapte trs bien une partie du besoin (la transformation proprement dite), le principal effort de mise en uvre tant une dfinition claire et prcise des mtamodles source et cible utiliss dans la transformation. Deuximement, on a montr que les oprations amont et aval de calcul pourraient tre ralises avec le mme langage. Cependant, dune part la performance relative de ce langage par rapport dautres pour la ralisation de ces mmes tches na pas t teste, et dautre part, lutilisation systmatique dATL conduirait llaboration dun enchanement de transformations. Enfin, la documentation dATL et un dialogue avec ses dveloppeurs nous donnent penser quil faudra articuler ce langage avec dautres outils pour amliorer lergonomie du programme de transformation global.
47
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
11 Annexes
11.1 Le code complet de la transformation (module MDC2MLRnL.atl)
module MDC2MLRnL; -- Module Template create OUT : MLRnL from IN : MDC; helper context MDC!AssociationPersistante def : cardinalites : Sequence(Integer) = self.memberEnd->collect( u | let lv : Sequence(Integer) = Sequence{u.lowerValue.symbol.toInteger()} in let uv : String = u.upperValue.symbol in if uv = '*' then lv -> append(10000) else lv -> append(uv.toInteger()) endif ); --Cas MT>1 et MS>1 helper def : cas1( c : Sequence(Sequence(Integer))) : Boolean = c->size() = 2 and c.first().last() > 1 and c.last().last() > 1; --Cas MT=1 helper def : cas2( c : Sequence(Sequence(Integer))) : Boolean = c->size() = 2 and ( c.first().last() = 1 or c.last().last() = 1 ); helper def : nomCol(c:MDC!ClassePersistante,n:String,regle:String):String= c.name + '.' + n + ' (par ' + regle + ')'; helper def : nomFK(c1:MDC!ClassePersistante,c2:MDC!ClassePersistante):String= c1.name + ' rf ' + c2.name; helper def : nomPK(c1:MDC!ClassePersistante,n:String):String= c1.name + '.' + n; --Cre une table pour chaque classe persistante. rule Classe_Table { from classe : MDC!ClassePersistante to t : MLRnL!Table ( name <- classe.name, isTemporary <- false ) } --Cre une colonne pour chaque attribut, et la lie sa table contenante. rule Attribut_Column { from a : MDC!Attribut to c : MLRnL!Column ( name <- a.name, columnset <- a.proprietaire ) } --Cre une proto-colonne dans chaque table T pour son symbole d'ID Exportable rule Symbole_Column { from a : MDC!SymboleIDExportable using { classe : MDC!ClassePersistante = a.classepersistante; } to c : MLRnL!Column ( name <- thisModule.nomCol(classe,a.name,'Symbole_Column') , columnset <- classe ),
48
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
-- cre une cl primaire sur la proto-colonne dfinie prcdamment pk : MLRnL!PrimaryKey ( name <- thisModule.nomPK(classe,a.name), namespace_PK <- classe, feature <- c ), --Cre une proto-colonne dans chaque table importatrice, i.e qui possde un ID qui utilise cet ID Exportable. ce : distinct MLRnL!Column foreach ( id in a.id_ci ) ( name <- thisModule.nomCol(id.classepersistante,a.name,'Symbole_Column, importation') , columnset <- id.classepersistante ) } --Cre un contrainte d'unicit pour chaque ID rule ID_UC { from i : MDC!ID to u : MLRnL!UniqueConstraint ( name <- i.name, namespace_UC <- i.classepersistante,--.debug('cp'), feature <- i.expressionimplicite ) }
-- Cas MT=1 rule AssoBinaire_Cas2 { from a : MDC!AssociationPersistante ( thisModule.cas2(a.cardinalites) ) using { index : Integer = if a.cardinalites->first().last() = 1 then 1 else 0 endif; classeT : MDC!ClassePersistante = a.memberEnd->at(2 - index).type; classeS : MDC!ClassePersistante = a.memberEnd->at(1 + index).type; symboleT : String = classeT.symboleidexportable.name; } to -- proto-colonne dans la table S, avec le nom du symbole d'id exportable de la classe T c : MLRnL!Column ( columnset <- classeS, name <- thisModule.nomCol(classeS,symboleT,'AssoBinaire_Cas2') ), -- mise en relation de la cl de la table T avec le symbole de la table S, avec une cl trangre fk : MLRnL!ForeignKey ( name <- thisModule.nomFK(classeS,classeT), uniqueKey <- thisModule.resolveTemp(classeT.symboleidexportable,'pk'), feature <- c ) } --Dans le cas d'une gnralisation, on cre simplement une cl trangre dans la spcialisation rule Generalisation { from g : MDC!GeneralisationPersistante using { classeG : MDC!ClassePersistante = g.general; classeS : MDC!ClassePersistante = g.specific; symbole : String = classeG.symboleidexportable.name; --.debug('symbole'); } -- proto-colonne dans la table S, avec le nom du symbole d'id exportable de la classe G to c1 : MLRnL!Column ( columnset <- classeS, name <- thisModule.nomCol(classeS,symbole,'Generalisation') ), -- cl trangre qui associe la cl de la classe G avec le proto-atttribut de la classe S fk : MLRnL!ForeignKey ( name <- thisModule.nomFK(classeS,classeG), uniqueKey <- thisModule.resolveTemp(classeG.symboleidexportable,'pk'), feature <- c1
49
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
-) } -- Pour certaines associations binaires, en fonction des cardinalits, on cre des cls trangres rule AssoBinaire_Cas1 { from a : MDC!AssociationPersistante ( thisModule.cas1(a.cardinalites).debug('cas1') ) using { classeS : MDC!ClassePersistante = a.memberEnd->first().type; symboleS : String = classeS.symboleidexportable.name; classeT : MDC!ClassePersistante = a.memberEnd->last().type; symboleT : String = classeT.symboleidexportable.name; } to ta : MLRnL!Table ( name <- 'association ' + a.name.debug('asso') ), cS : MLRnL!Column ( columnset <- ta, name <- symboleS ), cT : MLRnL!Column ( columnset <- ta, name <- symboleT ), fkS : MLRnL!ForeignKey ( namespace <- classeS, uniqueKey <- thisModule.resolveTemp(classeS.symboleidexportable,'pk'), feature <- cS ), fkT : MLRnL!ForeignKey ( namespace <- classeT, uniqueKey <- thisModule.resolveTemp(classeT.symboleidexportable,'pk'), feature <- cT ), uc : MLRnL!UniqueConstraint ( name <- ta.name, namespace_UC <- ta, feature <- Sequence{cS,cT} ) } --namespace <- classeS
50
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
-- ensemble des proprits qui sont membre d'une des associations prcdentes qui ont pour multiplicit -- maximum 1, et qui n'ont pas pour type la classe dfinie en dbut de marco. let proprietes_extremite : Sequence(MDC!Property) = assos->collect( a | a.memberEnd )->flatten()->select( p | p.type <> classe )->select( p | p.upperValue.name = 'Un') in -- symboles exportables des classes qui sont type des proprits extrmits proprietes_extremite->collect( p | p.type.symboleidexportable ); helper context MDC!EspaceDeRecherche def : symboles_generalisations : Sequence(MDC!SymbolesIDExportables) = -- ici, il faut rcuprer les symboles d'id exportables de toutes les classes atteignables depuis -- la classe de l'espace de recherche courant par une gnralisation self.classepersistante.generalization->collect( g | g.general.symboleidexportable ); rule CalculEspaces { from i : MDC!EspaceDeRecherche to o : MDC!EspaceDeRecherche ( name <- i.name, classepersistante <- i.classepersistante.debug('classe'), composantidentifiant <- i.attributs->union(i.symboles_classes_associees)>union(i.symboles_generalisations).debug('symboles') ) } rule CopieEtudeDeCas { from i : MDC!EtudeDeCas to o : MDC!EtudeDeCas( nom <- i.nom, element <- i.element ) }
11.3.1.2 Description
Une classe persistante est une classe que le concepteur a spcifie comme telle. Elle est destine devenir une table dans la future base de donnes.
11.3.1.3 Attributs
Alias : String Une des exigences de lalgorithme propos ici est que tous les lments spcifis persistants reoivent lors de la conception un alias. Cet alias sera utilis comme identifiant lors de la cration des tables correspondantes dans la base de donne.
51
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
11.3.1.4 Associations
attribut :Attribut Chaque attribut dune classe persistante est reprsent par une instance de la classe Attribut implicitement persistante et qui deviendra une colonne dans la table rsultante. :Symb_ID_exportable Chaque classe persistante sera associe un symbole dID exportable au moment du calcul explicite des identifiants. :Espace_de_recherche Lespace de recherche dune classe C est compos didentifiants qui sont soit des attributs de C soit des symboles dID exportables dautres classes accessibles par C par un chemin de composition. :ID Chaque classe persistante posssde un ou plusieurs ID permettant leur identification unique. Lun de ces ID sera qualifi dexportable et deviendra lunique symbole dID exportable de la classe. :Chemin_de_composition Une classe persistante peut constituer lextrmit ou lorigine dun chemin de composition. Un chemin de composition est une squence dassociations dont les extrmits sont de multiplicit 1 ou 0-1 ou de gnralisation.
11.3.1.5 Contraintes
11.3.2 Generalisation_persistante
11.3.2.1 Gnralisations
11.3.2.2 Description
Une gnralisation persistante permet de rendre prenne la relation dhritage entre deux classes du MDC.
11.3.2.3 Attributs
11.3.2.4 Associations
arc : Arc_de_composition Identifie larc de composition dont cette gnralisation est lincarnation.
52
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
11.3.3 Association_persistante
11.3.3.1 Gnralisations
11.3.3.2 Description
Une association persistante permet de rendre prenne la relation dassociation entre deux classes du MDC.
11.3.3.3 Attributs
11.3.3.4 Associations
arc : Arc_de_composition Identifie larc de composition dont cette gnralisation est lincarnation. 11.3.4 Attribut
11.3.4.1 Gnralisations
11.3.4.2 Description
11.3.4.3 Attributs
La classe Attribut ne dfinit aucun attribut additionnel ceux hrits de ses superclasses dUML 2.0 Superstructure. On notera lutilisation systmatique de lattribut name de la classe parente NamedElement .
11.3.4.4 Associations
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
Rfrence les cls (les ID) dont cet attribut fait partie de lexpression explicite. 11.3.5 ID
11.3.5.1 Gnralisations
11.3.5.2 Description
Les ID sont des identifiants construits par le concepteur en assemblant des attributs de la classe et/ou de symboles dID exportables dautres classes.
11.3.5.3 Attributs
La classe ID ne dfinit aucun attribut additionnel ceux hrits de ses superclasses dUML 2.0 Superstructure. On notera lutilisation systmatique de lattribut name de la classe parente NamedElement .
11.3.5.4 Associations
: Arc_de_composition Spcifie le ou les arcs de composition qui permettent datteindre le ou les symboles dID exportables qui peuvent composer lID. : Classe_persistante Rfrence la classe_persistante laquelle appartient cet ID. expression_implicite: Composant_identifiant Spcifie les composants de lidentifiant, quils soient des attributs ou des symboles dID exportables, qui dans ce dernier cas ne sont pas encore dtermins en terme dattributs. expression_explicite : Attribut Donne la composition finale exhaustive de lID exclusivement en terme dattributs, de la classe ou dautres classes.
11.3.5.5 Contraintes
Le nom dun ID est compos comme suit : nomIdentifiant ::= K<numro dordre>_< alias de la classe traite>
54
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
11.3.6 ID_exportable
11.3.6.1 Gnralisations
ID
11.3.6.2 Description
Pour chaque classe persistante, un unique identifiant sera choisi comme exportable parmi les ID dfinis sur la classe.
11.3.6.3 Attributs
11.3.6.4 Associations
11.3.6.5 Contraintes
Lidentifiant choisi comme exportable devra en plus de possder une proprit dunicit, ne comporter aucun composant didentifiant qui prenne des valeurs nulles.
11.3.7 Symb_ID_exportable
11.3.7.1 Gnralisations
11.3.7.2 Description
Le symbole dID exportable est une variable temporaire qui intervient dans le calcul et lexpression des cls des tables dans le modle relationnel. Cette variable est dfinie et valorise sur les classes du MDC. Elle joue le rle dinconnue dans le systme dquations permettant de rsoudre le calcul final explicite des identifiants.
11.3.7.3 Attributs
Comme la classe ID, la classe Symb_ID_exportable fait simplement lusage de lattribut name de sa superclasse NamedElement .
55
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
11.3.7.4 Associations
11.3.7.5 Contraintes
De faon presque similaire lID, le nom du symbole est contraint de la faon suivante : nomSymbole ::= K_<alias de la classe traite>
11.3.8 Composant_identifiant
11.3.8.1 Gnralisations
Aucun hritage
11.3.8.2 Description
Cette classe abstraite reprsente un composant utilis dans la construction des ID des classes persistantes.
11.3.8.3 Attributs
11.3.8.4 Associations
id_ci : ID Rfrence les ID dont ce composant fait partie de lexpression implicite. : Espace_de_recherche Rfrence les espaces de recherche qui contiennent ce composant. 11.3.9 Espace_de_recherche
11.3.9.1 Gnralisations
Aucun hritage
56
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
11.3.9.2 Description
Lespace de recherche de la classe considre est constitu de lensemble de ses attributs, augment des symboles didentifiant exportable des classes voisines auxquelles elle est relie par un arc de composition . Lespace de recherche dune classe C est compos didentifiants qui sont soit des attributs de C soit des symboles dID exportables dautres classes accessibles par C par un chemin de composition.
11.3.9.3 Attributs
11.3.9.4 Associations
: Classe_persistante Rfrence la classe persistante dont cet ensemble est lespace de recherche. : Composant_identifiant Spcifie les composants didentifiant qui font parti de cet espace de recherche. 11.3.10
11.3.10.1
Arc_de_composition
Gnralisations
Aucun hritage
Description
11.3.10.2
Les arcs dimportation sont de deux sortes, ceux qui proviennent dassociations et ceux qui proviennent de gnralisations. Dans le premier cas, les associations prises en compte joignent la classe considre (origine) une quelconque autre classe (extrmit), avec comme contrainte que la multiplicit de lextrmit soit (1) ou (0..1). Larc dimportation est naturellement orient de lorigine vers lextrmit. Dans le second cas, larc dimportation est orient de la spcialisation vers la gnralisation.
Attributs
11.3.10.3
11.3.10.4
gen : Generalisation_persistante Spcifie la gnralisation qui incarnation cet arc. asso : Association_persistante 57
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
Spcifie lassociation qui incarnation cet arc. extrmit : Classe_persistante Rfrence la classe persistante extrmit de larc de composition. origine : Classe_persistante Rfrence la classe persistante de dpart du arc de composition, autrement dit la classe persistante laquelle appartient cet arc. : ID Spcifie le ou les ID dont un composant didentifiant est accd par ce chemin de composition
11.3.10.5 Contraintes
Une classe persistante ne peut pas tre la fois extrmit et origine dun chemin de composition. Un arc de composition ne peut tre incarn que par une association persistante ou une gnralisation persistante, exclusivement.
58
Approche MDA pour la transformation dun diagramme de classes UML 2.0 en un schma CWM
1 Gnrer un modle relationnel normalis partir de diagrammes de classes UML, M.C. Lafaye, J.Y. Lafaye, G. Louis, 2006. 2 ATLAS (ATLantic dAta Systems), http://www.sciences.univ-nantes.fr/lina/ATLAS/ 3 Mise en oeuvre de lapproche MDA pour la conception de bases de donnes normalises-L, Sabirou Touri, 2004
.d ]rC.dl=gZ_fJ ]r.ntl .X..l=.Kntlont krtrCudl=..x_ldh.__fV ]rtrCldhJhVl=.]_m-kQ2___.)
4 Introduction aux bases de donnes (6me dition), Chris J. Date, Ed Vuibert, 1998 5 UML http://www.uml.org/ 6 UML Superstrucutre, http://www.omg.org/cgi-bin/doc?formal/05-07-04 7 CWM http://www.omg.org/technology/cwm/ 8 MDA Guide Version 1.0.1 http://www.omg.org/docs/omg/03-06-01.pdf 9 MOF/QVT http://www.omg.org/cgi-bin/apps/doc?ptc/05-11-01.pdf 10 Le forum de discussion sur ATL : http://groups.yahoo.com/group/atl_discussion/ 11 Le zoo des transformation ATL : http://www.eclipse.org/gmt/atl/atlTransformations/ 12 La specification officielle du langage OCL version 2.0 : http://www.omg.org/docs/formal/06-05-01.pdf 13 Le bundle ATL pour Windows: http://www.sciences.univ-nantes.fr/lina/atl/atldemo/adt/
59