2009-06-05 11 views
28

Me gusta usar diagramas UML para describir mi software. En la mayoría de los casos, los diagramas son para mi propio uso y los utilizo para piezas de código más involucradas, interacciones, etc. donde me beneficiaré de poder mirar hacia atrás en el futuro.¿Existe un enfoque UML inituitivo para representar hilos

Una cosa que me he encontrado haciendo de varias maneras diferentes es la diagramación de hilos. Los subprocesos, por su naturaleza, tienden a aparecer en los fragmentos de código más complicados, y el seguimiento de los mismos suele ser el objetivo principal de mis documentos de diseño.

En el pasado utilicé un símbolo en un diagrama de secuencia para mostrar la creación de un nuevo hilo pero mirando algunos diagramas haciendo que a veces sea ambiguo entre la vida de un objeto, para qué son los diagramas de secuencia y un hilo toda la vida. ¿Hay un mejor enfoque para incorporar hilos en UML?

+0

parece idéntico a http://stackoverflow.com/questions/1643733/how-to-illustrate-thultiple-threads-in-sequence-diagram – feuGene

Respuesta

11

Me las arreglé para producir un diagrama que tiene sentido para mí en el momento de dibujarlo. La premisa básica es que he superpuesto cuadros grises que representan instancias de clases con recuadros azules que representan la duración de los hilos. Lo principal que me permite seguir es saber qué hilo ejecutaré cuando llame a ciertos métodos.

Sin duda hay formas mejores y más intuitivas de hacer el modelado de hilo y clase. La medida del éxito para mí es si mi propio diagrama todavía me da el mismo nivel de comprensión 6 meses en la pista.

+0

Puede tener sentido visualmente, pero el modelado no funciona. Las superposiciones no tienen significado UML. En cuanto a satisfacer sus necesidades de documentación, si eso funciona bien. –

+1

"pero modelar no es así", quiere decir: pero el modelado UML no lo hace. Revisé los ejemplos que me proporcionó, pero no encajó nada. Sospecho que los hilos no fueron un problema tan grande cuando se concibió el estándar UML. – sipwiz

+2

Estoy con sipwiz - UML no posee el término "modelado". Me gusta mucho este diagrama. –

2

No sé de una manera, pero usar un diagrama de secuencia no parece del todo inapropiado, teniendo en cuenta que un hilo está en muchos idiomas implementado como una clase Thread (o similar).

La forma más compatible con UML probablemente sería agregar una anotación de algún tipo que indique que el 'objeto' representa un hilo.

+1

sí, utilizo el diagrama de secuencia antes para describir la sincronización de subprocesos. Acabo de encontrar otro diagrama llamado [diagrama de tiempos] (http://www.visual-paradigm.com/support/documents/vpumluserguide/94/200/6715_drawingtimin.html), muy interesante. – Felix

0

El punto más fuerte de UML representa la estructura estática. Si usa hilos de corta duración, tampoco veo una forma fácil de diagramarlos. Tal vez puedas encontrar una solución cambiando las cosas un poco: ¿por qué usas/necesitas hilos? ¿Cuál es la funcionalidad que proporcionan? Si interactúan entre ellos y siguen alguna API (paso de mensajes), dibujarlos como componentes podría tener sentido.

3

Los diagramas de actividad UML tienen elementos de unión y tenedor para mostrar el flujo paralelo de la lógica.

+0

Los diagramas de actividad se entienden comúnmente para modelar un proceso comercial. Lo que más me interesa es modelar el funcionamiento interno de mi software. Sin embargo, considero que hay algunos aspectos de un Diagrama de actividad que serían útiles para modelar hilos de softwar. – sipwiz

+1

@sipwiz: No es cierto que los diagramas de actividad solo se utilicen para procesos de negocios. Por favor mira mi respuesta. –

9

Actividad, Secuencia y Diagramas de estados son todos formas correctas de mostrar el comportamiento de subprocesos.

1st: (a los comentarios de vs) Hay dos conjuntos de diagramas o elementos de modelado en UML, estructura estática, como usted dice, y comportamiento. Cualquier libro lo ayudará a comprender la división, por lo general en los contenidos/TOC. Además, en mi opinión, se puede ver en la página 11 del UML Destilado de Martin Fowler como un estándar casi de facto para comenzar UML.

2º: Diagramas de actividad (A la pregunta y el comentario de sipwiz) no se entienden comúnmente para modelar procesos de negocio, que se pueden utilizar para que sin embargo, y la mayoría de los ejemplos o explicación sencilla sería abordarlo desde un punto de vista empresarial.

Discusión sobre sus opciones para modelar las discusiones:

Diagramas de actividad - Permite que se bifurcan y especificando la concurrencia mediante el uso de un bar y de uso de las líneas. Tenga en cuenta que el ejemplo en la parte inferior no es un proceso comercial, example. La mayoría de la gente puede leer estos, negocios, administración y desarrolladores, aunque a veces pueden carecer de detalles o desordenarse.

diagramas de secuencia de interacción - En el mismo post, example, se pueden ver los diagramas de secuencia permiten especificar el comportamiento paralelo dentro de una secuencia de boxeo comportamiento paralelizable con una etiqueta de "par", esto es útil para mostrar al lector lo los métodos pueden o deben invocarse en paralelo, es decir, mediante diferentes hilos. Este es el método que usaría para desarrolladores detallados, como discusiones sobre la construcción de un objeto.

Diagrama de estado - El gráfico de estado al igual que la actividad permite la concurrencia mediante el uso de una BAR y líneas de uso.

NOTA: Estos no modelará un hilo específico y es cada elevación exacta, ya que es parte del nivel de instancia/tiempo de ejecución de modelado, si es esto lo que quieren aclarar su pregunta y responderá . Solo lo modelaría utilizando uno de los anteriores, ya que nadie más que un experto de MDA/UML lo llamará y no está generando un sistema en ejecución.

También: tenga en cuenta que puede encontrar más detalles en la mayoría de los libros UML. También apalancado: http://www.jguru.com/faq/view.jsp?EID=56322

8

Tradicionalmente, el enhebrado se ha representado de forma diagonal mediante las Redes de Petri. Rob Martin tiene an article en multiprocesamiento en UML que puede serle útil.

Actualización- acabo de recordar que puede representar hilos con horquillas en diagramas de actividad- He logrado find something that explains this.

Es muy difícil encontrar tutoriales gratuitos para las Redes de Petri, sin embargo, sé que las Redes de Petri son buenas para simular la concurrencia, así que busqué "redes de Petri productores-consumidores" (mi tema favorito de enhebrar) y found this.

También he encontrado algunas diapositivas que muestran Petri Nets modeling a Semaphore.

+2

Su vínculo "algo que explica esto" ahora está reventado –

2

El UML está definido por la superestructura UML, puede encontrarlo aquí http://www.omg.org/spec/UML. Si lee la especificación, encontrará que una clase UML puede estar activa. Una clase activa es una clase con el meta-atributo isActive establecido en verdadero. También se representa de manera diferente. Una instancia de objeto de una clase activa ejecuta automáticamente un "comportamiento de clasificador". En cuanto a cualquier comportamiento, puede definirlo mediante una actividad en la que espera señales asincrónicas (AcceptEventActions) e invoca métodos (CallOperationAction) u otros comportamientos (CallBehaviorActions). Así es como se modelan los objetos activos en UML. Solo tiene que leer la especificación UML.

1

Los diagramas de actividades modelarán el funcionamiento interno de su software con horquillas y uniones para representar los hilos. Para averiguar exactamente cómo modelar esto correctamente, consulte la excelente serie de artículos de Conrad Bock. Here es el artículo que cubre las bifurcaciones y las uniones, pero debe seguir los enlaces al primer artículo de la serie para aprender cómo modelar correctamente utilizando "Redes de Petri coloreadas". ¡No es como piensas (y es bastante fácil)!

hay una nueva, en proceso estándar en el OMG para un lenguaje llamado Alf que proporciona una notación superficie más conveniente para los diagramas de actividad y es previsto para la representación de código de.A partir de la especificación:

Un objetivo principal de un lenguaje de acción es la de actuar como la notación para especificar la superficie ejecutables comportamientos dentro de un modelo más amplio que está representado principalmente usando las notaciones gráficas habituales de UML. Por ejemplo, esto podría incluir métodos en las operaciones de clases o comportamientos de efecto de transición en máquinas de estado.

Para un programador, probablemente no pueda ser más intuitivo que Alf. Y se convertirá perfectamente en diagramas de actividad UML.

Cuestiones relacionadas