machines initial La ligne messages fragments en UML, collaboration, d'état-transition, d'activité LIRMM / Université Montpellier 2 22 novembre 2015
Introduction machines initial La ligne messages fragments statiques ( d'instances et classe) Structure d'un système Signatures méthos Dynamique du système
Sommaire machines initial La ligne messages fragments 1 machines initial 2 3 La ligne messages fragments
Sommaire machines initial La ligne messages fragments 1 machines initial 2 3 La ligne messages fragments
machines machines initial La ligne messages fragments machines, aussi appelés d'état-transition, servent à modéliser la dynamique d'un sous-système, souvent d'une classe. Une machine décrivant le comportement d'une classe décrit en fait la dynamique toutes ses instances à la réception ou à l'envoi messages. fermer verrouiller Ouverte Fermee Verrouillee ouvrir verrouiller Figure: Diagramme d'état-transition très simple pour une porte
machines initial La ligne messages fragments Un état modélise une situation où un certain invariant (généralement implicite) est maintenu (la porte est fermée, un compte bancaire a un sol positif,...) Transition : passage d'un état à un autre Il peut y avoir plusieurs événements déclencheurs possibles, auquel cas on les liste tous (en les séparant par s virgules). L'action peut être une aectation d'attribut, un appel métho,... Quand aucun événement déclencheur n'est spécié, la transition est dite spontanée. A Figure: m[c]/a B Une transition
initial machines initial La ligne messages fragments Un pseudo-état initial (noté graphiquement par un petit disque noir) représente un sommet qui est la source d'une seule transition vers l'état par défaut d'une machine à état ou d'un état composite. La transition initiale peut être munie d'une action. L'état nal matérialise le fait qu'une région (une machine à état ou une région d'état composite) est terminée (voir notation gure 3). Figure: Etat initial Etat final initial et Final
machines initial La ligne messages fragments Un état composite : soit contient une seule région soit est décomposé en 2 ou plusieurs régions orthogonales Un état inclus dans une région d'un état composite est appelé un sous-état cet état composite. C'est un sous-état direct quand il n'est pas contenu par un autre état, et sinon un sous-état indirect.
Exemple machine à état avec état composite machines initial La ligne messages fragments Figure: Exemple machine à état avec état composite
Exemple avec état à régions orthogonales machines initial La ligne messages fragments Figure: État composite orthogonal, extrait du document spécication d'uml 2.0
Comportement d'entrée et sortie, comportement dans un état machines initial La ligne messages fragments PreparationBoisson /do clignoter() /entry emissionbip() /exit emissionbip() Figure: Actions d'entrée et sortie s états, comportement dans les états + on evenement / action
Historiques machines initial La ligne messages fragments Il existe s états dits mémoire qui permettent rerentrer dans un état composite dans le même sous-état que quand on en est sorti. Il y a ux états mémoire : historique superciel et historique profond. Historique superciel (Shallow history) (noté H). L'historique superciel représente le sous-état actif le plus récent (mais pas les sous-états ce sous-état). Historique profond (Deep history) (noté H*). L'historique profond représente la conguration active la plus récente l'état composite qui contient directement l'historique profond (c'est-à-dire la conguration active la rnière fois qu'on a quitté l'état composite). H H* Shallow history DeepHistory
Autres pseudo-états machines initial Il existe d'autres pseudo-états comme les jonctions, les choix ou les branchements, nous ne les détaillerons pas ici. La ligne messages fragments
Question cours machines initial La ligne messages fragments Nous étudions une montre très simple. Elle possè ux boutons : avance et mo. Le mo par défaut est le mo achage. Quand on appuye une fois sur le bouton mo, la montre passe en mo modication s heures. Chaque pression sur le bouton avance incrémente l'heure d'une unité. Quand on appuye une nouvelle fois sur le bouton mo, la montre passe en modication s minutes. Chaque pression sur le bouton avance incrémente les minutes d'une unité. Quand on appuye une nouvelle fois sur le bouton mo, la montre repasse en mo achage. Représentez le diagramme d'états la montre.
Sommaire machines initial La ligne messages fragments 1 machines initial 2 3 La ligne messages fragments
d'activité machines initial La ligne messages fragments permettent représenter s ots contrôle et données. Ils permettent donc par exemple représenter le comportement d'une opération ou d'un cas d'utilisation. d'activité sont s graphes, avec diérents types n uds et d'arcs. Ils mettent en jeu principalement : s n uds actions s n uds contrôle permettant spécier l'enchaînement s actions (synchronisation, branchement,...) s n uds d'objet permettant représenter les objets créés ou utilisés au cours d'une activité s arcs transition permettant relier les n uds.
Exemple machines initial La ligne messages fragments Inserer monnaie [credit insuffisant] [credit suffisant] Choix boisson Distribution cuillere Distribution boisson Emission bip
Représentation graphes ot contrôle machines initial La ligne messages fragments N ud initial (Initial no). Point d'entrée pour invoquer une activité. Un jeton contrôle est placé au n ud initial quand l'activité commence. N ud n d'activité (Activity nal no). Stoppe tous les ots dans une activité. Un jeton atteignant un n ud n d'activité fait avorter tous les ots en cours, l'activité est donc terminée et le jeton est détruit (ainsi que tous les jetons circulant dans l'activité). N ud n ot (Flow Final no). Termine un ot. Le n ud ot nal détruit les jetons y entrant.
Représentation graphes ot contrôle machines initial La ligne messages fragments N ud d'action (Action no). Unité fondamentale la fonctionnalité exécutable d'une activité. Une action s'exécute quand toutes les contraintes sur ses ots contrôle entrants sont satisfaites (jonction implicite). L'exécution consomme les jetons contrôle entrants puis présente un jeton sur chaque ot sortant (branchement implicite). Flot contrôle (Control ow). Passage s jetons. jetons oerts par le n ud source sont oerts au n ud stination.
Représentation graphes ot contrôle machines initial La ligne messages fragments N ud décision (Decision no). Choix parmi les ots sortants. Chaque jeton arrivant sur un n ud décision ne peut traverser qu'un seul ot sortant. jetons ne sont pas dupliqués. Ce sont les gars sur les ots sortants qui permettent le choix (les gars doivent assurer le déterminisme du choix). N ud branchement (Fork no). Partage d'un ot en ots concurrents. jetons arrivant d'un branchement sont dupliqués sur les ots sortants.
n'aectent pas le ot s jetons. Représentation graphes ot contrôle machines initial La ligne messages fragments N ud jonction (Join no). Synchronisation plusieurs ots. Si un jeton contrôle est oert sur chaque ot entrant, alors un jeton contrôle est oert sur le ot sortant. N ud fusion (Merge no). Rassemblement plusieurs ots. Tous les jetons oerts sur les ots entrants sont oerts sur le ot sortant sans synchronisation. Partition d'activité (Activity Partition). Intie s actions ayant une caractéristique commune. partitions
Sommaire machines initial La ligne messages fragments 1 machines initial 2 3 La ligne messages fragments
machines initial La ligne messages fragments permettent représenter les interactions entre s instances particulières. Un diagramme met en jeu : s instances, et éventuellement s acteurs, s messages échangés par ces instances. Un message dénit une communication entre instances. Ce peut être par exemple l'émission d'un signal, ou l'appel d'une opération. Le diagramme permet d'insister sur la chronologie s interactions : le temps s'écoule grosso modo du haut vers le bas. ont été profondément modiés lors du passage d'uml1.x à UML2.0, et à l'heure actuelle, peu gens utilisent la nouvelle notation
Exemple nom du diagramme instances machines initial La ligne messages fragments sd appelsdemethos b:bibliotheque l:livre a:abonne emprunter(a) setestempruntepar(a) getnomemprunteur() getnom() envoi message messages reception message Figure: Premier exemple diagramme ligne activation
La ligne machines initial La ligne messages fragments À chaque instance est associée une ligne, qui représente la l'objet. événements survenant sur une ligne (réception message ou envoi message) sont ordonnés chronologiquement. La ligne est représentée par une ligne pointillée quand l'instance est inactive, et par une boîte blanche ou grisée quand l'instance est active. Quand une instance est détruite, on stoppe la ligne par une croix. sd creationdestruction m:meeting r:rapport Figure: Ligne
messages machines initial La ligne messages fragments messages sont représentés par s lignes èchées. À chaque extrémité la ligne èchée correspond un événement (réception ou envoi). Le sens la èche permet déterminer dans quel sens va le message. Messages synchrones et asynchrones (voir Figure 11). Figure: message asynchrone appel synchrone retour synchrone Messages
Exemple nom du diagramme instances machines initial La ligne messages fragments sd appelsdemethos b:bibliotheque l:livre a:abonne emprunter(a) setestempruntepar(a) getnomemprunteur() getnom() envoi message messages reception message Figure: Premier exemple diagramme ligne activation
Syntaxe s noms message machines initial La ligne messages fragments La syntaxe pour le nom d'un message est : ([attribut =] signal-ou-nomoperation [( [liste-arguments])][: valeur-retour]) * où la syntaxe pour un argument est : ([nomparam =] valeur-argument) (attribut = nomparamout [: valeurargument]) - * signie : n'importe quel type message - signie : paramètre indéni Par exemple, on peut avoir les noms message suivants : getage() getage() :12 age=getage() :12 setage(age=15) setage(-)
Exemple d'appel métho sd appelsdemethos machines initial b:bibliotheque emprunter(a) getnomemprunteur() l:livre a:abonne setestempruntepar(a) getnom() getnomemprunteur():"toto" getnom:"toto" La ligne messages fragments Figure: Appels méthos ne sont pas à concevoir indépendamment s autres, comme par exemple le diagramme classes.
fragments séquence possible puis la version 2.0 d'uml existence plusieurs opérateurs composition machines initial La ligne messages fragments fragment combine nom l operateur operans sd ExAlternative alt u:user getauteurdulivre(nom) :auteur s:system [pas livre nomme nom] :"erreur : nom livre inexistant" [u non connecte] :"erreur : connexion requise" [ else ] ligne separation s operans conditions gar Figure: Opérateurs composition et fragments combinés
Alternative et optionnalité machines initial alternative (noté alt) permet représenter le choix (exclusif) entre plusieurs comportements optionnalité (noté opt) permet représenter un comportement qui n'a lieu que si une condition gar est vraie sd ExAlternative u:user getauteurdulivre(nom) s:system La ligne messages fragments alt [pas livre nomme nom] :"erreur : nom livre inexistant" [u non connecte] :"erreur : connexion requise" :auteur [ else ] 3 operans i.e. 3 comportements alternatifs conditions reprise du comportement commun
parallèle machines initial La ligne messages fragments L'opérateur composition parallèle (noté par) permet spécier s comportements qui peuvent avoir lieu en parallèlle les uns s autres. Cet opérateur est n-aire. Quand un comportement A est en parallèle avec un comportement B, l'ordre partiel s événements A et B est conservé. Raccourci syntaxique : corégion
séquentielle faible sd ExCompoFaible c1: c2: c3: machines initial La ligne messages fragments seq A B C E Figure: séquentielle faible (seq) A B D C E F C E D F F D sd ExOrdrePossibleSeq A C c1: c2: c3: E Figure: Un diagramme séquence pouvant en résulter B F D
séquentielle forte sd ExCompoForte c1: c2: c3: machines initial strict A B C E F D La ligne messages fragments Figure: séquentielle forte (strict) A B D C E F C E D F B E
Boucle machines initial La ligne messages fragments L'opérateur loop permet d'itérer s comportements. On doit pour cela spécier : le nombre minimum minint tours boucles, le nombre maximum maxint tours boucle (* signie inni), une condition gar, une unique opéran représentant le comportement sur lequel on boucle. Syntaxe la boucle : loop[ (minint [, maxint ] ) ] Par défaut, minint=0 et maxint=*..
Exemple boucle machines initial sd ExLoop loop bib:bibliotheque c:catalogue b:book C:Constraint getfirstbook() b=getfirstbook() [b.satisfies(c)] getnextbook() b=getnextbook() La ligne messages fragments Figure: Boucles dans les
Question cours machines initial La ligne messages fragments Une métho qui calcule le temps déménagement d'un déménagement avec empaquetage : temps trajet+temps d'empaquetage + distance au véhicule l'origine et la stination.