Diagrammes de composants UML
Le système comme un ensemble de pièces remplaçables et les contrats entre elles. Ce que chaque pièce offre, ce dont elle a besoin, et - la partie utile - ce qu'il faudrait respecter pour en remplacer une.
13 min de lectureUML 2.5.117 sur 35
La réponse courte
- Un composant est une unité remplaçable dotée d'un contrat défini - quelque chose que vous pourriez mettre en appel d'offres - pas simplement une grosse classe.
- Chaque composant porte deux listes : ce qu'il fournit et ce qu'il requiert. C'est la moitié requise qu'on oublie, et c'est elle qui porte les dépendances.
- Une boule sur une tige est une interface fournie, une demi-coupe une interface requise, et la boule posée dans la coupe les relie.
- Un composant est logique, un nœud est physique. Dès qu'une boîte reçoit un nom d'hôte ou un nombre d'instances, vous dessinez un diagramme de déploiement.
01Ce qu'il montre#
Un diagramme de composants décrit un système comme un ensemble de pièces remplaçables. Un composant en UML n'est pas n'importe quelle classe : c'est une unité à frontière définie qui pourrait, en principe, être échangée contre une autre implémentation des mêmes contrats sans que rien autour ne s'en aperçoive.
Toute la valeur est dans cette définition. Le diagramme vous force à noter, pour chaque pièce, exactement deux choses : ce qu'elle fournit et ce qu'elle requiert. Ces deux listes sont le contrat de la pièce avec le reste du système, et c'est précisément ce dont vous avez besoin pour planifier une migration, cadrer une réécriture ou décider si une frontière de service est au bon endroit.
02La notation#
| Élément | Notation | Ce que cela signifie |
|---|---|---|
| Composant | rectangle avec l'icône de prise | Une unité remplaçable. L'icône dans le coin est la forme UML 2 ; l'ancienne mettait l'icône à la place de la boîte. |
| Interface fournie | Le composant implémente ce contrat. Tracée en réalisation vers une «interface», ou en boule sur une tige. | |
| Interface requise | Le composant a besoin que quelqu'un la fournisse. Tracée en dépendance, ou en douille - une demi-coupe sur une tige. | |
| Connecteur d'assemblage | une boule posée dans une douille | L'interface fournie d'un composant branchée sur l'interface requise d'un autre. La forme compacte des deux lignes ci-dessus. |
| Port | petit carré sur la frontière | Un point d'interaction nommé. À utiliser quand un composant a plusieurs canaux distincts - une API publique et une API d'administration, par exemple. |
| Connecteur de délégation | D'un port à l'extérieur vers une partie à l'intérieur : ce contrat externe est en réalité assuré par cette pièce interne. |
La forme boule et douille (ball and socket) est la forme compacte et celle que la plupart des outils tracent par défaut : une sucette qui sort d'un composant est une interface qu'il fournit, une demi-coupe une interface qu'il requiert, et une boule posée dans une douille, les deux branchées ensemble. C'est la même information que les flèches ci-dessus, en moins de place. Prenez celle que vos lecteurs déchiffrent le plus facilement ; restez cohérent au sein d'un diagramme.
Toutes les marques que ce type de diagramme peut porter - les deux notations d'interface, les connecteurs d'assemblage et de délégation, les ports et les quatre stéréotypes qui valent la peine - sont exposées dans les symboles du diagramme de composants.
03Quelle taille fait un composant ?#
C'est la question sur laquelle bute tout premier diagramme de composants, et la spécification n'aide pas : UML dit qu'un composant est une unité remplaçable dotée d'un contrat défini et vous laisse entièrement la taille. Bonne réponse pour une norme, inutile devant un tableau blanc ; voici donc la règle de travail.
Un composant, c'est ce que vous pourriez mettre en appel d'offres. Si vous pouvez imaginer tendre à une autre équipe les listes d'interfaces fournies et requises en disant « construisez ça, nous ne regarderons pas dedans », c'est un composant. Si cette remise exigeait une conversation sur les entrailles, la frontière est au mauvais endroit - et c'est là le constat, pas un problème de dessin à contourner.
En pratique cela tombe le plus souvent sur l'un de ces niveaux, et lequel vous dit à quoi sert le diagramme.
- Un service déployable. Un dépôt, un pipeline, une astreinte. La réponse la plus courante pour tout ce qui a été construit ces dix dernières années, et le niveau auquel il vaut la peine de garder le diagramme dans le dépôt.
- Une bibliothèque ou un module. À l'intérieur d'un déployable, quand le débat porte sur la structure interne - quel paquet peut dépendre de quel. Là, un diagramme de paquets dit souvent la même chose à moindre coût.
- Un système entier. Le mainframe, le CRM, le prestataire de paiement. Le niveau du diagramme de contexte, où l'enjeu est ce dont vous dépendez et non la façon dont c'est construit.
Mélanger deux de ces niveaux sur un même diagramme est l'erreur qui produit les diagrammes de composants tentaculaires dont les gens se souviennent. Une image avec trois microservices, une bibliothèque utilitaire et « SAP » dessus, ce sont trois diagrammes superposés, et aucun lecteur ne peut dire quelles boîtes sont des pairs.
04Bien le lire#
La technique de lecture la plus utile consiste à couvrir un composant avec la main. Ce qui reste est son contrat : les interfaces qui y étaient attachées. Si vous pouvez tendre cette liste à une autre équipe en disant « construisez quelque chose qui satisfait ça », le diagramme fait son travail. Sinon - si remplacer le composant exigeait de connaître des choses non dessinées - la frontière est au mauvais endroit, et cela vaut la peine de le savoir avant que quelqu'un n'essaie.
La deuxième technique consiste à suivre les interfaces requises. Chacune est une dépendance que quelqu'un doit satisfaire, et un cycle dans ce graphe est un vrai problème d'architecture qu'un diagramme de composants rend immédiatement visible.
Les deux techniques se voient mieux appliquées que décrites. Cinq diagrammes de systèmes sur lesquels vous avez probablement travaillé - un catalogue partagé, ports et adaptateurs, le remplacement d'un système hérité, un hôte de plugins et un cycle - sont parcourus dans les exemples de diagrammes de composants, chacun avec la question qu'il tranche.
05Quelle boîte suis-je en train de dessiner ?#
Cinq types de diagrammes sont des rectangles reliés par des traits, et toute la différence tient à ce qu'est un rectangle. Se tromper de type est l'erreur la plus coûteuse disponible ici, car le diagramme aura l'air correct et répondra à une question que personne n'a posée.
| Élément | Notation | Ce que cela signifie |
|---|---|---|
| Composants | une unité remplaçable | Les boîtes sont des choses échangeables contre une autre implémentation du même contrat. Les traits sont des interfaces fournies et requises. Répond : que promet chaque pièce, et de quoi a-t-elle besoin ? |
| Classes | un type | Les boîtes sont des types dans le code. Les traits sont des associations, généralisations et dépendances. Répond : quelle est la forme du code ? Voir le diagramme de classes. |
| Paquets | un espace de noms | Les boîtes sont des regroupements - dossiers, espaces de noms, modules. Les traits sont des dépendances autorisées. Répond : qu'est-ce qui a le droit d'importer quoi ? |
| Déploiement | un nœud | Les boîtes sont des machines, des conteneurs et des runtimes. Les traits sont des chemins de communication. Répond : où cela tourne-t-il réellement et par quoi ? Voir le diagramme de déploiement. |
| Structure composite | une partie dans un tout | Les boîtes sont les parties dont un classifieur est fait, dessinées dedans. Répond : de quoi cette chose est-elle faite à l'intérieur ? |
Le même rectangle dans cinq notations. Lisez la colonne du milieu avant de dessiner : c'est la phrase dont le diagramme entier est la réponse.
La question qui revient le plus est composants contre déploiement, et la séparation est nette une fois énoncée : un composant est une unité logique et un nœud une unité physique. Un composant peut tourner sur quarante nœuds ; un nœud peut héberger une douzaine de composants. Dès qu'une boîte de votre diagramme de composants acquiert une région, un nombre d'instances ou un nom d'hôte, elle a cessé d'être un composant et le diagramme est discrètement devenu deux.
Si vous connaissez C4, son diagramme de conteneurs se situe presque exactement là où un diagramme de composants au niveau du service déployable, et son propre niveau « composant » est un cran plus profond que ce qu'UML entend d'ordinaire. Les vocabulaires ne s'alignent pas : indiquez sur le diagramme lequel vous utilisez, cette ligne de légende évite la plupart des disputes.
06Quand en dessiner un#
À utiliser quand
- Définir des frontières de service avant de scinder ou fusionner des systèmes
- Documenter ce qu'une équipe possède et ce qu'elle attend des autres
- Planifier un remplacement - le contrat est exactement ce que le nouveau doit satisfaire
- Vérifier si les dépendances circulent comme l'architecture le prétend
Préférer autre chose quand
- Vous parlez de machines et de processus physiques - prenez un diagramme de déploiement
- Vous parlez de l'intérieur d'un composant - prenez un diagramme de structure composite
- Les pièces sont des classes, pas des unités remplaçables - prenez un diagramme de classes
- Il y a trois services et tout le monde sait déjà comment ils se connectent
Les diagrammes de composants vieillissent bien, ce qui est rare. Les interfaces changent beaucoup plus lentement que le code derrière, si bien qu'un diagramme de composants versionné reste vrai bien plus longtemps qu'un diagramme de classes du même système - et mérite d'autant plus d'être maintenu.
07Erreurs courantes#
- Des composants qui sont en réalité des classes. Si cela ne peut pas plausiblement être remplacé indépendamment, ce n'est pas un composant. Utilisez un diagramme de classes.
- Seules les interfaces fournies dessinées. Les requises portent l'information de dépendance, qui est la moitié la plus utile.
- Des flèches entre composants sans interface. Une flèche nue dit « dépend d'une manière ou d'une autre », ce que ce diagramme existe précisément pour préciser.
- Mélanger du déploiement. Serveurs, régions et conteneurs appartiennent à un diagramme de déploiement.
- Des interfaces nommées d'après le fournisseur.
ILedgerconvient tant qu'il n'y a qu'un grand livre ; dès qu'il peut y avoir deux implémentations, nommez le contrat d'après la capacité, pas d'après le fournisseur actuel.
En une ligne chacun
- 01Un composant est une unité remplaçable dotée d'un contrat défini, pas une grosse classe.
- 02Chaque composant a deux listes : ce qu'il fournit et ce qu'il requiert.
- 03La réalisation (triangle creux, pointillés) pointe vers l'interface implémentée.
- 04La dépendance (flèche ouverte, pointillés) pointe vers l'interface requise.
- 05Boule et douille est la forme compacte de la même information.
- 06Couvrez un composant de la main : ce qui reste est ce qu'un remplaçant doit satisfaire.
08Questions fréquentes#
Qu'est-ce que la notation rotule et cavité ?
L'abréviation pour les interfaces. Une interface fournie est une sucette, un petit cercle au bout d'une tige. Une interface requise est une cavité, un demi-cercle. Emboîter la rotule dans la cavité montre qu'un composant satisfait la dépendance d'un autre, sans dessiner l'interface comme une classe.
Quelle différence entre diagramme de composants et de classes ?
Un diagramme de classes montre les types et leur structure interne. Un diagramme de composants montre des unités déployables et remplaçables, ainsi que les contrats entre elles, et masque délibérément ce qu'il y a dedans. Il répond à : que faudrait-il respecter pour remplacer une pièce.
Qu'est-ce qu'un port en UML ?
Un petit carré sur la bordure d'un composant, représentant un point d'interaction distinct. Les ports permettent à un composant d'exposer plusieurs interfaces séparées - une API d'administration et une API publique, par exemple - plutôt qu'une surface indifférenciée.
Quand dessiner un diagramme de composants ?
Quand le système comporte des pièces que l'on pourrait plausiblement remplacer ou acheter plutôt que construire, et que la question intéressante est l'interface entre elles. Si rien n'est remplaçable, le diagramme ne fait que redire la structure des paquetages.
Dans cette série
- 01Qu'est-ce que UML ?
- 02Symboles UML
- 03Choisir un diagramme
- 04Diagrammes de classes
- 05Exemples de diagrammes de classes
- 06Dessiner un diagramme de classes
- 07Symboles du diagramme de classes
- 08Diagrammes de séquence
- 09Exemples de diagrammes de séquence
- 10Dessiner un diagramme de séquence
- 11Diagrammes de cas d'utilisation
- 12Exemples de cas d'utilisation
- 13Diagrammes d'activité
- 14Exemples d'activité
- 15Diagrammes états-transitions
- 16Exemples d'états-transitions
- 17Diagrammes de composants
- 18Exemples de composants
- 19Dessiner un diagramme de composants
- 20Symboles de composants
- 21Diagrammes de déploiement
- 22Exemples de déploiement
- 23Diagrammes d'objets
- 24Diagrammes de paquetages
- 25Diagrammes de structure composite
- 26Diagrammes de communication
- 27Séquence vs communication
- 28Diagrammes de temps
- 29Diagrammes globaux d'interaction
- 30Diagrammes de profil
- 31UML avec l'IA
- 32Exemple e-commerce
- 33Exemple bancaire
- 34Exemple microservices
- 35Exemple AWS
À lire aussi
Diagrammes de structure
Pratique de la modélisation
Référence de notation
Diagrammes de structure
Diagrammes de structure
Diagrammes de structure