Els diagrames de UML es classifiquen en:
- Model estàtic, defineix l'estructura de classes i objectes.
- Model dinàmic, defineix les interrelacions entre objectes.
- Model d'implementació, descriu el programari en termes de components i aplicació.
Quan un objecte varia el seu comportament amb el temps, es diu que té estats.
En les aplicacions de temps real, el diagrama d'estats és molt important.
Podem trobar altres llenguatges com PetriNets i SDL (Specification and Description Language).
Conceptes
- Els objectes i sistemes en tot moment es troben en un estat.
- L'estat actual d'un objecte o sistema determina el seu futur.
- Els canvis d'estats són possibles, en UML els anomenem transicions.
- La transició entre estats es deu a un esdeveniment.
- Els diagrames d'estat seran per a modelar el comportament (complex) d'objectes i sistemes.
- El diagrama d'estats es documenta en la fase d'anàlisi.
- Fa poc s'han incorporat els diagrames de Harel a UML, amb aquests es permet que un objecte o un sistema pugui estar en dos estats alhora.
Notació
Els estats es representen en rectangles arrodonits:
El nom de l'estat no es pot repetir en enlloc del diagrama. Ha de ser únic, tot i que un objecte pot arribar diverses vegades al llarg de la seva vida a un determinat estat.
Poden tenir tres compartiments:
- El primer és el nom de l'estat.
- El segon és per a valors característics del sistema o objecte quan es troba en aquest estat.
- El tercer per a les accions que s'executen en entrar, mentre s'hi està o en sortir de l'estat.
L'estat inicial es simbolitza amb un cercle negre i l'estat final amb un cercle negre/blanc.
Les transicions es representen per fletxes, que van d'un estat a un altre:
El nom de l'esdeveniment que dispara les transicions s'escriu al costat de les fletxes.
Pot ser que una transició comporti una acció que s'indica amb /acció.
Una acció pot anar precedida per una condició de guarda que es representa com [condició]. El text que acompanya una transició té la forma següent:
esdeveniment [condició] / acció.
D'accions en podem tenir una, diverses o cap, i l'ordre d'aquestes és important perquè especifica l'ordre d'execució.
L'estat d'un objecte està determinat pels valors dels atributs. Els diagrames d'estats ens serveixen per a especificar tots els estats pels quals pot passar un objecte al llarg de la seva vida.
Per exemple, el procés dels possibles estats de l'objecte correu electrònic.
La dinàmica d'un sistema està determinada per:
- Tots els possibles estats que poden tenir els seus objectes.
- Totes les seqüències d'esdeveniments possibles.
- Totes les transicions possibles d'un estat a un altre, conseqüència dels esdeveniments que afecten els objectes.
Podem fer ús d'un diagrama d'estat per a modelar la dinàmica d'un sistema. Per exemple:
Una màquina expenedora de bitllets.
Un altre exemple seria:
En l'exemple es mostra un diagrama d'estats que modela gran part del "login" d'un sistema de banca en línia. Per a fer el "logging" al sistema, cal introduir un número de seguretat (SSN) i un número d'identificació personal (PIN), que després s'han de validar. El procés de "logging" es pot factoritzar en quatre estats del sistema:
- GettingSSN.
- GettingPIN.
- Validating.
- Rejecting.
De cada estat s'obté un conjunt complet de transicions que determina l'estat següent.
Hi ha dues autotransicions, GettingSSN i GettingPIN. A l'estat Validating l'objecte no espera que un esdeveniment dispari una transició, sinó que executa una activitat. El resultat d'aquesta activitat el determina el mateix estat.
Estat: és una situació determinada dins de la vida d'un objecte. També pot ser la durada d'una interacció durant la qual es compleix alguna condició, es porta a terme alguna acció o s'espera algun esdeveniment. No necessàriament es correspon a un instant en el temps (pot tenir una durada).
Transició simple: una transició simple consisteix en el fet que un objecte o interacció passa d'un estat a un altre, pot ser fins i tot el mateix. La transició es dona quan hi ha un esdeveniment més una condició de "guarda". Tot estat pot tenir transicions d'arribada i transicions de sortida.
Transició interna: són pseudotransicions en les quals no hi ha canvi d'estat. Serveixen per a especificar accions que s'han d'executar en resposta a esdeveniments que no provoquen cap canvi d'estat en l'objecte.
Acció: una acció és l'especificació d'un procés atòmic (o s'executa totalment o no s'executa). D'una transició, es pot executar una acció o més. Les accions es poden descriure mitjançant procediments.
Senyals: els objectes poden rebre mitjançant missatges peticions d'operacions o senyals. Els senyals es diferencien de les operacions en el fet que no fan cap procés i només poden produir esdeveniments. A la vegada, els esdeveniments provoquen transicions que sí que són capaces de cridar accions.
Senyal → esdeveniment → transicions → accions
Esdeveniments: fets que quan es produeixen provoquen transicions d'un estat a un altre i també es poden donar determinades accions. Els esdeveniments no van lligats a cap objecte en concret, sinó que formen part del paquet. Cada esdeveniment té nom i paràmetres. Quan es produeix un esdeveniment cal que sigui tractat, si no es perd, a menys que es declari diferit. Els esdeveniments poden ser del tipus síncron (el transmissor s'ha de coordinar amb el receptor abans de l'enviament de dades) o assíncron.
Tipus d'esdeveniments:
- De crida: es produeixen quan es crida una operació d'un objecte.
- De senyal: es produeix quan es rep un senyal.
- De canvi: és una notificació que una determinada condició ha succeït.
- De temps: representa que o bé ha passat un determinat temps o bé és una determinada hora.
Hi ha uns esdeveniments que s'anomenen interns i són pseudoesdeveniments perquè estan lligats a un estat en comptes d'una transició. Serveixen per a encendre accions que no estan vinculades a cap canvi d'estat. Poden ser d'entrada, de sortida o d'acció:
- El d'entrada es produeix quan l'objecte entra en l'estat corresponent. No té paràmetres ni guarda, i s'identifica amb la paraula "entry".
- El de sortida es produeix en la sortida de l'estat i s'identifica amb la paraula "exit".
- El d'acció especifica accions que es generen quan s'arriba a un determinat estat, i desapareixen en el moment que en surt. Es declaren amb la paraula "do".
La signatura d'esdeveniments aleshores dependrà del seu tipus:
- De crida o senyal: Nom_esdeveniment(NomParametre:exp_tipus,...)*
- De temps: after(expressió_de_temps) After és la durada, per exemple, when(hora/data)
- De canvi: when(expressió_booleana)
Sintaxi
- La condició de guarda és una expressió que pot prendre el valor de cert o fals, s'escriu en pseudocodi i determina quan es compleix l'esdeveniment.
- L'acció és una especificació en pseudocodi que indica quins procediments s'hauran d'executar quan es compleix l'esdeveniment.
- Un enviament pren la forma destinació '.' missatge'(argument','...')', on destinació poden ser un o més objectes i missatge és una operació de l'objecte de destinació o un senyal.
Amb UML, si hem de definir un senyal, ho podem fer com una classe, que no té operacions ni relacions, només herència, i que solament té com a atribut els paràmetres de senyal (amb l'estereotip <<signal>>). Al símbol de classe se li pot afegir un comportament especial per a indicar quins són els senyals als quals és sensible.
Un exemple seria:
introduir_targeta[targeta=vàlida]/obrir_porta^registrar_entrada
O
introduir_targeta[targeta=vàlida]/defer obrir_porta^registrar_entrada.
(aquest ho deixa per a després: diferit)
Exemples:
Transicions complexes: Un objecte o interacció poden estar en més d'un estat al mateix temps, i hi pot haver més d'una transició sortint d'un estat i més d'una transició arribant a un estat. Aquestes s'anomenen transicions complexes. S'utilitza un pseudoestat intermedi que s'anomena sincronització o de bifurcació. Un altre exemple de factures:
Estats compostos: Un estat compost és aquell en el qual hi ha diversos subestats possibles, cadascun dels quals també pot ser alhora compost o simple. Tot estat compost té un diagrama de subestats, que poden ser concurrents (alhora) o seqüencials (un darrere de l'altre). Es representa com un estat simple però amb 2 compartiments. Dins d'un estat compost hi pot haver transicions que van de subestat a subestat; transicions que entren o surten de l'estat compost o bé, transicions que tenen com a destinació un indicador d'història d'estats, que és un pseudoestat que recorda l'estat del qual va sortir. De l'indicador d'història pot sortir una transició cap a un subestat i serà la destinació en el cas que la transició tingui lloc sense que s'hagi passat cap vegada a l'estat compost.
Finalment hi ha unes transicions que s'anomenen stubbed, que tenen com a destinació o origen algun subestat d'un estat compost que no s'identifica en el diagrama.
Exercicis
- Dissenya el diagrama d'estats d'un objecte treballador tenint en compte que aquest pot estar a l'atur, actiu o jubilat. En el diagrama s'han de veure els possibles canvis d'estat del treballador quan sigui contractat, es jubili o finalitzi una relació laboral.

- En una biblioteca es vol portar el control dels llibres existents, dels socis de la biblioteca i dels préstecs que s'han fet. De cada llibre poden existir un o molts exemplars i cada exemplar s'haurà de trobar en un catàleg. Per això es podrà donar d'entrada un exemplar al catàleg o donar-lo de sortida. Cada exemplar es troba en un possible estat:
- Disponible
- Prestat
- No disponible
A l'hora d'efectuar el préstec, caldrà validar que existeix un soci que el demana i la disponibilitat de l'exemplar. Les accions a fer podran ser la de prestar un llibre i la de retornar-lo. Cada element del sistema tindrà els seus atributs propis, que es deixen a elecció de l'alumne. Per a aquest enunciat, es demana la realització d'un diagrama de classes implicades en l'UML i el diagrama d'estat d'un exemplar.
3.a) Especifica un diagrama d'estats del canvi de marxes d'un cotxe automàtic.b) Especifica un diagrama d'estats del canvi de marxes d'un cotxe manual.
- Una universitat europea té el següent procés de matriculació."Quan un alumne aprova el batxillerat es pot preinscriure a vuit opcions universitàries i es pot presentar a les proves d'accés per a aprovar-les. Si no les aprova pot presentar-se l'any següent, però es conserva la preinscripció. Si aprova les proves d'accés entra en el procés d'assignació de plaça i segons la seva nota se li assigna la primera opció o les altres. En el cas d'assignar plaça en primera opció entra en el procés de matrícula de juliol. Si se li assigna les places 2 a 8 entra en el procés de matrícula de setembre. Si no se li pot assignar plaça queda en situació de no admès.Els processos de matrícula de juliol i setembre tenen dues etapes successives: matricular-se i pagar. Si un alumne s'ha de matricular i no ho fa (té de termini fins a l'1 d'agost i l'1 d'octubre, respectivament) passa a la situació de no admès."Realitzeu el diagrama d'estats d'alumne, utilitzant un diagrama compost sense detallar per a representar el procés de matriculació i pagament una vegada se li assigna la plaça.Milloreu el diagrama especificant detingudament el diagrama d'estats amb els subestats inclosos el diagrama d'estat compost.
- Una empresa està desenvolupant un programari per a la gestió de campanyes publicitàries. Representa el diagrama d'estats de l'objecte Campanya tenint en compte:Estem considerant el funcionament de la classe campanya. Una campanya s'inicia en el moment que se li assigna personal. En aquest moment se li assigna un director a la campanya i passa a estar "comissionada". Quan es dóna l'autorització per part de l'empresa i el client signa el contracte, s'activa la campanya. Si la campanya finalitza, queda marcada com a completada i es realitza una declaració final. Només si el client paga tota la quantitat definida en el contracte de campanya passa a estar pagada, i transcorreguts 30 dies s'arxiva i es desassigna el personal i el director assignats.














