Mis à jour le 08/01/2018
  • 30 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

Ce cours existe en livre papier.

Vous pouvez obtenir un certificat de réussite à l'issue de ce cours.

Vous pouvez être accompagné et mentoré par un professeur particulier par visioconférence sur ce cours.

J'ai tout compris !

UML : modélisons nos classes (2/2)

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Voici la suite directe du précédent chapitre ayant pour objectif de vous introduire à l'UML. Nous savons actuellement analyser des diagrammes de classes et les interactions entre elles, mais que diriez-vous de créer vous-même ces diagrammes ?

Pour ce faire, nous allons avoir besoin d'un programme : je vais vous présenter Dia.

Ayons les bons outils

Avant de se lancer tête baissée dans la modélisation, il serait bien d'avoir les logiciels qui le permettront. Pour cela, nous allons avoir besoin d'un logiciel de modélisation de diagrammes UML. Il en existe plusieurs, pour ma part, j'ai choisi Dia.

La raison de ce choix est simple : une extension qui permet de convertir les diagrammes UML en code PHP a été développée pour ce logiciel ! Ainsi, en quelques clics, toutes vos classes contenant les attributs et méthodes ainsi que les interactions seront générées, le tout commenté avec une phpdoc. Bref, cela nous simplifiera grandement la tâche ! :D

Installation

Des installateurs sont disponibles sur le site dia-installer.de. Le lien de téléchargement pour Windows est sur la page d'accueil. Deux petits liens situés en-dessous de ce lien de téléchargement mènent aux pages proposant les liens pour Linux et Mac OS X.

Installation de l'extension uml2php5

Vous avez correctement installé Dia sur votre ordinateur. Il faut maintenant installer l'extension uml2php5 qui nous permettra de générer automatiquement le code de nos classes à partir de nos diagrammes. Pour cela, il vous faut télécharger cinq fichiers. Ces fichiers sont disponibles sur le site de l'extension, en ayant cliqué sur Download à gauche. Téléchargez l'archive .zip ou .tar.gz suivant vos préférences. Décompressez cette archive et copiez / collez les cinq fichiers dans le dossier xslt présent dans le répertoire d'installation de Dia.

Lancer Dia

Histoire que nous soyons tous au point, je vais vous demander de lancer votre logiciel afin que nous soyons bien sûrs d'avoir tous le même. Si l'interface est différente, veillez bien à avoir téléchargé la version 0.97 du logiciel (actuellement la dernière).

Fenêtre principale de Dia
Fenêtre principale de Dia

Deux zones principales

L'interface étant assez intuitive, je ne vais pas m'étendre sur sa présentation. Je vais me contenter de vous donner le rôle des deux parties de cette interface.

La première partie, à gauche, contient tous les outils (créer une classe, une interaction, ou bien un trait, un cercle, etc.). La seconde, à droite, est beaucoup plus grande : elle contiendra notre diagramme. C'est à l'intérieur d'elle que l'on effectuera nos opérations pour tout mettre en œuvre.

Modéliser une classe

Créer une classe

Lançons-nous maintenant dans la création d'un diagramme. Pour commencer, modélisons notre première classe. Pour cela, rien de plus simple. Je vais vous demander de cliquer sur cette icône (voir figure suivante).

Modéliser une classe
Modéliser une classe

Cette icône, comme l'infobulle nous l'indique, représente l'outil permettant de créer une classe. Ainsi, dans la zone contenant notre diagramme, il suffira de cliquer n'importe où pour qu'une classe soit créée à l'endroit où l'on a cliqué. Essayez donc !

Normalement, vous devriez avoir obtenu quelque chose ressemblant à ceci (voir figure suivante).

Diagramme de classe vierge
Diagramme de classe vierge

Vous voyez huit carrés ainsi que deux croix bleues autour de la classe. Si les carrés sont présents, cela veut dire que la classe est sélectionnée (par défaut sélectionnée quand vous en créez une). Si vous voulez enlever cette sélection, il vous suffit de cliquer à côté. Vous verrez ainsi les huit carrés remplacés par de nouvelles petites croix bleues qui ont une signification bien particulière. Je vous expliquerai ceci plus tard.

Modifier notre classe

Nous allons accéder aux propriétés de notre classe afin de pouvoir la modifier. Pour cela, je vais vous demander de double-cliquer dessus afin d'obtenir cette fenêtre (voir figure suivante).

Fenêtre permettant de modifier la classe
Fenêtre permettant de modifier la classe

Décortiquons un peu cette fenêtre. Tout ceci est en fait très simple, il suffit juste de quelques explications.

Tout en haut, vous voyez une liste de cinq onglets :

  • Classe : permet de gérer les options concernant cette classe.

  • Attributs : permet de gérer la liste des attributs de cette classe.

  • Opérations : permet de gérer la liste des méthodes de cette classe.

  • Modèles : inutile en PHP étant donné qu'il n'y a pas de templates. Si ça vous intrigue, vous pouvez aller voir en C++ par exemple.

  • Style : permet de modifier le style de la classe (couleurs et effets de texte).

Gestion des options de la classe

En haut, vous pouvez apercevoir trois champs texte. Le premier est le nom de la classe. Vous pouvez par exemple y indiquer le nom Personnage. Ensuite vient le stéréotype. Ce champ est à utiliser pour spécifier que la classe est particulière. Par exemple, s'il s'agit d'une interface, on y écrira simplement « interface ». Enfin, dans le dernier champ texte, nous placerons des commentaires relatifs à la classe.

Ensuite viennent une série de cases à cocher. La première signifie (comme vous vous en doutez) que la classe est abstraite ou non. Par la suite, nous pouvons apercevoir trois cases à cocher permettant d'afficher ou non des éléments (afficher ou masquer les attributs, méthodes ou commentaires). Si vous décidez de masquer les attributs ou méthodes, leur bloc disparaîtra de la classe (les bordures entourant le bloc comprises), tandis que si vous décidez de supprimer les attributs ou méthodes (via les cases à cocher de droite), le bloc restera visible mais ne contiendra plus leur liste d'attributs ou méthodes. Le masquage des attributs est utile dans le cas où la classe est une interface par exemple.

Gestion des attributs

Commençons par ajouter des attributs à notre classe. Pour cela, cliquez sur l'onglet Attributs (voir figure suivante).

Fenêtre permettant de gérer les attributs
Fenêtre permettant de gérer les attributs

Analysons le contenu de cette fenêtre. La partie la plus évidente que vous voyez est le gros carré blanc en haut à gauche : c'est à l'intérieur de ce bloc que seront listés tous les attributs. Vous pourrez, à partir de là, en sélectionner afin d'en modifier, d'en supprimer, d'en monter ou descendre d'un cran dans la liste. Afin d'effectuer ces actions, il vous suffira d'utiliser les boutons situés à droite de ce bloc :

  • Le bouton Nouveau créera un nouvel attribut.

  • Le bouton Supprimer supprimera l'attribut sélectionné.

  • Le bouton Monter montera l'attribut d'un cran dans la liste (s'il n'est pas déjà tout en haut).

  • Le bouton Descendre descendra l'attribut d'un cran dans la liste (s'il n'est pas déjà tout en bas).

Créez donc un nouvel attribut en cliquant sur le bouton adapté. Vous voyez maintenant tous les champs du bas qui se dégrisent. Regardons de plus près ce dont il s'agit.

  • Un premier champ texte est présent afin d'y spécifier le nom de l'attribut (par exemple, vous pouvez y inscrire force).

  • En dessous est présent un champ texte demandant le type de l'attribut (s'il s'agit d'une chaîne de caractères, d'un nombre entier, d'un tableau, d'un objet, etc.). Par exemple, pour l'attribut créé, vous pouvez entrer int.

  • Ensuite vient un champ texte demandant la valeur de l'attribut. Ce n'est pas obligatoire, il faut juste y spécifier quelque chose quand on souhaite que notre attribut ait une valeur par défaut (par exemple, vous pouvez entrer 0).

  • Le dernier champ texte est utile si vous souhaitez laisser un commentaire sur l'attribut (ce que je vous conseille de faire).

  • Vient ensuite une liste déroulante permettant d'indiquer la visibilité de l'attribut. Il y a quatre options. Vous reconnaîtrez parmi elles les trois types de visibilités. En plus de ces trois types, vous pouvez apercevoir un quatrième type nommé Implémentation. Ne vous en préoccupez pas, vous n'en aurez pas besoin.

  • La dernière option est une case à cocher, suivie de Visibilité de la classe. Si vous cochez cette case, cela voudra dire que votre attribut sera statique.

Entraînez-vous à créer quelques attributs bidons (ou bien ceux de la classe Personnage si vous êtes à cours d'idée). Vous pourrez ainsi tester les quatre boutons situés à droite du bloc listant les attributs afin de bien comprendre leur utilisation (bien que ceci ne doit pas être bien difficile, mais sait-on jamais :-° ).

Gestion des constantes

Comme je l'avais brièvement évoqué au chapitre précédent, une constante se reconnaît grâce à plusieurs signes. En effet, une constante se déclare comme un attribut sur un diagramme, mais respecte plusieurs contraintes :

  • Elle doit être écrite en majuscules et les espaces sont remplacées par des underscores (comme dans votre script PHP).

  • Elle doit avoir une visibilité publique.

  • Elle doit être de type const.

  • Elle doit être statique.

  • Elle doit posséder une valeur.

Je vous ai appris à créer des attributs, il serait donc redondant que je vous apprenne à créer des constantes qui ne sont, comme je viens de le dire, que des attributs particuliers. ;)

Gestion des méthodes

Après avoir ajouté des attributs à notre classe, voyons comment lui ajouter des méthodes. Pour cela, cliquez sur l'onglet Opérations (voir la figure suivante).

Fenêtre permettant de gérer les méthodes
Fenêtre permettant de gérer les méthodes

Vous constatez déjà un peu plus de bazar…

Cependant, si vous observez bien et que vous avez bien suivi la précédente partie sur la gestion des attributs, vous ne devriez pas être entièrement dépaysés. En effet, en haut, nous avons toujours notre bloc blanc qui listera, cette fois-ci, nos méthodes, ainsi que les quatre boutons à droite effectuant les mêmes opérations. Créez donc une nouvelle méthode en cliquant simplement sur le bouton Nouveau, comme pour les attributs, et bidouillons-la un peu. :)

Pour commencer, je vais parler de cette partie de la fenêtre (voir la figure suivante).

Zone permettant de modifier la méthode
Zone permettant de modifier la méthode

La partie encadrée de rouge concerne la méthode en elle-même. Les champs qui restent concernent ses paramètres, mais on verra ça juste après.

Les deux premiers champs textes (Nom et Type) ont le même rôle que pour les attributs (je vous rappelle que le type de la méthode est le type de la valeur renvoyée par celle-ci). Ensuite est présent un champ texte Stéréotype. Cela est utile pour afficher une caractéristique de la méthode. Par exemple, si une méthode est finale, on mettra leaf dans ce champ. Nous avons, comme pour les attributs, deux autres options qui refont leur apparition : la visibilité et la case à cocher Visibilité de la classe. Inutile de vous rappeler ce que c'est je pense (si toutefois vous avez un trou de mémoire, il vous suffit de remonter un tout petit peu dans ce cours). Et pour en finir sur les points communs avec les attributs, vous pouvez apercevoir tout à droite le champ texte Commentaire qui a aussi pour rôle de spécifier les commentaires relatifs à la méthode.

Par contre, contrairement aux attributs, nous avons ici deux nouvelles options. La première est Type d'héritage qui est une liste déroulante présentant trois options :

  • Abstraite : à sélectionner si la méthode est abstraite.

  • Polymorphe (virtuelle) : cela ne nous concerne pas (nous travaillons avec PHP qui n'implémente pas le concept de méthode virtuelle).

  • Feuille (finale) : à sélectionner si la méthode n'est ni abstraite, ni finale (contrairement à ce qui est indiqué, cela ne veut pas dire que la méthode est finale !).

La deuxième option est une case à cocher. À côté de celle-ci est écrit Requête. Vous vous demandez sans doute ce qu'une requête vient faire ici, non ? En fait, si vous cochez cette case, cela veut dire que la méthode ne modifiera aucun attribut de la classe. Par exemple, vos accesseurs (les méthodes étant chargées de renvoyer la valeur d'attributs privés ou protégés) sont considérés comme de simples requêtes afin d'accéder à ces valeurs. Elles pourront donc avoir cette case de cochée.

Entraînez-vous à créer des méthodes, il est toujours utile de pratiquer. :)

Maintenant que vous êtes prêts (enfin j'espère), nous allons leur ajouter des arguments. Pour cela, nous allons nous intéresser à cette partie de la fenêtre (voir la figure suivante).

Zone permettant de modifier les paramètres de la méthode
Zone permettant de modifier les paramètres de la méthode

Encore une fois, nous remarquons des ressemblances avec tout ce que nous avons vu. En effet, nous retrouvons notre bloc blanc ainsi que ses quatre boutons, toujours fidèles au rendez-vous. Inutile de vous expliquer le rôle de chacun je crois ! Au cas où vous n'ayez pas deviné, la gestion des paramètres de la méthode s'effectue à cet endroit.

Créez donc un nouveau paramètre. Les champs de droite, comme à leur habitude, se dégrisent. Je fais une brève description des fonctionnalités des champs, étant donné que c'est du déjà vu.

  • Le champ Nom indique le nom de l'argument.

  • Le champ Type spécifie le type de l'argument (entier, chaîne de caractères, tableau, etc.).

  • Le champ Val. par déf. révèle la valeur par défaut de l'argument.

  • Le champ Commentaire permet de laisser un petit commentaire concernant l'argument.

  • L'option Direction est inutile.

Gestion du style de la classe

Si vous êtes sous Windows, vous avez peut-être remarqué que tous vos attributs et méthodes ont le même style, quels que soient leurs spécificités. Pour remédier à ce problème, il faut modifier le style de la classe en cliquant sur l'onglet Style (voir la figure suivante).

Fenêtre permettant de gérer le style de la classe
Fenêtre permettant de gérer le style de la classe

Je ne pense pas que de plus amples explications s'imposent, je ne ferais que répéter ce que la fenêtre vous affiche.

Pour modifier le style de toutes les classes, sélectionnez-les toutes (en cliquant sur chacune tout en maintenant la touche Shift) puis double-cliquez sur l'une d'elle. Modifiez le style dans la fenêtre ouverte, validez et admirez. :)

Je crois avoir fait le tour de toutes les fonctionnalités. Pour vous entraîner, vous pouvez essayer de reconstituer la classe Personnage.

Modéliser les interactions

Vous avez réussi à créer une belle classe avec plein d'attributs et de méthodes. Je vais vous demander d'en créer une autre afin de les faire interagir entre elles. Nous allons voir les quatre interactions abordées dans le précédent chapitre.

Création des liaisons

L'héritage

Nous allons créer notre première interaction : l'héritage entre deux classes. Pour cela, il faut cliquer sur l'icône représentant l'interaction de l'héritage (voir la figure suivante).

Modéliser un héritage
Modéliser un héritage

Ensuite, dirigez-vous sur la partie de droite contenant vos deux classes. Cliquez sur une croix bleue de la classe mère et, tout en maintenant le clic de la souris enfoncé, glissez jusqu'à une croix bleue de votre classe fille. Lorsque vous déplacez votre flèche, le curseur prend la forme d'une croix. Une fois qu'il survole une croix bleue, il est transformé en une autre croix représentant trois chemins qui se croisent, et la classe reliée se voit entourée d'un épais trait rouge : c'est à ce moment-là que vous pouvez lâcher le clic.

Normalement, vous devriez avoir obtenu ceci (voir la figure suivante).

Modélisation d'un héritage simple
Modélisation d'un héritage simple

Alors, premières impressions ? Si vous êtes parvenus sans encombre à réaliser ce qu'on vient de faire, les quatre prochaines interactions seront toutes aussi simples !

Les interfaces

Passons maintenant à l'implémentation d'interfaces. Créez une classe banale et, histoire que les classes coordonnent avec l'interaction, écrivez interface dans le champ texte Stéréotype de la classe. Pensez aussi à décocher la case Attributs visibles.

L'icône représentant l'interaction de l'implémentation d'interface est située juste à gauche de celui de l'héritage (voir la figure suivante).

Modéliser une implémentation d'interface
Modéliser une implémentation d'interface

Comme pour la précédente interaction, cliquez sur une des croix bleues de l'interface, puis glissez la souris sur une croix bleue de la classe l'implémentant et relâchez la souris. Si tout s'est bien déroulé, vous devriez avoir obtenu ceci (voir figure suivante).

Exemple d'implémentation d'interface
Exemple d'implémentation d'interface
L'association

Voyons maintenant comment modéliser l'association. Cette icône est placée juste à droite de l'icône représentant l'héritage (voir la figure suivante).

Modéliser une association
Modéliser une association

Cliquez donc sur la croix bleue de la classe ayant un attribut stockant une instance de l'autre classe, puis glissez sur cette autre classe. Vous devriez avoir ceci sous vos yeux (voir la figure suivante).

Première étape pour créer une association
Première étape pour créer une association

Voyons maintenant comment définir l'association et placer les cardinalités. En fait, ce sont des options de l'association que l'on peut modifier en accédant à la configuration de cette liaison. Pour cela, double-cliquez sur la ligne. Vous devriez avoir obtenu cette fenêtre (voir la figure suivante).

Paramétrer l'association
Paramétrer l'association

La définition de l'association se place dans le premier champ texte correspondant au nom. Mettez-y par exemple « gère ». Les cardinalités se placent dans les champs texte Multiplicity. La première colonne « Side A » correspond à la classe qui lie l'autre classe. Dans notre exemple, « Side A » correspond à NewsManager et « Side B » à News. Si vous vous êtes bien débrouillés, vous devriez avoir obtenu quelque chose dans ce genre (voir la figure suivante).

Exemple d'une association complète
Exemple d'une association complète
L'agrégation

Intéressons-nous maintenant à la flèche représentant l'agrégation. On peut le faire de deux façons différentes. La première est la même que la précédente (j'entends par là que l'icône sur laquelle cliquer est la même). Cette fois-ci, il ne faut pas afficher le sens de la liaison et afficher un losange. Pour ce faire, il suffit de sélectionner Aggregation dans la liste déroulante Type et cliquer sur le gros bouton Oui de la ligne Show direction. La seconde solution consiste à utiliser une autre icône qui construira directement la flèche avec le losange. En réalité, il s'agit simplement d'un raccourci de la première solution.

Cette icône se trouve juste à droite de la précédente (voir la figure suivante).

Modéliser une agrégation
Modéliser une agrégation

Je pense qu'il est inutile de vous dire comment lier vos deux classes étant donné que le principe reste le même. ;)

La composition

Enfin, terminons par la composition. La composition n'a pas d'icône pour la représenter. Vous pouvez soit cliquer sur l'icône de l'association, soit cliquer sur l'icône de l'agrégation (cette dernière est à préférer dans le sens où une composition se rapproche beaucoup plus d'une agrégation que d'une association). Reliez vos classes comme nous l'avons fait jusqu'à maintenant puis double-cliquez sur celles-ci. Nous allons regarder la même liste déroulante que celle utilisée dans l'agrégation : je parle de la liste déroulante Type. À l'intérieur de celle-ci, choisissez l'option Composition puis validez.

Exercice

Vous avez désormais accumulé toutes les connaissances pour faire un diagramme complet. Je vais donc vous demander de me reconstituer le diagramme que je vous ai donné au début (voir la figure suivante).

Diagramme modélisant le dernier TP
Diagramme modélisant le dernier TP

Exploiter son diagramme

Vous avez maintenant un diagramme conséquent avec un grand nombre d'interactions, mais qu'allez-vous en faire ? Je vais ici vous expliquer comment exporter votre diagramme dans deux formats différents bien pratiques. L'un sera sous forme d'image, l'autre sous forme de code PHP.

Enregistrer son diagramme

Avant toute exportation, il faut sauvegarder son diagramme, sinon cela ne fonctionnera pas. Pour ce faire, cliquez sur le menu Fichier puis cliquez sur Enregistrer (voir la figure suivante).

Enregistrer le diagramme par le menu
Enregistrer le diagramme par le menu

Ou cliquez sur cette icône (voir la figure suivante).

Enregistrer le diagramme par la barre d'outils
Enregistrer le diagramme par la barre d'outils

Cette fenêtre s'ouvre à vous (voir la figure suivante).

Fenêtre permettant d'enregistrer le diagramme
Fenêtre permettant d'enregistrer le diagramme

Tout est écrit en français, je ne pense pas avoir besoin d'expliquer en détails. Cette fenêtre contient un explorateur. À gauche sont listés les raccourcis menant aux dossiers les plus courants (le bureau, les documents, ainsi que les disques), tandis qu'à droite sont listés tous les fichiers et dossiers présents dans celui où vous vous trouvez (dans mon cas, le dossier est vierge).

Le champ texte situé tout en haut contient le nom du fichier sous lequel doit être enregistré le diagramme. Une fois que vous avez bien tout paramétré, cliquez sur Enregistrer. Votre diagramme est maintenant enregistré au format .dia.

Exporter son diagramme

Sous forme d'image

Nous avons enregistré notre diagramme, nous sommes maintenant fin prêts à l'exporter. Pour obtenir une image de ce diagramme, nous allons cliquer sur Exporter dans le menu Fichier (voir la figure suivante).

Exporter le diagramme par le menu
Exporter le diagramme par le menu

Ou cliquez sur cette icône (voir la figure suivante).

Exporter le diagramme par la barre d'outils
Exporter le diagramme par la barre d'outils

Une fenêtre semblable à celle de l'enregistrement du diagramme apparaît. Cependant, il y a une liste déroulante qui a fait son apparition (voir la figure suivante).

Déterminer le type du fichier
Déterminer le type du fichier

Pour exporter votre diagramme sous forme d'image, vous avez deux possibilités. Soit vous placez l'extension .png à la fin du nom de votre image en haut, soit, dans la liste déroulante, vous sélectionnez l'option Pixbuf[png] (*.png). Avec cette deuxième solution, le champ texte du haut contiendra le nom de votre image avec l'extension .png. Cliquez sur Enregistrer, puis contemplez votre image générée. Pas mal, n'est-ce pas ? :)

Sous forme de code PHP

Au début, la marche à suivre reste la même, c'est-à-dire qu'il faut aller dans le menu Fichier puis cliquer sur Exporter. Cette fois-ci, nous allons choisir une autre option (logique :p ). Vous pouvez là aussi réaliser l'opération de deux façons. Soit vous placez à la fin du nom du diagramme l'extension .code, soit vous sélectionnez Filtre de transformation XSL (*.code) dans la liste déroulante. Cliquez sur Enregistrer. Cette nouvelle fenêtre apparaît (voir la figure suivante).

Déterminer le langage dans lequel sera exporté le diagramme
Déterminer le langage dans lequel sera exporté le diagramme

Dans la première liste déroulante, choisissez UML-CLASSES-EXTENDED. Dans la seconde liste, choisissez PHP5 puis cliquez sur Valider. Regardez les nouveaux fichiers générés dans votre dossier. Alors, ça en jette non ? :)

En résumé

  • Dia est un logiciel permettant de créer facilement des diagrammes UML.

  • Ce logiciel a l'avantage de pouvoir exporter vos diagrammes en images et en codes PHP.

  • La modélisation grâce à UML est très appréciée dans le milieu professionnel, n'en ayez pas peur !

Vous êtes demandeur d'emploi ?
Sans diplôme post-bac ?

Devenez Développeur web junior

Je postule
Formation
en ligne
Financée
à 100%
Exemple de certificat de réussite
Exemple de certificat de réussite