Exercice UML modélisez avec un diagramme de cas d’utilisation distribution d’essence dans une station-service

Pour un système complexe, il vaut mieux se concentrer  sur les fonctions essentielles puis passer aux cas moins importants.

Identification des principaux acteurs et recensement des cas d’utilisation essentiels L’acteur principal est évidemment le client. Il utilise le système pour obtenir de l’essence. Il est associé au cas d’utilisation « Se servir ». Rappel : dans un diagramme de cas d’utilisation, on ne détaille pas la séquence des opérations. Par exemple, le type d’essence choisi sera pris en compte quand on décrira le cas.

Imaginons  le fonctionnement de la pompe : l’essence ne peut  être distribuée  que  si la pompe est armée ; le client prend un pistolet ; sur le pupitre du pompiste est indiqué le type d’essence choisi ; le pompiste arme la pompe en appuyant sur un bouton de son pupitre, ce qui initialise la pompe.

Ainsi, le cas « Se servir » doit inclure l’armement de la pompe. Deux solutions sont possibles :

•   La première  utilise un  cas unique  (Se servir), et deux  acteurs  (Client  et Pompiste), comme le montre la figure.

 

Exercice UML

L’armement de la pompe est indispensable, sinon l’essence ne peut être distribuée, d’où la relation d’inclusion entre les cas « Se servir » et « Armer pompe ». L’armement de la pompe se fait en une seule action pour le pompiste : celle d’armer la pompe en appuyant  sur un bouton.  La description de l’armement  se résume  donc  à une  séquence  très sommaire d’actions. Faut-il alors représenter cela par un cas d’utilisation ? L’argument qui fait pencher pour le maintien du cas « Armer pompe » est que l’armement est une opération bien isolée des autres fonctions : il s’agit d’initialiser la pompe  et donc de piloter des périphériques (mécaniques, électroniques…). Vu sous cet angle, l’armement est suffisamment complexe et bien isolé des autres fonctions pour en faire un cas.

Le pompiste  est un acteur secondaire du cas « Armer pompe » (c’est un cas interne  pour lequel le pompiste est consulté). L’armement de la pompe n’est possible que si le niveau de la cuve est suffisant. Un détecteur de niveau (périphérique externe au système informatique) est nécessaire. Ce périphérique  est représenté par l’acteur « Capteur niveau cuve pour armement  ». Il est secondaire car l’information sur le niveau de la cuve ne lui est pas destinée. Si le niveau est trop bas, c’est le pompiste qui doit en être informé. Il saura ainsi ce qui empêche l’armement de la pompe. La vérification du niveau de la cuve est importante pour le système. De plus, cette opération  constitue une transaction  bien isolée des autres fonctions  (il s’agit de contrôler  un périphérique  matériel).  C’est la raison  pour  laquelle on décide de créer un cas « Vérifier niveau cuve pour armement  ». Pour transmettre  le niveau de la cuve au pompiste, il faut relier l’acteur Pompiste au cas « Vérifier niveau cuve pour armement  ». Le pompiste  est informé que le niveau est trop bas, mais la vérification doit être  automatique   pour  que  les pompes  soient éventuellement  bloquées.  Une  relation d’inclusion intervient  donc entre les cas « Armer pompe » et « Vérifier niveau cuve pour armement  ».

Recensement des cas de moindres importances

Après avoir trouvé les principaux cas, il est temps de se consacrer à ceux de moindre importance. Il ne faut pas oublier de couvrir tous les besoins et ne pas hésiter à introduire  des cas auxquels le maître d’ouvrage n’a pas pensé. Il validera ou pas le modèle a posteriori.

L’énoncé n’aborde pas le problème du remplissage des cuves d’essence. Cette opération  est réalisée par une entreprise tierce de livraison d’essence. Elle doit cependant être consignée dans le système informatique  de la station-service. Une solution consiste à alerter le pompiste dès que le niveau des cuves descend au-dessous d’un certain seuil. Ce deuxième seuil, appelé « seuil de remplissage des cuves », doit être supérieur  au seuil des 5 % de l’énoncé (celui qui empêche les pompes d’être armées). Quand  il est atteint, le pompiste  prévient l’entreprise de livraison d’essence de sorte à éviter de tomber au seuil des 5 %. Si la station- service est sur une autoroute, la livraison d’essence doit être garantie 24 heures sur 24. Il faut peut-être  contacter  la société de livraison automatiquement – sans passer par l’intermédiaire du pompiste – dès que le niveau devient trop bas. Le capteur du niveau de remplissage est représenté par un acteur appelé « Capteur niveau cuve pour remplissage » (figure 1.31). Il est associé au cas « Vérifier niveau cuve pour remplissage », lui-même  associé à l’acteur Pompiste.

Abordons à présent le problème du paiement. De concert avec le maître d’ouvrage, le maître d’œuvre imagine un fonctionnement possible du système : dès que le client raccroche le pis- tolet, le montant  à payer est calculé ; il s’affiche sur le pupitre  du pompiste ; le client qui vient payer indique son mode de paiement (espèces, chèque ou carte bancaire) ; le pompiste sélectionne le mode de paiement choisi. À partir de là, les cas divergent :

•   Pour un paiement en espèces, le pompiste encaisse le montant  demandé, puis valide la transaction, qui est mémorisée dans le système informatique  (le montant,  la date de la transaction et le mode de paiement sont conservés).

•   Si le paiement se fait par chèque, ce dernier est rempli automatiquement, puis le pompiste l’encaisse. La transaction est mémorisée dans le système informatique (en plus de la date, du montant  et du mode paiement, sont conservés les références d’une pièce d’identité ou le numéro d’immatriculation du véhicule).

•   Pour un paiement par carte bancaire, la banque de la station-service réalise une transaction avec la banque du client. Les seules informations  à conserver dans le système informatique  de la station-service sont le montant,  la date de la transaction  et le mode de paiement.

Comment représenter cela dans un diagramme de cas d’utilisation ? Une première solution (présentée à la figure 1.31) consiste à créer un cas général appelé « Payer », et trois cas particuliers reliés par une relation de spécialisation au cas « Payer ». Chacun des trois cas représente un mode de paiement.

Une autre solution (présentée à la figure 1.30) repose sur un cas, « Payer », qui se déroule jusqu’au choix du mode de paiement, puis, selon le type de paiement, un des trois modes est activé (« Payer en espèces », « Payer par chèque » ou « Payer par carte bancaire »). Ces trois cas sont typiquement  des extensions du cas « Payer », où l’extension est soumise à condition.

 Exercice UML

Ces deux solutions sont possibles. Il est difficile de dire laquelle est la meilleure. La suite de l’exercice se fonde arbitrairement sur la représentation avec des relations de généralisation (figure 1.31). Le modélisateur  se retrouve régulièrement  face à ce dilemme. La réponse est souvent la même : peu importe la façon de modéliser un système du moment que le modèle est correct – un modèle est correct s’il montre une solution qui satisfait le maître d’ouvrage ainsi que les futurs utilisateurs du système.

Aboutir à une modélisation correcte

Il faut prendre le temps d’élaborer le diagramme de cas d’utilisation, bien qu’il soit généralement simple à bâtir, afin d’éviter les a priori qui peuvent conduire à une modélisation erronée.

À la relecture du fonctionnement du paiement tel qu’il est décrit précédemment, le pompiste devient l’acteur principal du cas de paiement. C’est un peu surprenant car on pourrait croire au premier abord qu’il s’agit du client. Or, la seule fois où le client intervient directe- ment  sur le système informatique  de la station-service est quand  il saisit son numéro  de carte bancaire. Toutes les autres situations nécessite l’intervention du pompiste. Attardons- nous un instant  encore sur le paiement  par carte bancaire. Il faut de toute évidence faire figurer un acteur supplémentaire  qui représente la banque, car elle interagit avec le système sans en faire partie. C’est un acteur secondaire qui est sollicité uniquement pour confirmer le bon déroulement  de la transaction.  Quel est le rôle de cet acteur ? Le plus souvent, les solutions de paiement par carte bancaire sont disponibles clés en main sur le marché. Elles incluent un lecteur de cartes ainsi qu’un logiciel pour le piloter. Le maître d’œuvre doit pro- poser plusieurs solutions présentes sur le marché au maître d’ouvrage, et éventuellement une solution propriétaire si aucune solution du marché ne lui convient. Le maître d’ouvrage décidera.  Dans  le cadre  de cet exercice, à défaut  de pouvoir  dialoguer avec un  maître d’ouvrage, nous choisissons l’achat d’une solution clés en main pour le paiement par carte bancaire. Dans ce cas, le client, lorsqu’il saisit le code de sa carte, n’interagit plus directe- ment  avec le système informatique  de la station-service. Ainsi, quel que soit le mode de paiement, tout passe par l’intermédiaire du pompiste. Le client n’est donc pas un acteur du système.

Le calcul automatique  du montant  à payer peut se faire dès que le client raccroche le pistolet (ce qui intervient à la fin du cas « Se servir »). Pour indiquer le moment  où le montant  est  calculé, on peut ajouter une relation d’extension entre les cas « Se servir » et « Payer », avec un point d’extension qui précise le moment  où le calcul du montant  intervient, comme le montre la figure 1.31. Le paiement peut aussi intervenir avant de se servir. Dans ce cas, il est possible d’ajouter un deuxième point d’extension (voir la figure 6.17 du chapitre 6).

Modélisation des concepts abstraits

Parfois, le langage UML peut paraître limité. Il faut alors trouver, parmi les éléments du langage, celui qui convient le mieux à une situation donnée.

Un dernier besoin n’est pas décrit par le diagramme de cas d’utilisation : c’est l’archivage en fin de journée des transactions. Faut-il prendre  en compte ce cas et, si oui, quel acteur l’utilise ? Un cas d’utilisation est déclenché par un événement. Les événements peuvent être classés en trois catégories :

•   Les événements externes. Ils sont déclenchés par des acteurs.

•   Les événements temporels. Ils résultent de l’atteinte d’un moment dans le temps.

•   Les événements d’états. Ils se produisent quand quelque chose dans le système nécessite un traitement.

Ici, il s’agit d’un événement temporel. Il est difficile de définir un acteur qui déclencherait cet événement. Comment  le temps peut-il interagir avec un système ? Cela dit, l’archivage quotidien est une fonctionnalité  essentielle. Il faut la faire figurer dans la modélisation  du système. À quelle étape de la modélisation doit-on prendre en compte cette fonctionnalité ? Comme nous en sommes à produire le premier modèle du système et que cette fonctionna- lité est importante, nous choisissons, pour ne pas l’oublier, d’en faire un cas d’utilisation. Pour déclencher ce cas, nous introduisons  un acteur appelé Timer qui, une fois par jour, déclenche un événement temporel. Timer est un acteur, il est donc en dehors du système. Cela signifie que l’heure est donnée par une horloge externe à notre système informatique (par exemple, l’horloge du système d’exploitation du système informatique).

La prise en compte des événements d’états est plus délicate puisque, par définition, ils se produisent à l’intérieur d’un système. Ils ne peuvent donc pas être déclenchés par un acteur, qui est forcément  en dehors du système. Il est toutefois possible qu’un événement d’état active un cas d’utilisation  à condition  que ce cas soit interne  au système. Une façon de représenter un cas de ce type consiste à le relier à d’autres cas via des relations d’extension et à faire figurer comme condition  d’extension l’événement d’état. C’est cette solution qui a été adoptée entre les cas « Se servir » et « Payer », en considérant ce dernier comme un cas interne vis-à-vis du cas « Se servir ».

uml28

Exercice UML corrigé

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *