I. Introduction▲
Les profils représentent l'intégration du mécanisme light-weight (voir article : Initiation à l'ingénierie dirigée par les modèles) afin d'étendre les langages basés sur le MOF (Meta Object Facility). Plus précisément, les profils sont utilisés pour personnaliser UML (Unified Modeling Language) pour un domaine spécifique par l'intermédiaire des mécanismes d'extension qui enrichissent la sémantique et la syntaxe du langage.
Un stéréotype représente la fonctionnalité de base pour étendre UML. Il peut être considéré comme une spécialisation d'un concept existant en UML et qui offre la possibilité d'avoir des concepts pour la modélisation d'un domaine spécifique. Les stéréotypes peuvent avoir des attributs (aussi appelés tagged values) et peuvent être associés à d'autres stéréotypes existants ou à d'autres concepts UML. Du point de vue notation, les stéréotypes peuvent donner un symbole graphique différent pour les éléments du modèle UML. Par exemple, une classe stéréotypée « Horloge » pourrait utiliser une image au lieu du format de la classe ordinaire. En outre, les stéréotypes peuvent aussi être influencés par des restrictions exprimées par des contraintes. La définition des contraintes dans les langages basés sur le MOF est OCL (Object Constraint Language).
Dans ce tutoriel, nous montrons étape par étape comment créer un profil UML via l'outil Papyrus.
II. À propos de Papyrus▲
Papyrus vise à fournir un environnement intégré facile à utiliser pour éditer les modèles de type EMF (Eclipse Modeling Framework), il soutient en particulier UML et les langages de modélisation connexes tels que SysML et MARTE. Papyrus offre également un support très avancé pour les profils UML qui permet aux utilisateurs de définir des éditeurs pour les DSL (Domain Specific Language) basés sur le standard UML 2.
III. Installation de Papyrus▲
1 - Téléchargez la plateforme Eclipse Modeling à partir de l'adresse suivante : www.eclipse.org/downloads.
2 - Décompressez le fichier téléchargé et lancez Eclipse.exe.
3 - Lancez le site d'installation des composants de modélisation.
4 - Choisissez Papyrus et lancez l'installation.
5 - Relancez Eclipse et choisissez Papyrus comme perspective.
IV. Construction d'un profil dédié aux bases de données▲
Exemple à suivre : on va créer un profil UML décrivant les bases de données relationnelles.
Une base de données contient un ensemble de tables. Une table contient un ensemble de colonnes, un sous-ensemble de ces colonnes forme la clé primaire de la table.
IV-A. Création du profil▲
1 - Créez un nouveau Profil à partir d'un projet Papyrus.
2 - Introduisez un nom puis cliquez sur le bouton « suivant ».
3 - Choisissez le type profil comme langage pour les diagrammes puis cliquez sur le bouton « suivant ».
4 - Donnez un nom au diagramme et cochez la case de « UML Profil Diagram » puis cliquez sur « Finish ».
5 - Vous devez avoir un environnement pareil à celui de la figure ci-dessous.
6 - Les concepts qu'on souhaite créer via ce profil sont les suivants :
Concept Modèle | Métaclasse UML | Type d'extension |
---|---|---|
Base | Package | StereoType |
Table | Class | StereoType |
Colonne | Property | StereoType |
ClefPrimaire | TaggedValue |
7 - Créez les trois stéréotypes : Base, Table et Colonne, en faisant un 'glisser-déposer' de l'élément « Stereotype » qui se trouve sur la palette dans le compartiment « Classifiers ».
8 - Ajoutez l'attribut ClefPrimaire au stéréotype Table.
9 - Faites un clic droit sur l'attribut ClefPrimaire et choisissez « affichez les propriétés ».
10 - Entrez Colonne comme étant type de ClefPrimaire.
11 - De la même façon, changez la multiplicité et choisissez 0..*.
12 - Importez la métaclasse « Package », cette dernière va être étendue par le stéréotype « Base ».
13 - Choisissez la relation d'extension qui se trouve sur la palette dans le compartiment RelationShips " et liez le stéréotype « Base » à la métaclasse « Package ».
14 - De la même façon, ajoutez les métaclasses « Property » et « Class », puis liez-les avec les stéréotypes « Colonne » et « Table » en utilisant les relations d'extension.
15 - Ajoutez les relations d'association entre les différents stéréotypes.
16 - Utilisez la fenêtre des propriétés pour concevoir les relations d'association.
17 - Terminez les autres associations qui restent.
18 - Vous pouvez aussi ajouter des règles OCL.
Par exemple : une table doit posséder une clé primaire
Context Table :
self.feature->select(isStereotyped("ClefPrimaire")).notEmpty
19 - Enregistrez votre modèle, une boite de dialogue doit apparaître pour décider si le profil doit être défini ou non. La définition est nécessaire afin d'utiliser le profil.
Une autre boite de dialogue va apparaître pour ajouter le numéro de la version ainsi que les différentes informations liées au profil qui est en cours de conception. Validez la définition pour pouvoir utiliser le profil.
IV-B. Ajout des icônes dans le profil▲
Les icônes peuvent être associées aux stéréotypes pour améliorer la présentation des éléments stéréotypés sur les diagrammes. Pour associer une icône à un « Stereotype « suivez les étapes suivantes :
1 - vous pouvez créer un dossier « image » contenant les images que vous voulez associer dans le même projet :
2 - sélectionnez le stéréotype « Base » puis dans la partie vue de propriétés choisissez l'onglet UML et cliquez sur « + » pour ajouter une icône :
3 - dans la petite fenêtre « Model explorer », sélectionnez l'image, choisissez le type icône et cliquez sur « + » afin de charger l'image :
4 - vous pouvez ajouter d'autres icônes ou formes (Shape en anglais) pour les autres stéréotypes ;
5 - n'oubliez pas d'enregistrer le modèle et de le définir. Vous n'êtes pas obligé de définir votre profil après chaque enregistrement mais vous êtes obligé de le définir avant son utilisation afin d'utiliser sa dernière version.
IV-C. Application du profil conçu▲
Pour tester votre profil, suivez les étapes suivantes :
1 - créez d'abord un nouveau modèle (vous pouvez le faire dans le même projet) :
2 - exemple : on va essayer de créer une base « biblio » qui contient deux tables « adherent » et « livre ». La table « adherent » se compose de quatre colonnes (nom, prenom, dateNaissance, adresse) et la table livre contient (isbn, titre, auteur). La composition des colonnes « nom », « prenom » et « dateNaissance » représente la clé primaire de la table « adherent ». La clé primaire de la table « livre » est la colonne « isbn » ;
3 - appliquez le profil conçu au nouveau modèle : sélectionnez le modèle, puis dans la vue propriétés allez à l'onglet « Profile » :
4 - appuyez sur « + » pour ajouter un profil qui existe dans votre espace de travail (le projet contenant le profil doit être ouvert !) ;
5 - cochez les profils et les sous-profils souhaités, dans le nôtre il n'y a qu'un seul profil :
6 - commencez par la création de la base « biblio » qui sera un package :
7 - pour appliquer le stéréotype, sélectionnez le package « biblio » et appuyez sur « + » se trouvant dans l'onglet profil de la vue des propriétés, puis sélectionnez le stéréotype « Base » :
Si le stéréotype « base » ne figure pas sur le package « biblio », allez à l'onglet apparence de la vue des propriétés du package « biblio « , sélectionnez le stéréotype appliqué et cliquez sur le bouton « afficher stéréotype » :
8 - ajoutez la classe « adherent » et stéréotypez-la par « table ».
9 - sur Papyrus, une classe se compose de trois compartiments : « AttributeCompartment » , « OperationCompartment » et « NestedClassifierCompartment ». Dans cet exemple, vous n'aurez besoin que du compartiment des attributs :
10 - vous pouvez afficher/masquer les compartiments en utilisant le menu contextuel en faisant un clic droit ou [Ctrl+F5] :
11 - ajoutez les colonnes (nom, prenom, dateNaissance, adresse), chaque colonne est représentée par une propriété au sein de la classe « adherent » :
12 - pour chaque propriété, il faut définir le type et la multiplicité en utilisant la vue des propriétés : nom: string : [*] - prenom : string : [*] - dataNaissance : integer : [*] - adresse : string : [*]
13 - stéréotypez chaque propriété par « colonne » :
14 - la classe « adherent » contient la propriété « »clefPrimaire » qui est une valeur étiquetée (Tagged value). Ajoutez les valeurs « nom », « prenom » et « dataNaissance » à cette propriété en appuyant sur « + » qui se trouve dans la zone Property values de l'onglet « Profile » :
15 - pour afficher l'attribut « clefPrimaire », sélectionnez la classe stéréotypée par « table » et allez sur l'onglet « apparence ». Dans le champ stéréotypes appliqués, sélectionnez « clefPrimaire » et appuyez sur le bouton d'affichage :
16 - faites la même chose pour la classe « livre » :
17 - vous pouvez aussi changer le symbole graphique d'une classe stéréotypée par « table « , pour cela, sélectionnez la classe et changez la valeur du champ « stereotype display » qui se trouve dans l'onglet apparence, choisissez par exemple « Icon » (il faut choisir la même valeur que celle que vous avez définie dans le profil : Icon ou Shape).
Vous pouvez compléter l'utilisation de votre profil avec des outils de vérification, d'analyse ou de génération de code et des commandes SQL.
V. Conclusion et remerciements▲
Les profils UML par rapport au MOF souffrent de certains inconvénients mais proposent aussi beaucoup d'avantages. D'un côté le mécanisme des profils UML nous oblige à nous rattacher au métamodèle surtout qu'on ne peut pas créer notre propre métaclasse. Cependant les profils UML nous permettent de bénéficier de l'utilisation de la notation graphique d'UML, d'exploiter les éditeurs UML existants et aussi d'utiliser les différentes technologies associées à UML comme le langage de contraintes OCL, ce dernier n'ayant pas été traité dans ce tutoriel.
Le prochain article sera dédié à la façon de mettre votre profil sous la forme d'un plug-in Eclipse.
Nous tenons à remercier Claude LELOUP pour la relecture orthographique de cet article. Nous tenons également à remercier Nemek pour sa relecture technique.