Diagrama d'estats: diferència entre les revisions

Contingut suprimit Contingut afegit
m neteja i estandardització de codi
m Revisió i eliminat {{MF|data=2014}}
Etiqueta: editor de codi 2017
Línia 1:
{{MF|data=2014}}
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ó cal 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 és un diagrama utilitzat per identificar cadascuna de les rutes o camins que prendreprendrà un flux d'informació després d'efectuar-se cada procés. Permet identificar sota quequins arguments s'executaexecuten cadascun dels processos i en quin moment podran tindretenir una variació. El diagrama d'estats permet visualitzar d'una forma seqüencial l'execució de cadascun dels processos.
 
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òmatsteoria Teoriad'autòmats''". Una altra representació possible és la taula de transició d'estats.
 
== Graf dirigit ==
Linha 20 ⟶ 19:
*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).
Linha 31 ⟶ 30:
 
=== Exemples ===
==== Màquines DFA, NFA, GNFA, o Moore ====
S <sub> 1 </sub> i S <sub> 2 </sub> són estats i S <sub> 1 </sub> és un estat d'acceptació. Cada aresta està etiquetat amb l'entrada.
: [[Fitxer:DFAexample.svg|DFAexample.svg]]
Linha 40 ⟶ 39:
 
== Quadre d'estats Harel ==
[[Fitxer:OO Modeling languages history.jpg|thumb|250px|Diagrama que mostra com els quadres d'estat Harel van contribuir als mètodes i notacipns orientats a objectes]]
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 ==
El [[Llenguatgellenguatge unificat de modelat]] (UML) especifica una notació estandarditzada per diagrames d'estat que es pot utilitzar per descriure classes, sistemes, subsistemes o fins i tot processos de negoci. Els diagrames d'estat també mostren el conjunt d'estats pels 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.
Línia 57:
 
== Diagrama d'estats vs diagrama de flux==
Molt sovint es confonen els diagrames d'estat amb [[Diagrama de flux|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èrtexs.
 
La figura següent mostra una comparació d'un diagrama d'estat amb un diagrama de flux. Una màquina d'estat (figura (a)) realitza accions en resposta a esdeveniments explícits. En canvi, el diagrama de flux (figura (b)) no necessita esdeveniments explícits, sinó transicions d'un node a node en el seu gràfic automàticament en finalitzar les activitats.<ref name="Practical UML Statecharts in C/C++, Second Edition: Event-Driven Programming for Embedded Systems">{{cita llibre
| cognom = Samek
| nom = Miro
| títol = Practical UML Statecharts in C/C++, Second Edition: Event-Driven Programming for Embedded Systems
| editor = Newnes
| any = 2008
| isbn = 978-0-7506-8706-5
| pàgina = 728}}</ref>
 
:[[Fitxer:statechart vs flowchart.png|Diagrama d'estat (a) i diagrama de flux (b)]]
 
==Events==
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). És un EventCanvi.
 
• Recepció d'un senyal explícit d'un objecte a un altre. És un EventSenyal.
 
• Recepció d'una crida a una operació. És un Eventcrida.
 
• Pas de cert període, després d'entrar a l'estat actual, o de certa hora i data concretes. És 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==
Una acció és una operació atòmica, que no es pot interrompre per un event i que s'executa fins a 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 o
 
• l'enviament d'un senyal a un objecte.
 
==Activitats==
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==
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 elementsElements bàsics de notació que poden ser utilitzats per compondre un diagrama d'estats i altres==
[[Fitxer:UML_state_diagram.png|miniatura|DiagramaExemple delsde Estats UMLdiagrama d'exempleestats UML.]]
* 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 perquè la transició tingui lloc. Si es realitza una acció durant la transició, s'afegeix a l'etiqueta després de "/". NombreDeEventoNomDeEvent <nowiki> [ExpresiónGuardaExpressióGuarda] </nowiki>/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.