Introduction - Diagramme de classe UML
Je pense que tout le monde a déjà entendu le dicton « Mieux vaut prévenir que guérir ». Ce conseil s'applique aussi en programmation. Il est toujours préférable de songer à l'implémentation avant de passer du temps à la réaliser. Lors de l'implémentation, tu as souvent besoin de créer des classes et de réfléchir à la façon dont elles vont interagir. Une représentation visuelle de tout cela peut souvent t'aider à trouver la solution la plus juste. C'est là qu'UML vole à notre secours.Qu'est-ce qu'UML ?
Les images des résultats des moteurs de recherche te diront qu'un diagramme de classe UML comporte des flèches et des carrés. L'abréviation « diagramme UML » signifie Diagramme en Langage de Modélisation Unifié. Unifié est le mot important ici. Cela signifie que nos images seront comprises non seulement par nous, mais aussi par toute autre personne qui connaît le langage UML. C'est la langue véhiculaire pour dessiner des diagrammes. D'après Wikipédia,« Le Langage de Modélisation Unifié, de l'anglais Unified Modeling Language (UML), est un langage de modélisation graphique à base de pictogrammes conçu pour fournir une méthode normalisée pour visualiser la conception d'un système. » |
Application - Diagramme UML
Découvrons comment travailler avec les diagrammes de classe UML dans un EDI. Nous allons utiliser IntelliJ IDEA. Si tu utilises IntelliJ IDEA Ultimate, tu auras le plug-in « UML Support » installé d'office. Il te permet de générer automatiquement de beaux diagrammes de classes. Par exemple, utilise Ctrl+N ou l'élément de menu « Navigate » > « Class » pour accéder à la classe ArrayList. Maintenant, dans le menu contextuel du nom de classe, sélectionne « Diagram » -> « Show diagram popup ». Et tu te retrouves avec un beau diagramme.

@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
Pour voir le résultat dans IDEA, sélectionne « View » -> « Tool Windows » -> « PlantUML ». Nous n'avons que deux carrés qui représentent les classes.
Nous savons que ces deux classes implémentent l'interface List. Cette relation de classe s'appelle réalisation. Cette relation est représentée à l'aide d'une flèche avec une ligne pointillée. Dessinons-la :
interface List
List <|.. ArrayList
List <|.. LinkedList
List est un des enfants de la classe Collection. C'est-à-dire qu'elle hérite de Collection. Cette relation s'appelle généralisation. Elle ressemble à une flèche avec une ligne continue ordinaire. Dessinons-la :
interface Collection
Collection <|-- List
Pour le type de relation suivant, ajoute à la description de la classe ArrayList une entrée sur un tableau d'éléments package private :
~Object[] elementData
Maintenant, nous voulons montrer qu'ArrayList contient des objets. Dans ce cas, il y aura une relation d'agrégation.
ArrayList est un agrégat, car il contient d'autres objets. Nous disons agrégation, car les objets de la liste peuvent exister sans la liste : ils ne font pas partie intégrante de la liste. Leur durée de vie n'est pas liée à celle de la liste. Le mot « agrégat » nous vient du latin et se traduit par « assemblage », c'est-à-dire quelque chose fait de quelque chose. Par exemple, dans la vie, nous avons un assemblage de pompe (agrégat), qui se compose d'une pompe et d'un moteur. L'assemblage lui-même peut être démonté, et nous pouvons utiliser certains de ses composants séparément. Par exemple, pour les vendre ou les utiliser dans un autre assemblage. C'est la même chose dans une liste. Elle est exprimée avec un losange vide au niveau de l'agrégat et une ligne continue. Nous allons représenter cela comme suit :
class Object {
}
ArrayList o- Object
Maintenant, nous voulons montrer que contrairement à ArrayList, la classe LinkedList contient des nœuds, des conteneurs qui font référence aux données stockées. Dans ce cas, les nœuds font partie de LinkedList et n'ont pas d'existence indépendante. Un nœud n'est pas le contenu lui-même. Il ne contient qu'une référence au contenu. Par exemple, lorsque nous ajoutons une chaîne à une LinkedList, nous ajoutons un nouveau nœud qui contient une référence à la chaîne, ainsi qu'un lien vers les nœuds précédent et suivant.
Cette relation s'appelle composition. Elle est représentée en dessinant une ligne continue avec un losange rempli sur le composite (quelque chose fait de parties constitutives). Maintenant, nous allons représenter la relation sous forme de texte :
class Node {
}
LinkedList *-- Node
Et maintenant, tu dois apprendre à dépeindre un autre type important de relation : la dépendance. Elle est utilisée lorsqu'une classe en utilise une autre, mais que la classe ne contient ni n'hérite de la classe utilisée. Par exemple, LinkedList et ArrayList savent comment créer un ListIterator. Nous représentons cela sous forme de flèches avec une ligne pointillée :
class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
Après avoir fait tout cela, nous obtenons : 
Automatisation
Il existe différentes façons de générer automatiquement un schéma UML avec PlantUML. Par exemple, IDEA dispose du plugin SketchIT, mais il ne dessine pas les diagrammes tout à fait correctement. Disons que l'implémentation des interfaces est mal dessinée (elle est représentée sous forme d'héritage). Sur Internet, tu trouveras des exemples sur la façon d'intégrer cela dans le processus de construction de ton projet. Par exemple, tu peux découvrir comment utiliser uml-java-docklet avec Maven. Pour te montrer cela, nous allons utiliser Maven Archetype pour créer rapidement un projet Maven. Exécutionmvn archetype:generate
En réponse à Choose a number or apply filter, laisse la valeur par défaut, et appuie simplement sur Entrée. Ce sera toujours « maven-archetype-quickstart ». Sélectionne la dernière version. Ensuite, nous répondons à quelques questions et terminons la création du projet : 
mvn clean install
et
mvn javadoc: javadoc
Si nous ouvrons maintenant la documentation générée (explorer target\site\apidocs\index.html), nous verrons les diagrammes UML. Soit dit en passant, la relation d'implémentation s'affiche maintenant correctement :)Conclusion
Comme tu peux le voir, UML te permet de visualiser la structure de ton application. Mais UML peut faire beaucoup plus que cela. Tu peux utiliser UML pour décrire divers processus au sein de ton entreprise ou le fonctionnement du processus d'affaires qui englobe une fonction que tu écris. Tu devras découvrir toi-même comment UML pourra t'aider personnellement, mais peu importe ce que tu choisis, il sera toujours utile de trouver le temps d'en apprendre plus à son sujet.Cet article est également disponible en anglais: |
---|
Read the English version of this article to gain insights into UML diagrams. When you understand the conventions of UML class diagrams, you can quickly and reliable communicate important class properties, behaviors, and relationships. |

GO TO FULL VERSION