2009-06-05 2 views
28

Mi piace usare i diagrammi UML per descrivere il mio software. Nella maggior parte dei casi i diagrammi sono per mio uso personale e li uso per parti di codice, interazioni, ecc. Più coinvolgenti, in cui trarrò vantaggio dalla possibilità di rivederli in futuro.Esiste un approccio UML per rappresentare i thread

Una cosa che mi sono trovato a fare in modi diversi è la creazione di diagrammi. I thread per loro natura tendono a comparire nei pezzi di codice più coinvolti e tenerne traccia sono spesso uno degli scopi principali dei miei documenti di progettazione.

In passato ho usato un simbolo in un diagramma di sequenza per mostrare la creazione di un nuovo thread, ma guardando indietro a alcuni diagrammi facendo che a volte è ambiguo tra la vita di un oggetto - che diagrammi di sequenza sono per - e un filo di tutta la vita. C'è un approccio migliore per incorporare i thread in UML?

+0

sembra identico a http://stackoverflow.com/questions/1643733/how-to-illustrate-multiple-threads-in-sequence-diagram – feuGene

risposta

11

Sono riuscito a produrre uno schema che per me aveva senso al momento del disegno. La premessa di base è che ho sovrapposto le caselle grigie che rappresentano le istanze di classe con riquadri blu che rappresentano le vite dei thread. La cosa principale che mi consente di tenere traccia di è sapere quale thread eseguirò su quando chiamo determinati metodi.

Senza dubbio esistono modi migliori e più intuitivi per eseguire la modellazione di thread e classi. La misura del successo per me è se il mio diagramma mi dia ancora lo stesso livello di comprensione 6 mesi lungo la pista.

+0

Potrebbe avere un senso visivo, ma non lo è. Le sovrapposizioni non hanno significato UML. Per quanto riguarda soddisfare le vostre esigenze di documentazione, se funziona bene. –

+1

"ma la modellazione non lo fa" - vuoi dire: ma la modellazione UML non lo fa. Ho dato un'occhiata agli esempi che hai fornito ma nulla di adatto. Sospetto che le discussioni non fossero un problema così grande quando fu concepito lo standard UML. – sipwiz

+2

Sono con sipwiz - UML non possiede il termine "modellazione". Mi piace questo diagramma. –

2

Non so come, ma l'uso di un diagramma di sequenza non sembra del tutto inappropriato, considerando che un thread è in molte lingue implementato come una classe Thread (o simile).

Il modo più compatibile con UML sarebbe probabilmente quello di aggiungere un'annotazione di qualche tipo che indica che l''oggetto' rappresenta un thread.

+1

sì, prima utilizzo il diagramma di sequenza per descrivere la sincronizzazione dei thread. Ho appena trovato un altro diagramma chiamato [diagramma temporale] (http://www.visual-paradigm.com/support/documents/vpumluserguide/94/200/6715_drawingtimin.html), molto interessante. – Felix

0

Il punto più forte di UML è la struttura statica. Se si utilizzano thread di breve durata, non vedo nemmeno un modo semplice per diagrammarli. Forse puoi trovare una soluzione girando un po 'le cose: perché usi/hai bisogno di discussioni? Qual è la funzionalità che forniscono? Se interagiscono tra loro e seguono alcune API (message passing), disegnandole come componenti potrebbero avere senso.

3

I diagrammi di attività UML presentano elementi di fork e join per mostrare il flusso logico parallelo.

+0

I diagrammi di attività sono comunemente intesi per modellare un processo aziendale. Quello che mi interessa di più è modellare il funzionamento interno del mio software. Prendo il vostro punto, ci sono alcuni aspetti di un diagramma di attività che sarebbe utile nella modellazione di thread di softwar. – sipwiz

+1

@sipwiz: non è vero che i diagrammi di attività sono utilizzati solo per i processi aziendali. Per favore vedi la mia risposta. –

9

Diagrammi di attività, sequenza e stato sono tutti modi corretti per mostrare il comportamento del filo.

1a: (ai commenti di vs) Esistono due serie di diagrammi o elementi di modellazione in UML, struttura statica, come la si legge e comportamento. Qualsiasi libro ti aiuterà a capire la divisione, tipicamente nel contenuto/TOC, inoltre può essere visto a pagina 11 di Martin Fowler, UML Distilled, uno standard quasi defacto per l'avvio di UML secondo me.

2 °: (A domanda e commento di sipwiz) I diagrammi di attività non sono comunemente intesi per modellare processi di business, possono essere utilizzati per questo però, e la maggior parte degli esempi o semplice tutorial avrebbero approccio da un punto di vista commerciale.

discussione sulle opzioni per modellare le discussioni:

I diagrammi di attività - Permette di fork e specificando la concorrenza utilizzando un bar e di utilizzo linee. Notare che l'esempio in basso non è un processo aziendale, example. La maggior parte delle persone può leggere questi, affari, gestione e sviluppatori, anche se a volte possono mancare di dettagli o essere disordinati.

diagrammi di interazione Sequenza - Nello stesso post, example, potrete vedere i diagrammi di sequenza consentono di specificare un comportamento parallelo all'interno di una sequenza da boxe comportamento parallelizzabile con un'etichetta "par", questo è utile per mostrare al lettore ciò che i metodi possono o dovrebbero essere chiamati in parallelo, cioè, da diversi thread. Questo è il metodo che utilizzerei per sviluppatori dettagliati come le discussioni sulla costruzione di un oggetto.

Diagramma di stato - Lo schema di stato, proprio come l'attività, consente la concorrenza utilizzando una BAR e linee di utilizzo.

NOTA: Questi non sarà modellare uno specifico thread ed è esatto ciclo di sollevamento, in quanto è parte del livello di istanza/run-time di modellazione, se questo ciò che si vuole chiarire la tua domanda e mi risponderà . Lo modellerei semplicemente usando uno dei precedenti, poiché nessun altro oltre a un esperto MDA/UML ti chiamerà e non stai generando un sistema in esecuzione.

Inoltre: si prega di notare che ulteriori dettagli possono essere trovati nella maggior parte dei libri UML. Utilizzabile anche: http://www.jguru.com/faq/view.jsp?EID=56322

8

Tradizionalmente la filettatura è stata rappresentata graficamente utilizzando le reti di Petri. Rob Martin ha an article sul multithreading in UML che potresti trovare utile.

Aggiornamento: appena ricordato è possibile rappresentare i fili con le forcelle nei diagrammi delle attività: sono riuscito a find something that explains this.

E 'molto difficile trovare alcun tutorial gratuiti per Reti di Petri, però so Reti di Petri sono buoni per la modellazione della concorrenza, così ho Google'd "produttore-consumatore Reti di Petri" (la mia cosa filettatura preferito) e found this.

Ho anche trovato alcune diapositive che mostrano le reti di Petri modeling a Semaphore.

+2

Il link "qualcosa che spiega questo" è stato eliminato. –

2

UML è definito dalla Sovrastruttura UML, lo potete trovare qui http://www.omg.org/spec/UML. Se leggi le specifiche trovi che una classe UML può essere attiva. Una classe attiva è una classe con il meta-attributo isActive impostato su true. È anche raffigurato diversamente. Un'istanza di un oggetto di una classe attiva esegue automaticamente un "comportamento del classificatore". Come per qualsiasi comportamento, è possibile definirlo per mezzo di un'attività in cui si attendono segnali asincroni (AcceptEventActions) e invoca metodi (CallOperationAction) o altri comportamenti (CallBehaviorActions). Ecco come gli oggetti attivi sono modellati in UML. Devi solo leggere le specifiche UML.

1

Gli schemi di attività modelleranno il funzionamento interno del software con le forche e i join per rappresentare i fili. Per scoprire esattamente come modellarlo correttamente, vedere l'eccellente serie di articoli di Conrad Bock. Here è l'articolo che copre fork e join, ma è necessario seguire i collegamenti al primo articolo della serie per imparare come modellare correttamente utilizzando "Colored Petri Nets". Non è come pensi (ed è piuttosto facile)!

c'è un nuovo, in-process standard al OMG per un linguaggio chiamato Alf che fornisce una più conveniente notazione superficie per diagrammi di attività ed è destinato per rappresentare codice.Dal spec:

Un obiettivo primario di un linguaggio di azione è quello di agire come la notazione di superficie per la specifica eseguibili comportamenti all'interno di un modello più ampio che è principalmente rappresentata utilizzando i soliti notazioni grafiche di UML. Ad esempio, questo potrebbe includere metodi sulle operazioni delle classi o effetti di transizione comportamenti su macchine a stati.

Per un programmatore, probabilmente non è possibile ottenere più intuitivo di Alf. E si convertirà perfettamente in diagrammi di attività UML.