Diagrama d'estats

De Viquipèdia
Dreceres ràpides: navegació, cerca


Un diagrama d'estat és un tipus de diagrama utilitzat en informàtica i àrees similars per descriure el comportament de sistemes. Els diagrames d'estat requereixen que el sistema descrit estigui compost d'un nombre finit d'estats; de vegades per a la seva creació es necessita d'una capacitat d'abstracció notable. Hi ha moltes formes de diagrames d'estat, que difereixen lleugerament i tenen una semàntica diferent.

Quant a la representació, un diagrama d'estats és un gràfic que els nodes del qual són estats i els arcs dirigits del qual són transicions etiquetades amb els noms dels esdeveniments. Un estat es representa com una caixa arrodonida amb el nom de l'estat en el seu interior. Una transició es representa com una fletxa des de l'estat origen a l'estat destí. La caixa d'un estat pot tenir 1 o 2 compartiments. Al primer compartiment apareix el nom de l'estat. El segon compartiment és opcional, i en ell poden aparèixer accions d'entrada, de sortida i accions internes.

En UML, un diagrama d'estats es un diagrama utilitzat per identificar cadascuna de les rutes o camins que prendre un flux d'informació després d'efectuar-se cada procés. Permet identificar sota que arguments s'executa cadascun dels processos i en que moment podran tindre una variació. El diagrama d'estats permet visualitzar d'una forma seqüencial l'execució de cadascun dels processos.


Introducció[modifica | modifica el codi]

Els diagrames d'estat s'utilitzen per donar una descripció abstracta del comportament d'un sistema. Aquest comportament és analitzat i representat en una sèrie d'esdeveniments, que podrien passar en un o més estats possibles. Normalment cada diagrama representa en general els objectes d'una sola classe i realitza un seguiment dels diferents estats dels objectes a través del sistema.

Els diagrames d'estat es poden utilitzar per representar gràficament les màquines d'estats finits, aquest camp fou presentat per Taylor Booth en el seu llibre de 1967 "Màquines seqüencials i autòmats Teoria". Una altra representació possible és la taula de transició d'estats.

Graf dirigit[modifica | modifica el codi]

Una manera clàssica d'un diagrama d'estats per a una màquina d'estats finits és un graf dirigit amb els següents elements:

Estats Q : un conjunt finit de vèrtexs representats normalment per cercles i etiquetats amb símbols designadors únics o paraules escrites dins d'ells (Booth (1967) p. 69, Hopcroft i Ullman (1979) p. 16, Sipser (2006) p. 34).

Símbols d'Entrada S : una col·lecció finita de "símbols" d'entrada o designadors S (Booth, Hopcroft i Ullman, Sipser). Per a una Autòmat finit (AFD), Màquina d'Estats Finits no Determinista (AFN), Màquina d'estats finits no Determinista Generalitzada (GNFA), o una Màquina de Moore, l'entrada està significada a cada aresta, normalment a prop de l'estat originador. Per a una Màquina de Mealy, l'entrada i la sortida estan significats sobre cada aresta normalment separats per una barra "/":

Les etiquetes d'entrada/Mealy sobre cada aresta (fletxa): "1/0" designa que el símbol "1" va causar el símbol "0" com a sortida.

Símbols de sortida Z : una col·lecció finita de "símbols" de sortida o designadors (Booth, Hopcroft i Ullman, Sipser). Per a una Màquina de Mealy, l'entrada i la sortida estan significats en cada aresta com es pot veure a continuació. Per a una Màquina de Moore la sortida de l'estat està escrita normalment dins del cercle de l'estat, separat del designador de l'estat amb una barra "/".

Exemple: Si un estat té diverses sortides el diagrama ha de reflectir això: eg "q5/1,0" designa que l'estat q5 té sortides a = 1, b = 0. Aquest designador serà escrit dins del cercle de l'estat.

La "Funció de sortida?" representa el mapejat ? de símbols d'entrada R x estats Q en símbols de sortida Z (Booth).

Arestes d : representa les "transicions" entre dos estats causats per l'entrada (identificats els seus símbols dibuixats en els "arestes"). Un 'aresta' està dibuixat normalment com una fletxa dirigida des de l'estat present en el següent estat. d representa el mapejat dels símbols d'entrada R x estats Q en els símbols de sortida Z (Booth, Hopcroft i Ullman, Sipser).

Estat inicial qo : (no vist en els exemples anteriors). L'estat inicial qo està representat normalment per una "fletxa des de cap part" (cf. Sipser (2006) p. 34, Hopcroft i Ullman (1979) p. 16). En textos antics (per exemple Booth (1969), McCluskey (1965), Hill i Peterson (1974)) l'estat inicial no es mostrava i era inferit del text.

Estat (s) d'Acceptació F : Si es fa servir - una col lecció de cercles dobles usats per designar els estats d'acceptació (Hopcroft i Ullman, Sipser). De vegades la funció de el/estat/s d'acceptació s'entén com a estat/s " F inal/s" (cf. Hopcroft i Ullman (1979) Figure 2.15, p. 33).

Exemples[modifica | modifica el codi]

Màquines DFA, NFA, GNFA, o Moore[modifica | modifica el codi]

S 1 i S 2 són estats i S 1 és un estat d'acceptació. Cada aresta està etiquetat amb l'entrada.

DFAexample.svg

Màquina de Mealy[modifica | modifica el codi]

S 0 , S 1 , i S 2 són estats. Cada fletxa està etiquetat amb " j / k " on j és l'entrada i k és la sortida.

Mealymachine jaredwf.png

Quadre d'estats Harel[modifica | modifica el codi]

Els quadres d'estats (statecharts) Harel (desenvolupats en 1987 per David Harel) estan guanyant en ús ampli atès que una variant ha arribat a ser part del UML. El tipus de diagrama permet modelar superestat, diagrames d'estats concurrents i eg modelar les activitats com a part d'un estat.

Els diagrames d'estats clàssics són anomenats diagrames "or", ja que la màquina només pot estar en un estat o en un altre. Amb els quadres d'estats Harel és possible modelar màquines "and", on una màquina està en dos o més estats al mateix temps. Això és degut a la possibilitat de tenir superestat.

Diagrama d'estats UML[modifica | modifica el codi]

Llenguatge unificat de modelat (UML) especifica una notació estandarditzada per diagrames d'estat que pot utilitzar per descriure classes, sistemes, subsistemes o fins i tot processos de negoci. Els diagrames d'estat també mostren el conjunt d'estats per els quals passa un objecte, durant la seva vida en una aplicació en resposta a events (per exemple, missatges rebuts, temps sobrepassat o errors), junt amb les seves respostes i accions. També il·lustren quins events poden canviar l'estat dels objectes de la classe. Normalment contenen estats i transicions. Com els estats i les transicions inclouen a la vegada, events, accions i activitats, anem a veure primer les seves definicions.

Un event és un esdeveniment important a tenir en compte per al sistema. Un estat és la condició d'un objecte en un moment determinat: el temps que transcorre entre events. Una transició és una relació entre dos estats, i indica que, quan ocorre un event, l'objecte passa de l'estat anterior al següent.

A l'igual que altres diagrames, en els diagrames d'estat poden aparèixer notes explicatives i restriccions.

Hi ha moltes formes de diagrames d'estats, cadascuna amb semàntica lleugerament diferent. La més popular que s'empra en les tècniques de Programació orientada a objectes (POO) es basa en la taula d'estats de David Harel (Vol 8). OMT va ser qui la va fer servir per primera vegada per als mètodes de Programació orientada a objectes (POO) i va ser adoptada per Grady Booch en la seva segona edició (1994).

Alternatives semàntiques[modifica | modifica el codi]

Hi ha altres maneres de representar diagrames d'estat. Per exemple, existeixen eines per a la modelització i la lògica per al disseny de controladors encastats. Es combinen diagrames jeràrquics, gràfics de flux i taules de veritat en un sol llenguatge, donant lloc a un formalisme diferent. La imatge d'aquest enllaç il·lustra aquesta combinació de gràfics i diagrames d'estat de flux, donant lloc a un conjunt d'estats que representa l'estat d'un cronòmetre i un gràfic de flux per al control dels tics del rellotge.

Diagrama d'estats vs diagrama de flux[modifica | modifica el codi]

Molt sovint es confonen els diagrames d'estat amb diagrames de flux.

Per exemple, una màquina d'estats realitza accions en resposta als esdeveniments explícits, per contra, el diagrama de flux no necessita esdeveniments explícits, sinó més aviat la transició d'un node a un altre, en la seva gràfica de forma automàtica al final de les activitats.

En un diagrama d'estat, el tractament s'associa als arcs (transicions), mentre que en un diagrama de flux, estan associats amb els vèrtex.

Events[modifica | modifica el codi]

Un event és una ocurrència que pot causar la transició d'un estat a un altre d'un objecte. Aquesta ocurrència pot ser una: • Condició que pren el valor de verdader (normalment descrita com una expressió booleana). Es un EventCanvi. • Recepció d'un senyal explícit d'un objecte a un altre. Es un EventSenyal. • Recepció d'una crida a una operació. Es un Eventcrida. • Pas de cert període de temps, després d'entrar al estat actual, o de certa hora i data concretes. Es un EventTemps. El nombre d'un event té dintre del paquet en el qual està definit i pot ser utilitzat en els diagrames d'estats per les classes que tenen visibilitat dintre del paquet. Un event no és local a la classe on està declarat

Accions[modifica | modifica el codi]

Una acció és una operació atòmica, que no es pot interrompre per un event i que s'executa fins la seva finalització. Una acció pot ser: • una crida a una operació (a l'objecte al qual pertany el diagrama d'estats o també a un altre objecte visible), • la creació o la destrucció de l'altre objecte • l'enviament d'un senyal a un objecte.

Activitats[modifica | modifica el codi]

Quan un objecte està en un estat, generalment està esperant que succeeixi algun esdeveniment. Encara que, a vegades, volem modelar una activitat que s'està executant. És a dir, mentre un objecte está en un estat, dit objecte realitza un treball que continuarà fins que sigui interromput per un esdeveniment. Llavors, una acció contrasta amb una activitat, ja que aquesta última pot ser interrompuda per altres esdeveniment.

Estats[modifica | modifica el codi]

Quan un estat identifica una condició o una situació en la vida d'un objecte durant la qual satisfà alguna condició, executa alguna activitat o espera que succeeixi algun event. Un objecte es queda en un estat durant un temps finit (no instantani).A continuació es definiran els element bàsics de notació.

Els elements bàsics de notació que poden utilitzats per compondre un diagrama d'estats i altres[modifica | modifica el codi]

Diagrama dels Estats UML d'exemple.
  • Cercle ple, apuntant a un estat inicial
  • Cercle buit que conté un cercle ple més petit a l'interior, indicant l'estat final (si existís)
  • Rectangle arrodonit, denotant un estat. A la part superior del rectangle hi ha el nom de l'estat. Pot contenir una línia horitzontal a la meitat, sota de la qual s'indiquen les activitats que es fan a l'estat
  • Fletxa, denotant transició. El nom de l'esdeveniment (si existís) que causa aquesta transició etiqueta el cos de la fletxa. Es pot afegir una expressió de Guarda, tancada en claudàtors ([]) denotant que aquesta expressió ha de ser certa per a que la transició tingui lloc. Si es realitza una acció durant la transició, s'afegeix a l'etiqueta després de "/". NombreDeEvento [ExpresiónGuarda] /acció
  • Línia horitzontal gruixuda amb x> 1 línies entrant i 1 línia sortint o 1 línia entrant ix> 1 línies sortint. Aquestes denoten Unió/Separació, respectivament.


Altres extensions[modifica | modifica el codi]

Una extensió interessant és els arcs que es deriven de qualsevol nombre d'estats a qualsevol nombre d'estats. Això només té sentit si el sistema se li permet estar en diversos estats a la vegada, el que implica que un estat individual només descriu un estat o un altre aspecte parcial de la situació general i global. El formalisme resultant es coneix com una xarxa de Petri.

Una altra extensió permet la integració dels diagrames de flux dins de gràfics d'estat Harel. Aquesta extensió dóna suport al desenvolupament de programari que és alhora per esdeveniments i fluxos de treball impulsats.


Vegeu també[modifica | modifica el codi]

Referències[modifica | modifica el codi]

A Wikimedia Commons hi ha contingut multimèdia relatiu a: Diagrama d'estats Modifica l'enllaç a Wikidata
  • Taylor Booth (1967) Sequential Machines and Automata Theory , John Wiley and Sons, New York. Library of Congress Catalog Card Number: 67-25924.