Professional Documents
Culture Documents
S1 E [C] / A S2
off
temperatura
spenta on [acqua non gelata] desiderata
inizio in-funzione
off
temperatura
temperatura desiderata temperatura
inferiore inferiore
off scalda
Transizione
Ogni transizione connette due stati
Il diagramma corrisponde ad un automa deterministico (transizioni
dall stesso stato hanno eventi diversi), in cui un evento un input,
mentre un azione un output
La condizione detta anche guardia (guard)
Levento (quasi) sempre presente (condizione e azione sono
opzionali)
E[C]/a
A B B
e1/a1
SI A
e/a C
NO
A
Progettazione del Software - Diagrammi degli stati e delle transizioni 6
Esempio di diagramma degli stati e delle
transizioni per la classe Motore
Lanalisi dei requisiti ha evidenziato lesistenza, nel diagramma
delle classi, di una classe Motore. Tracciare il diagramma degli
stati e delle transizioni a partire da questi requisiti.
Esercizio 1: soluzione
muovi cursore/
evidenzia elemento menu
do / attivit
Esempio (scaldabagno):
on / accende-spia
acceso
spento do/scalda-acqua
off / spenge-spia
Stato composto
Uno stato composto (o macro-stato) uno stato che ha un nome, e
che contiene a sua volta un diagramma
Esiste uno stato iniziale del macro-stato
I sottostati ereditano le transizioni in uscita del macro-stato
Esercizio 2
Supponiamo che nel diagramma delle classi abbiamo rappresentato
la classe InterruttoreAutomatico . Tracciare il diagramma degli
stati e delle transizioni per tale classe, tenendo conto delle seguenti
specifiche.
attivo
notte
attesa movimento/resetTimer
inattivo Movimento
giorno
5 minuti luce
Accesa
Esercizio 3
Supponiamo che nel diagramma delle classi abbiamo rappresentato
la classe Libro . Tracciare il diagramma degli stati e delle
transizioni per tale classe, tenendo conto delle seguenti specifiche.
scadenza cancellazione
termini dal catalogo
restituzione
in
ritardo
sollecito/invio lettera
Progettazione del Software - Diagrammi degli stati e delle transizioni 19
Esercizio 4
Supponiamo che nel diagramma delle classi abbiamo rappresentato la
classe Fax . Tracciare il diagramma degli stati e delle transizioni per
tale classe, tenendo conto delle seguenti specifiche.
ricezione
squilla telefono
riaggancio accetta stringaOk
inattivo connessione
fine ela
borazio
ne
invio fine elabora
fax invio dati
trasmissione
Esercizio 5
Supponiamo che nel diagramma delle classi abbiamo rappresentato
la classe DispositivoPortatile . Tracciare il diagramma degli stati
e delle transizioni per tale classe, tenendo conto delle seguenti
specifiche.
Esercizio 5: soluzione
acceso
Invio/
OnOff comunica emergenza pronto
spento
OnOff
Emergenza
Invio tastiera
tastiera disattivata
attivata Invio
Principi generali
Assumiamo di avere diversi oggetti reattivi, cio con associato un diagramma stati-
transizioni.
Inoltre gli eventi possono avere parametri con specifico contenuto informativo (il
cosiddetto payload del messaggio)
Una azione pu a sua volta lanciare un evento (tipicamente uno solo per semplicit)
per un altro oggetto o in broadcasting.
Le variabili di stato ausiliarie non sono di interesse per il cliente servono solo alla
corretta realizzazione delle azioni associate alle varie transizioni. Quindi non vanno
confuse con con gli attributi delloggetto stesso.
Playlist
play(player)[playlist non vuota]/playSong{dest:player}(br)
Attesa Esecuzione
reset/stopSong{dest:player}
Player
playSong{mitt:playlist}(br)
Pronto Esecuzione
/ done{dest:playlist}
stopSong
InizioSpecificaStatiClasse PlayList
Stato iniziale:
statoCorrente = Attesa -- sta per non definito
player = --
prossimobrano = --
FineSpecifica
Azione:
pre: nessuna
post: nuovoevento = playSong{mitt = this, dest = player}(br: Brano)
and
this.player = player and nuovoevento denota
levento da mandare
this.prossimobrano = 0 and con lazione
<this,br> in contiene and
posizione(contiene(this,br)) = this.prossimobrano
FineSpecifica
Progettazione del Software - Diagrammi degli stati e delle transizioni 33
Evento: done
Azione:
pre: nessuna (implicitamente abbiamo sempre evento.mitt=this.player)
post: nuovoevento =
playSong{mitt = this, dest = this.player}(br: Brano) and
this.player = Pre(this.player) and
this.prossimobrano = Pre(this.prossimobrano)+1 and
<this,br> in contiene and
posizione(contiene(this,br)) = this.prossimobrano
FineSpecifica
Progettazione del Software - Diagrammi degli stati e delle transizioni 34
Specifica delle transizioni di PlayList
InizioSpecificaTransizioniClasse PlayList
Evento: done
Azione:
pre: nessuna
post: this.prossimobrano = -- and
this.player = --
FineSpecifica
Progettazione del Software - Diagrammi degli stati e delle transizioni 35
InizioSpecificaTransizioniClasse PlayList
Evento: reset
Condizione: nessuna
Azione:
pre: nessuna
post: nuovoevento = stopSong{mitt = this, dest = Pre(this.player)}
this.prossimobrano = -- and
this.player = --
FineSpecifica
Progettazione del Software - Diagrammi degli stati e delle transizioni 36
Specifica degli stati di Player
InizioSpecificaStatiClasse Player
Stato iniziale:
statoCorrente = Pronto
playlist = --
brano = --
FineSpecifica
InizioSpecificaTransizioniClasse Player
Evento: playSong(br:Brano)
Condizione: nessuna
Azione:
pre: nessuna
post: this.playlist = evento.mitt and
this.brano = br
FineSpecifica
Condizione: nessuna
Azione:
pre: nessuna
post: nuovoevento = done{mitt = this, dest = Pre(this.playlist)}
this.playlist= -- and
this.brano = --
FineSpecifica
InizioSpecificaTransizioniClasse Player
Evento: stopSong
Condizione: nessuna
Azione:
pre: evento.mitt = Pre(this.playlist)}
post: this.playlist= -- and
this.brano = --
FineSpecifica