Modélisation tridimensionnelle du comportement mécanique ...
uml-comportement-bw.pdf
Transcript of uml-comportement-bw.pdf
-
Gerson SunyIrin - Universit de Nantes
Conception avec UML
-
Partie II - Comportement
-
Diagrammes de comportement
Etat-transitionInteractionActivitsCas dutilisation
-
tat-transition
-
Diagrammes dtatModlisation dun comportement par un systme fini dtats et de transitionsIl existe deux sortes de digrammes dtat:
De comportementDe protocole
-
Diagrammes dtatDiagramme de dtat comportementaux
-
Dcrivent un comportement laide dun graphe dtats, interconnects par des Transitions, qui sont dclenches par des vnements En dautres termes, dcrivent les ractions dun objet aux changements de son environnement
Machines dtats
-
Essentiellement, un diagramme de HarelAttachs un classificateur (sauf interfaces) ou une opration
Sont hrits, et peuvent tre spcialiss
Machines de dtats
-
Relation unidirectionnelle entre deux tats (ou entre deux machine dtat)Interne un tatExterne: implique un changement dtat Locale: sapplique tous les tats dun tat composite
Transition
-
Notation - Transition
Syntaxe : trigger [guard]/ trigger
Open Closequit(user) [user has rights] / parent := user.parent(); parent.update()
-
Evnement qui peut causer lexcution dun comportement qui lui est associ. Exemples:
Message: Signal ou OprationTemporelChangement
Gchette (Trigger)
-
Stimuli auquel ragit un objetCommunication instantan, unidirectionnelleUn vnement est une instance dun Signal (Classificateur marqu signal)
Evnement
-
Contrainte value avant le dclenchement dune transition
Garde
-
Dclenche par une transition ou interne un tatDfinit un comportement, spcifi dans nimporte quel langage (!)
Activit
-
Situation stable dun objet:en attente dun vnement, ouen train de raliser une tche
Trois sortes: simple, composite et sous-machine
Etat
-
Compartiments:
Nom
Activits internes
Transitions internes
Notation
ICQ-Connectedentry/say_hello()exit/bye_bye()do/poll()keyboard/read_msg()
-
Etat englobant diffrents sous-tatsPossde une entre et une sortieTransition arrivant -> entreTransition sortant -> sort de tous les tats
Etat composite
-
Notation
Offline Available N/A Freedeconnect()
Online
set_available()
not_available() free_for_chat()
-
Notation
Etat composite avec indicateur de dcomposition
Online
do/poll()
-
Rgions concurrentes, reprsentant 2 (ou n) aspects indpendants dun objet
Evitent lexpression dun produit cartsien
Composite Orthogonal
Online
InvisibleVisible
Available
-
Sous-machine
Rfrence une machine dtats
-
Rfrence une machine dtats
Points de connexion:
Entre
Sortie
Notation
Connexion:ConnexionMachine
timeout
-
Initial, Final
Entre, sortie
Fourchette, jonction (rgions orthogonales)
Choix
Pseudo-tats
id
[>10]
[
-
Envoi et rception dvnements
Squence dactions
Pour une vue oriente transition
Transitions particulires
Abort
Timeout
Connected
reason = timeout
Offline
-
Ajout de nouvelles transitions ou de nouveaux tats
Spcialisation dtats (transformation dun tat simple en composite)
Un tat peut tre {final}
Spcialisation
Online Offline
Connection {extended}
new transition
-
Diagrammes dtatDiagramme de dtat de protocole
-
Spcialisation des machines dtatsToujours attaches un classificateurReprsentent un cycle de vie dun objet et spcifient quels messages sont accepts chaque tat
Machines dtat de protocole
-
Similaire aux machines dtats
Note {protocol}
Notation
Porte {protocol}
Ouverte Ferme[couloir->libre] Fermer/
-
Spcifient une pr et une post condition
Transitions
[pr-condition] vnement / [post-condition]
-
Spcifient un invariant
Etats
[invariant]Etat
-
Cette machine dtats est attache la classe Connection
Donner le code qui correspond limplmentation de cette classe
5 min...
Exercice VIIConnection
Offline
Online
do/poll_sever()
connect()
disconnect()
Online
set_available()
set_not_available() set_free_for_chat()
N/A FreeAvailable
-
Utilisation du pattern State
Utilisation dun thread pour la mthode poll()
Utilisation ventuelle de Command
Solutionclass Connection:
def __init__(self): self._state = Offline(self)
def connect(self): self._state.connect()
def disconnect(self): self._state.disconnect() def set_not_available(self): self._state.set_not_available()
def set_free_for_chat(self): self._state.set_free_for_chat()
def set_available(self): self._state.set_available()
def set_state(self, aState): self._state = aState
-
La classe Connection possde un seul attribut (_state), initialis Offline()
Le comportement est dlgu ltat
Connectionclass Connection:
def __init__(self): self._state = Offline(self)
def connect(self): self._state.connect()
def disconnect(self): self._state.disconnect() def set_not_available(self): self._state.set_not_available()
def set_free_for_chat(self): self._state.set_free_for_chat()
def set_available(self): self._state.set_available()
def set_state(self, aState): self._state = aState
-
ConnectionState ralise le changement dtat en fonction des transitions
Un nouvel objet est cr chaque fois
ConnectionStateclass ConnectionState: def __init__(self, connection): self._connection = connection def disconnect(self): self._connection.set_state(Offline(self._connection))
def connect(self): self._connection.set_state(Available(self._connection))
def set_not_available(self): self._connection.set_state(NotAvailable(self._connection))
def set_free_for_chat(self): self._connection.set_state(Free(self._connection))
def set_available(self): self._connection.set_state(Available(self._connection))
-
Les transitions non acceptes sont ignores
Offline
class Offline(ConnectionState): def disconnect(self): pass def set_not_available(self): pass
def set_free_for_chat(self): pass
def set_available(self): pass
-
Les transitions non acceptes sont ignores
Cration dun thread pour lactivit interne de ltat
Le thread est arrt par la transition disconnect
Online
class Online(ConnectionState): def __init__(self, connection): self._t = Poll() self._t.start() ConnectionState.__init__(self, connection)
def disconnect(self): self._t.cancel() ConnectionState.disconnect(self)
def connect(self): pass
-
Les transitions non ncessaires sont ignores
Autres Etatsclass Free(Online):
def set_free_for_chat(self): pass
class Available(Online): def set_available(self): pass
class NotAvailable(Online): def set_not_available(self): pass
-
Une interrogation de serveur sera ralise chaque seconde
Pollfrom threading import Threadimport timeclass Poll(Thread): def __init__(self): Thread.__init__(self) self._shouldStop = 0 def run(self): while self.resume(): print "I am polling the server, I sweare!" time.sleep(1)
def resume(self): return self._shouldStop == 0
def cancel(self): self._shouldStop = 1
-
Changer limplmentation de manire ne crer quune seule instance de chaque tat5 min
Exercice VII
-
Comment grer des tats concurrents?E.g. si ltat composite Online avait une rgion orthogonal contenant les tats Visible et Invisible?5 min...
Exercice VIII
-
Diagrammes de comportement
Etat-transitionInteractionActivitsCas dutilisation
-
Dfinissent le comportement dun ClassificateurLe comportement est dfini par deux ensembles de traces:
ValidesInvalides
Interactions
-
InteractionsDcrivent lchange de messages entre objets. Diagrammes:
Squence
Communication
Aperu dinteraction
-
Interaction Diagramme de Squences
-
Exemples de coopration entre objets Illustrent la dynamique denchanement dun traitement travers les messages changs entre objetsReprsentation du temps comme une dimension explicite (verticale)
Diagramme de squences (scnario)
-
Constitution:Un message initiateurUn ensemble dobjets et de messagesDes cadres (frames)Des contraintes de temps
Diagramme de squences
-
Notationsd Exemple
obj : C1 obj2 : C2
obj3 : C1
Message Asynchrone
Message synchrone
creation()
new = obj3
message(obj, obj2)
debut
-
MessagesCommunication (synchrone ou asynchrone) entre deux lignes de vie. Sortes de message:
Complet (vnements denvoi et de rception connus)
Trouv (vnement denvoi inconnu)
Perdu (vnement de rception inconnu)
Inconnu
-
Asynchrone
Synchrone
Cration
Perdu
Trouv
Messages - NotationMessage Asynchrone
Message synchrone
obj3 : C1creation()
retour
-
Messages - Syntaxemessage ::= [attribut =] signal-ou-operation [(arguments)][: valeur-retour] | *
arguments ::= argument [, arguments]
argument ::= [paramtre=]valeur-argument | attribut = paramtre-sortie [valeur-argument] |
message(14, -, 3.14, hello)v=message(16, variable):96message(id=16)
Exemples:
-
Ligne de vie:
Reprsente lexistence dun objet un moment particulier
Entre la cration et la destruction
Activation:
Priode dexcution dune activit (lui-mme, dlgation)
Ligne de vie, Activationobj : C1
-
Observation de dure, contraintes
Observation de temps (instants), contraintes
Contraintes temporelles
:User :ACSystem
Code d = duration
CardOut {0..13}
{d..3*d}
{t..t+3}
t = now
-
Rgion dfinissant une smantique prcise lintrieur dune interaction
Raccourcis pour lcriture de traces
Compos de [1..*] Oprandes
Fragmentssd Region Critique
obj : C1 obj2 : C2
msg()
msg()
critical
-
Alternatives (alt): choix de comportement, entre deux oprandes
Fragmentssd Exemple
obj : C1 obj2 : C2
msg()
msg()
alt [x == 42]
[else]
-
Option (opt): loprande est optionnelle. Elle peut ne pas existerBreak (break): loprande est excute, la place du reste de linteraction (raccourci pour alternative)
Fragments
-
Parallle (par): le comportement spcifi par les deux oprandes peut sexcuter en parallle (fusion entre les messages)Ngatif: le fragment reprsente des traces invalides
Fragments
-
Rgion critique (critical): les traces spcifies ne peuvent pas tre intercales
Fragments
-
Assertion (assert): spcification de la seule continuation valable
Ignorer et Considrer (ignore | consider): spcification des messages significatifs
Fragmentssd Exemple ignore {t,r}
:X :Y
consider {q,v,w} v()
assert
q()
-
Boucle (loop): loprande sera rpte autant de fois que dfini par une gardeAutres: strict, ordonnancement strict, ordonnancement faible
Fragments
-
Un diagramme de squences doit tre lisible: limitez le nombre de messages et dobjets par diagramme
Conseil de modlisation
-
Listez les utilisations possibles dun diagramme de squences5 min..
Exercice IX
-
Diagramme de Communication
Interaction
-
Comme le diagramme de squences, sert reprsenter des exemples de coopration dobjetsCependant: la dimension temporelle est reprsente par une squence et les liens entre objets sont visibles
Diagramme de Communication
-
Equivalent un diagramme de squences
Le chemin utilis par les messages est visible
Notation
Gildas:Caissier
Aurlie:Client
1: demande argent()
2 : reoit argent()
-
Notation
:Carre :Segment
origine:Point
destination:Point
Sylvain
afficher() 1 *(i=1..4):affiche()4
1.1 position()
1.2 position()
Squences conscutives et imbriques
-
Exercice X
Dessiner le diagramme de squences quivalent au digramme de communication ci-contre
5 min..
:Carre :Segment
origine:Point
destination:Point
Sylvain
afficher() 1 *(i=1..4):affiche()4
1.1 position()
1.2 position()
-
Diagrammes de comportement
Etat-transitionInteractionActivitsCas dutilisation
-
Spcifie la squence et les conditions pour coordonner diffrents comportementsAttachs un Classificateur
Diagramme Activits
-
Notation
-
Actions
Reprsentent un comportement dexcution (une tape dans lexcution dun algorithme)Peuvent avoir de pr et post conditions
Action
-
Branchement sur plusieurs transitions
Dcision
[cout>10]
[cout
-
mission de signal
Rception de signal
Syntaxe la SDL (tlcom)
Strotypes optionnels
Rception
Emission
-
Diagrammes de comportement
Etat-transitionInteractionActivitsCas dutilisation
-
Diagramme de Cas dutilisation
Spcification fonctionnelle du systmeReprsente les manire de lutiliserActeurs, Cas dutilisations
-
Entit externe au systme et amene interagir avec lui. Un acteur joue un rle vis-a-vis du systme.peut reprsenter un tre humain, un autre systme, un SGBD, etc.L'identification des acteurs nous permet de dlimiter le systme.
Acteurs
-
Cas dutilisationSont des Classificateurs: leur comportement est dfini par une interaction
peuvent avoir des associations avec dautres classificateurs
Use Case
-
Extension (extends): le comportement dfini par un cas dutilisation est tendu par un autreInclusion (includes): le comportement dun cas dutilisation est insr dans un autre
Relations entre cas dutilisation
-
NotationsubsystemCommandes
Consulter
Commander
MJ catalogue
Traiter Commande
Etablir crdit
Client
0..1
1
1
1
0..1
0..1
-
Notation
Retrait Lecture carteincludes
Transaction sur
distributeurAide en
ligneextends
-
Conseil de modlisation
Un cas dutilisation reprsente une fonctionnalit du systme, et non les options du menu principal