• 4 heures
  • Facile

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 21/02/2022

Définissez un glossaire commun à partir d'un diagramme de classes

Si vous décidez finalement d'utiliser un code orienté objet pour votre système, vous devez déterminer les classes à partir desquelles créer les objets. Mais où chercher les classes dont vous avez besoin ? 🤷‍♀️

Dans votre modèle de domaine ! 

Travaillez à partir des descriptions de vos cas d’utilisation (use cases) pour préparer vos classes avec un diagramme de classes. Nous verrons ensemble qu'un diagramme de classes est constitué d'un ensemble de classes et de leurs relations. Alors, au travail !

Étape : identifiez vos noms

Comme nous l'avons vu dans la première partie, la description d'un cas d'utilisation sert à décrire une succession d'interactions entre l'utilisateur et le programme. Elle peut être aussi détaillée que vous le souhaitez. C'est assez simple. L'utilisateur fait quelque chose, le programme répond. Encore et encore, jusqu'à ce que l'objectif soit atteint.

Vous vous souvenez du cas d'utilisation « Rechercher un livre ». Listons ensemble les résultats du programme en détail. Ici, comme ce sont les noms qui nous intéressent (comme vous l'aviez peut-être deviné avec le nom du chapitre 👋), nous pouvons les mettre en gras :

  • l'utilisateur fait une requête pour chercher un livre ;

  • le programme affiche la page de recherche ;

  • l'utilisateur saisit le nom de l'auteur ;

  • le système vérifie que le nom de l'auteur existe ;

  • l'utilisateur saisit le titre du livre ;

  • l'utilisateur lance la requête ;

  • le système exécute la recherche ;

  • le programme affiche les résultats :

    • une série de livres qui correspondent,

    • une image de la couverture de chaque livre,

    • une courte biographie de l'auteur,

    • une image de l'auteur.

Ici, le travail est déjà fait, mais quand vous préparez votre diagramme de classes, c'est à vous d'écrire ces interactions, puis de repérer les noms

Nous pouvons en repérer deux sortes : complexe ou simple. Si le nom est complexe (c'est-à-dire qu'il est impossible à décrire en un mot ou deux), il s'agit probablement d'une classe. Si c'est un nom simple, il s'agira probablement d'un attribut de classe.

Mais dans mon exemple de la bibliothèque, ça donne quoi ? 🧐

J'y viens !

La classe à laquelle on pense en premier ici est celle du livre, avec plusieurs éléments qui lui sont associés (auteur, titre). Il ne peut pas être représenté sous la forme d'un entier ou d'une chaîne de caractères. En revanche, le titre est suffisamment simple pour être représenté par une chaîne de caractères. Félicitations, ce sera donc un attribut ! 

C'est bien joli, mais un attribut de quoi ?

Eh bien, nous disons qu'il s'agit du « titre d'un livre ». Alors, ce sera un attribut de la classe Livre.

😬 Et si je me trompe ?

Pas de panique. c'est entièrement normal. Vous pouvez penser à ce que vous faites comme une sorte d’œuvre d'art, mais ce n'est pas une science exacte. Très souvent, vous aurez l'impression qu'un élément est une classe (ou un attribut) ; mais, au moment de l'implémentation, vous vous rendrez compte que c'est plus simple ou plus compliqué que vous ne le pensiez ! Dans ce cas-là, il faudra simplement adapter votre diagramme. D’ailleurs, nous verrons comment faire dans les chapitres à venir.

Cette fois-ci, penchons-nous sur l'auteur. Pour le moment, vous n'avez que le nom d'une personne, vous pouvez donc en faire un attribut de livre. Mais vous ne savez pas : peut-être qu'au fur et à mesure que vous codez, vous serez amené à avoir beaucoup plus d'informations sur l'auteur. Comme sa date de naissance, la liste de tous ses livres, peut-être aussi une biographie succincte. À ce moment-là, l'auteur deviendrait une classe.

Et l'utilisateur dans tout ça ? Ou même le programme lui-même ? S'agit-il également de classes ? 🕵️‍♀️ 

Commençons par le plus facile : le programme. Dans la mesure où il s'agit de ce que vous créez, il ne s'agira pas d'une seule classe. Il sera constitué de l'ensemble des classes que vous allez identifier et de toutes leurs relations entre elles.

Maintenant, l'utilisateur. Comme nous l'avons vu, vous pouvez avoir plusieurs types d'utilisateurs (bibliothécaires, usagers) qui ont accès à différentes parties du programme. Vous voulez que les classes représentent leurs différents pouvoirs (non non, nous ne sommes pas dans un film de super-héros) ; cependant, en général, vous n'aurez pas de classe appelée Utilisateur.

Étape : représentez vos noms en tant que classes ou attributs

Une fois que vous avez défini vos noms, nous allons pouvoir commencer à concevoir nos classes à proprement parler. 🤩 Une classe est représentée par un rectangle, en indiquant le nom de la classe en haut et l'attribut en dessous. Commençons par la classe Livre.

Image représentant le diagramme de classe Livre avec son attribut titre
Diagramme de classes Livre avec son attribut "titre"

Reprenons notre liste de noms : nous avons encore d'autres noms à gérer. Ajoutons l'utilisateur.

Nous ne savons pas quel utilisateur va effectuer cette recherche. Or, pour le moment, vous connaissez deux types d'utilisateurs : les usagers et les bibliothécaires. Ajoutons-les :

Image représentant le diagramme de classes avec les classes Livre, Usager et Bibliothèque.
Diagramme de classes avec les classes Livre, Usager et Bibliothécaire

Faisons défiler la description de notre cas d’utilisation. Hoho : le nom de l'auteur. Comment le gérer ? 🙈 En ne regardant que le début de notre liste, nous pourrions être tentés de faire du nom de l'auteur un attribut de Livre. Mais descendez un peu dans la liste.

Un auteur est plus qu'un simple nom. Par exemple, il peut être associé à de nombreux livres. Si vos clients veulent une biographie succincte de l'auteur, ou sa photo, vous devez les ajouter :

Image représentent le diagramme de classe avec la classe auteur
Diagramme de classes avec la classe auteur

En avançant dans le scénario, vous vous rendrez compte que certaines classes doivent communiquer entre elles pour rechercher un livre. Une relation existe donc entre elles. Utilisez un trait entre les classes pour la représenter, comme dans le diagramme ci-dessous :

Image représentant un diagramme de classe et les différentes relations entre différentes classes
Relations entre plusieurs classes

Qu'est-ce que c'est que ces petits chiffres 1 et cet astérisque ? 😵

Dans cet exemple, les résultats de recherche affichent de nombreux livres. En langage UML, vous pouvez noter cette multiplicité avec un astérisque, qui signifie « au moins un(e) ».  Et comme nous parlons de livres, cet astérisque est placé à l'endroit où le trait de la relation rejoint la classe Livre. En attendant, un livre n'a qu'un résultat de recherche. Vous notez donc un 1 à l'endroit où le trait de la relation rejoint la classe "Résultats de recherche".

À présent, à vous d'essayer ! Comment noteriez-vous la relation entre un livre et un auteur ? Et celle entre une image et un auteur ? Une image et un livre ?

Vous voulez voir ma solution ? C'est juste en-dessous

Image de la solution
Solution

Chaque livre a un auteur. Un auteur peut avoir écrit de nombreux livres, mais généralement un livre n'a qu'un seul auteur. Vous ajoutez donc un * à votre trait du côté du livre et 1 du côté de l'auteur. Un livre ne sera associé qu'à une image, de même qu'un auteur.

Après avoir lu des descriptions de cas d’utilisation supplémentaires, votre diagramme de classes intégrera d'autres classes et relations. Si d'autres descriptions de cas d’utilisation font référence au code ISBN d'un livre, à des images ou à la vie personnelle d'un auteur, vous pouvez les ajouter à vos classes en tant qu'attributs !

👩‍🔬 Expérimentez : passez du cas d'utilisation au diagramme de classes ! 

Maintenant que vous avez vu comment cela fonctionne, entraînons-nous à transformer d'autres cas d'utilisation en diagramme de classes.

Souvenez-vous : vos usagers ont besoin de rechercher un livre ou de payer des amendes pour les livres en retard, mais vos bibliothécaires ont les objectifs suivants :

  • créer la liste des livres en retard ;

  • infliger des amendes pour les retards ;

  • acheter les livres en remplacement ;

  • recouvrer les amendes.

En guise d'entraînement, créons les deux premiers cas ensemble.

Commençons par « Créer le rapport des livres en retard ».

Créez la liste des livres en retard

Créez un diagramme de classes à partir de la description du cas d'utilisation ci-dessous :

  •   l'utilisateur sélectionne la page des livres en retard ;

  •   le système affiche la page ;

  •   l'utilisateur saisit le nom de l'usager ou son identifiant ;

  •   l'utilisateur sélectionne Rechercher les livres en retard ;

  •   le système lance la recherche ;

  •   le système présente une liste des livres en retard ;

  •   l'utilisateur sélectionne Imprimer ;

  •   le système imprime la liste (pas très écologique, ce bibliothécaire 🙃).

Une fois que vous avez fini de concevoir les classes de ce cas d'utilisation, comparez vos résultats à la solution qui se trouve ici. N'oubliez pas d'indiquer les 1 et les astérisques !

Maintenant, attaquons-nous à un autre exemple : celui où on envoie des amendes pour retard. 🚀

Donnez des amendes pour retard

Le cas d'utilisation « Donner des amendes pour retard » ressemble beaucoup à « Créer la liste des livres en retard ». Mais, cette fois-ci, au lieu de regarder un seul compte d'utilisateur, il implique une recherche de tous les usagers qui ont gardé des livres au-delà de la date d'échéance :

  •   l'utilisateur sélectionne la page des livres en retard ;

  •   le système affiche la page ;

  •   l'utilisateur sélectionne "Générer les amendes pour livres en retard" ;

  •   le système lance la recherche ;

  •   le système parcourt la liste, en calculant l'amende de chaque usager ;

  •   le système envoie un e-mail à chaque usager. Celui-ci indique la liste des articles en retard et le coût total de l'amende.

Une fois que vous avez fini de concevoir les classes pour ce cas d’utilisation particulier, comparez vos résultats à la solution ici. Encore une fois, n'oubliez pas d'indiquer les 1 et les astérisques ! 😊

Mais n'oubliez pas, même si les diagrammes de classes sont l'un des moyens les plus courants de représenter un modèle de domaine, ils ne sont pas le seul. Vous avez aussi la possibilité de créer une série de pages wiki, détaillant les définitions de votre domaine. Voilà ce que ça donnerait pour notre application :

Livre
  • Représente un article sur l'étagère d'une bibliothèque. Il est écrit par un auteur. Il comprend un titre, un code ISBN et parfois une image de couverture.

  • Il peut être emprunté par un usager pour une durée précise, qui correspond à la date de retour. Si l'article est conservé au-delà de cette date, il est considéré comme livre en retard, et une amende est infligée à l'usager.

  • Un usager peut également demander qu'un livre soit mis de côté.

Usager
  • Membre de la bibliothèque qui s'est inscrit pour emprunter des livres.

  • Chaque usager a un compte.

  • Un compte a un état. Celui-ci indique sa capacité d'emprunter des livres.

  • Si des livres en retard sont actuellement associés à son compte, sa capacité d'emprunter d'autres livres est restreinte.

Les termes en gras seront des liens vers les définitions correspondantes dans le wiki.

En résumé

Voici comment créer un diagramme de classes :

  • Commencez par la description du cas d'utilisation, en mettant en avant les noms. Trouvez les idées importantes (classes) et les idées moins importantes (attributs des classes). 

  • Ajoutez un rectangle pour chaque classe et énumérez ses attributs en dessous. 

  • Reliez les classes qui entretiennent des relations importantes avec des traits.

  • Notez le nombre d'éléments avec des 1 et des astérisques. 

Un diagramme de classes évolue constamment. Au fur et à mesure que vous comprendrez d'autres cas d'utilisation, vous y ajouterez des classes et des attributs. Vous pourrez même déplacer des attributs d'une classe à une autre. Cela fait partie du processus !

Dans le chapitre suivant, nous verrons comment modifier votre diagramme lorsque vos clients changent d'avis ou demandent de nouvelles fonctionnalités. Alors, c'est parti pour le chapitre suivant ! 🎉

Exemple de certificat de réussite
Exemple de certificat de réussite