Come visualizzare la funzionalità del timer nel diagramma di sequenza?

1

Sto sviluppando software per la comunicazione con dispositivi esterni tramite porta seriale. Per capire meglio la nuova funzionalità sto cercando di visualizzarlo nel diagramma di sequenza. Il flusso degli eventi è il seguente. Invio al comando del dispositivo per resettarlo. Questa operazione è asincrona, quindi vi è un certo ritardo tra richiesta e risposta (in genere 100 ms). Ci può essere un caso in cui la risposta non arriva mai (per esempio il dispositivo non è connesso alla porta specificata o è attualmente spento). A tale scopo creo un timer con il doppio del tempo di risposta massimo. Nel mio caso è 2 * 125 ms = 250 ms. Se la risposta arriva in un intervallo di tempo predefinito, distruggo già il timer in esecuzione. Se la risposta non arriva nell'intervallo predefinito, il timer avvia un'azione. Dopo questa azione possiamo distruggerlo. Come modellare efficacemente questa situazione nel diagramma di sequenza?

Addendum 1:

Sulla base dei consigli fatti da scarfridge ho disegnato il seguente diagramma UML. Anche il commento di Ozair è utile per semplificare ulteriormente il diagramma.

    
posta truthseeker 20.06.2012 - 09:31
fonte

3 risposte

3

Ricorda che stai solo disegnando diagrammi. Questo non è un codice in qualche linguaggio grafico. Se si utilizza il meccanismo del timer in tutte le comunicazioni con il dispositivo, basta modellarlo una volta (un suggerimento per questo può essere trovato alla fine di questa risposta). Lasciare fuori il timer nella maggior parte dei diagrammi. Dovresti modellare a un livello specifico di astrazione. Non lasciare questo livello o il tuo diagramma diventerà gonfio e ai lettori mancherà il punto che stai cercando di fare. Indica chiaramente che caso stai modellando. Se l'errore di comunicazione non ha importanza per la situazione, non modellarlo. Se si desidera spiegare il comportamento dopo un errore di comunicazione, non modellare il caso privo di errori. Se si desidera modellare entrambi, prendere in considerazione l'utilizzo di più diagrammi. E ancora, indica chiaramente che caso stai modellando.

Per il timer attuale non vedo molti problemi. Ti suggerisco di creare una linea di vita per il tuo timer, uno per il dispositivo e uno per chiunque parli al dispositivo (chiamiamolo controller) e il timer. Disegna un messaggio "reset" dal controller al dispositivo seguito da un messaggio "conto alla rovescia" dal controller al timer. Se si desidera modellare il caso della risposta ricevuta, disegnare un messaggio "reset finito" dal dispositivo al controller. Ora il controller dice al timer di fermarsi. Nel caso di non risposta è possibile disegnare un messaggio "time up" dal timer al controller. Puoi combinare entrambi con un frammento alt e guardie come "dispositivo non connesso".

    
risposta data 20.06.2012 - 09:57
fonte
3

Vedi questa pagina per come modellare i ritardi tra i messaggi in generale.

Se vuoi creare un diagramma di sequenza che copra solo il caso positivo, allora questo è tutto ciò di cui hai bisogno. Se vuoi coprire entrambe le possibilità in un diagramma, devi utilizzare una scatola alternativa , dove hai un ritardo superiore a 250ms e uno più piccolo, e quindi, ovviamente, le diverse reazioni che desideri eseguire.

    
risposta data 20.06.2012 - 09:57
fonte
1

I I suggerimenti di Scarfridge sono molto validi, che devi avere un certo livello di astrazione per i diagrammi grafici.

Puoi utilizzare l'operatore di interazione negativo come illustrato nel seguente diagramma.

Riferimento: link

risposta data 20.06.2012 - 10:39
fonte

Leggi altre domande sui tag