JavaRush /Blog Java /Random-FR /UML : de la théorie à la pratique
Viacheslav
Niveau 3

UML : de la théorie à la pratique

Publié dans le groupe Random-FR

Introduction

Je pense que tout le monde a entendu dans son enfance un dicton tel que « Mesurer deux fois, couper une fois ». C'est la même chose en programmation. Il est toujours préférable de réfléchir à la mise en œuvre avant de consacrer du temps à son exécution. Souvent, lors de la mise en œuvre, il faut créer des classes et inventer leur interaction. Et souvent, une représentation visuelle de cela peut aider à résoudre le problème de la manière la plus correcte. C'est là qu'UML nous aide .

Qu’est-ce qu’UML ?

Si vous regardez des images dans les moteurs de recherche, vous verrez clairement qu'UML est une question de diagrammes, de flèches et de carrés. Ce qui est important, c'est qu'UML se traduise en langage de modélisation unifié . Le mot Unifié est important ici. Autrement dit, nos images seront comprises non seulement par nous, mais aussi par d'autres personnes connaissant UML. Il s'avère qu'il s'agit d'un langage international pour dessiner des diagrammes.

UML : de la théorie à la pratique - 1

Comme le dit Wikipédia

UML est un langage de description graphique pour la modélisation d'objets dans le développement de logiciels, la modélisation de processus métier, la conception de systèmes et l'affichage des structures organisationnelles.
La chose la plus intéressante à laquelle tout le monde ne pense ou ne se rend pas compte est qu'UML a des spécifications. De plus, il existe même une spécification UML2. Plus de détails sur la spécification peuvent être trouvés sur le site Web d'Object Management Group . Actuellement, ce groupe développe des spécifications UML. Il est également intéressant de noter qu’UML ne se limite pas à décrire la structure des classes. Il existe de nombreux types de diagrammes UML. Une brève description des types de diagrammes UML peut être vue dans le même Wikipédia : Diagrammes UML ou dans la vidéo de Timur Batyrshinov Revue des diagrammes UML . UML est également largement utilisé pour décrire divers processus, par exemple ici : Single sign-on using JWT . Revenant à l'utilisation des diagrammes de classes UML, il convient de noter le livre Head First: Design Patterns , dans lequel les modèles sont illustrés par ces mêmes diagrammes UML. Il s’avère qu’UML est effectivement utilisé. Et il s'avère que la connaissance et la compréhension de son application sont une compétence très utile.

Application

Voyons comment vous pouvez travailler avec ce même UML depuis l'EDI. Prenons IntelliJ Idea comme un IDE . Si nous utilisons IntelliJ Idea Ultimate , le plugin « UML Support » sera installé prêt à l'emploi. Il vous permet de générer automatiquement de superbes diagrammes de classes. Par exemple, en utilisant Ctrl+N ou l'élément de menu "Navigate" -> "Class", nous accédons à la classe ArrayList . Maintenant, via le menu contextuel du nom de la classe, sélectionnez « Diagramme » -> « Afficher la fenêtre contextuelle du diagramme ». En conséquence, nous obtenons un beau schéma :
UML : de la théorie à la pratique - 2
Mais que se passe-t-il si vous voulez le dessiner vous-même et que vous n’avez même pas la version Ultimate d’Idea ? Si nous utilisons IntelliJ Idea Community Edition, nous n'avons pas d'autre choix. Pour ce faire, vous devez comprendre comment un tel diagramme UML est structuré. Tout d’abord, nous devrons installer Graphviz . Il s'agit d'un ensemble d'utilitaires permettant de visualiser des graphiques. Il est utilisé par le plugin que nous allons utiliser. Après l'installation, vous devez ajouter le répertoire bin du répertoire d'installation de Graphviz à votre variable d'environnement PATH . Après cela, dans IntelliJ Idea, sélectionnez Fichier -> Paramètres dans le menu. Dans la fenêtre "Paramètres", sélectionnez la catégorie "Plugins", cliquez sur le bouton "Parcourir les référentiels" et installez le plugin d'intégration PlantUML . Pourquoi PlantUML est-il si bon ? Il utilise un langage de description de graphes appelé " dot " pour décrire UML et cela lui permet d'être plus universel, car... Ce langage n'est pas utilisé uniquement par PlantUML. De plus, tout ce que nous faisons ci-dessous peut être fait non seulement dans l'EDI, mais également dans le service en ligne planttext.com . Après avoir installé le plugin PlantUML, nous pourrons créer des diagrammes UML via « Fichier » -> « Nouveau ». Créons un diagramme de type "Classe UML". Au cours de ce processus, un modèle avec un exemple est automatiquement généré. Supprimons son contenu et créons le nôtre, armés d'un article de Habr : Relations de classe - de l'UML au code . Et pour comprendre comment décrire cela dans le texte, prenons le manuel PlantUML : plantuml class-diagram . Au tout début, il y a un tableau montrant comment les connexions doivent être décrites :
UML : de la théorie à la pratique - 3
Nous pouvons également examiner les connexions elles-mêmes ici : " Relations entre les classes dans UML. Exemples ". Sur la base de ces matériaux, commençons à créer notre diagramme UML. Ajoutons le contenu suivant décrivant les deux classes :

@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
Pour voir le résultat dans Idea, sélectionnez "Affichage" -> "Tool Windows" -> "PlantUML". Nous aurons juste deux carrés représentant les classes. Comme nous le savons, ces deux classes implémentent l'interface List. Cette relation de classe est appelée implémentation. Pour représenter une telle connexion, utilisez une flèche avec une ligne pointillée. Représentons-le :
interface List
List <|.. ArrayList
List <|.. LinkedList
List- une des classes enfants Collection. Autrement dit, il hérite de Collection. Cette connexion est appelée généralisation. Cela ressemble à une flèche avec une ligne continue régulière. Représentons-le :
interface Collection
Collection <|-- List
Pour le type de connexion suivant, ajoutez à la description de la classe ArrayListune entrée sur le tableau privé d'éléments du package :
~Object[] elementData
Nous voulons maintenant montrer ce que ArrayListcontiennent certains objets. Dans ce cas, le type de connexion sera agrégation . L'unité dans ce cas est ArrayList, car il contient d'autres objets. Nous choisissons l'agrégation car les objets de la liste peuvent vivre sans la liste : ils n'en font pas partie intégrante. Leur durée de vie n'est pas liée à celle de la liste. Agrégat est traduit du latin par « assemblé », c'est-à-dire quelque chose composé de quelque chose. Par exemple, dans la vie, il existe une unité de pompage composée d’une pompe et d’un moteur. L'unité elle-même peut être démontée, laissant certains de ses composants. Par exemple, pour vendre ou mettre dans une autre unité. La liste aussi. Et cela s'exprime sous la forme d'un losange vide à proximité de l'unité et d'une ligne continue. Représentons-le comme ceci :
class Object{
}
ArrayList o- Object
Nous voulons maintenant montrer que, contrairement à ArrayList, la classe LinkedListcontient Nodedes conteneurs qui font référence aux données stockées. Dans ce cas, Nodeils font partie d’eux-mêmes LinkedListet ne peuvent pas vivre séparément. Noden'est pas un contenu directement stocké, mais contient uniquement un lien vers celui-ci. Par exemple, lorsque nous ajoutons à LinkedListune ligne, nous ajoutons un new Node, qui contient un lien vers cette ligne, ainsi qu'un lien vers le previous et le next Node. Ce type de communication est appelé composition . Pour afficher un composite (constitué de pièces), un losange coloré est dessiné, avec une ligne continue qui y mène. Écrivons maintenant ceci sous la forme d'un affichage textuel de la connexion :
class Node{
}
LinkedList *-- Node
Et maintenant, nous devons apprendre à afficher un autre type important de relation : la relation de dépendance . Il est utilisé lorsqu'une classe en utilise une autre et que la classe ne contient pas la classe utilisée et n'est pas son descendant. Par exemple, LinkedListils ArrayListsavent créer des ListIterator. Affichons cela sous forme de flèches avec une ligne pointillée :
class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
Après tout cela, cela ressemblera à ceci :
UML : de la théorie à la pratique - 4
Vous pouvez entrer dans autant de détails que nécessaire. Toutes les désignations sont indiquées ici : " PlantUML - Class Diagram ". De plus, il n'y a rien de surnaturel à dessiner un tel schéma, et lorsque vous travaillez sur vos tâches, vous pouvez rapidement le dessiner à la main. Cela développera vos compétences en matière de réflexion sur l'architecture des applications et vous aidera à identifier les défauts de la structure des classes dès le début, plutôt qu'après avoir passé la journée à implémenter le mauvais modèle. Je pense que c'est une bonne raison pour essayer ? )
UML : de la théorie à la pratique - 5

Automatisation

Il existe différentes manières de générer automatiquement des diagrammes PlantUML. Par exemple, Idea dispose d’un plugin SketchIT , mais il ne les dessine pas tout à fait correctement. Par exemple, l'implémentation des interfaces est mal dessinée (affichée comme héritage). Il existe également des exemples sur Internet montrant comment intégrer cela dans le cycle de vie de votre projet. Disons qu'il existe un exemple pour Maven utilisant uml-java-docklet . Pour montrer comment cela se fait, nous utiliserons Maven Archetype pour créer rapidement un projet Maven. Exécutons la commande : mvn archetype:generate Lorsqu'on vous demande de sélectionner un filtre ( Choisir un nombre ou appliquer un filtre ), laissez la valeur par défaut en appuyant simplement sur Entrée. Ce sera toujours " maven-archetype-quickstart ". Sélectionnez la dernière version. Ensuite, nous répondons aux questions et terminons la création du projet :
UML : de la théorie à la pratique - 6
Étant donné que Maven n'est pas le sujet de cet article, les réponses à vos questions Maven peuvent être trouvées dans le Centre des utilisateurs Maven . Dans le projet généré, ouvrez le fichier de description du projet, pom.xml, pour le modifier . Copions le contenu de la description de l'installation de uml-java-docklet dedans . L'artefact utilisé dans la description est introuvable dans le référentiel Maven Central. Mais cela a fonctionné pour moi avec ceci : https://mvnrepository.com/artifact/com.chfourie/uml-java-doclet/1.0.0 . Autrement dit, dans cette description, il vous suffit de remplacer le groupId de « info.leadinglight » par « com.chfourie » et de définir la version sur « 1.0.0 ». Après cela, nous pouvons exécuter ces commandes dans le répertoire où se trouve le fichier pom.xmlmvn clean install : et mvn javadoc:javadoc. Maintenant, si nous ouvrons la documentation générée (explorer target\site\apidocs\index.html), nous verrons les diagrammes UML. D'ailleurs, l'implémentation est déjà affichée correctement ici)

Conclusion

Comme vous pouvez le constater, UML vous permet de visualiser la structure de votre application. De plus, UML ne se limite pas à cela. Grâce à UML, vous pouvez décrire divers processus au sein de votre entreprise ou décrire le processus métier dans lequel opère la fonction que vous écrivez. C'est à vous de décider de l'utilité d'UML pour vous personnellement, mais prendre le temps de le lire plus en détail sera utile dans tous les cas. #Viacheslav
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION