Documentos de Académico
Documentos de Profesional
Documentos de Cultura
02-Diagrama Actividades y Secuencia
02-Diagrama Actividades y Secuencia
FORMATO
LECTURA PARA
DIAGRAMA DE ACTIVIDAD
El diagrama de actividad se presenta como un diagrama que sirve para representar la vista
funcional de una solución. Por cuanto puede ser utilizado para describir el comportamiento
de procesos lógicos que luego serán implementados, utilizando código. Si se quiere, podría
considerarse este diagrama como una versión mejorada y aumentada de un diagrama de
flujo. Un diagrama de actividad ofrece prácticamente todos los elementos de control de flujo
que se encuentran en los principales lenguajes de programación, de tal manera que se
presta de manera ideal para describir y modelar el comportamiento interno del software. Sin
embargo, este nivel no es el único en el que resulta de utilidad. Un diagrama de actividad
puede ser utilizado en diferentes niveles de detalle y con diferentes objetivos. Puede ser
usado para describir el flujo de trabajo de una aplicación, a nivel macro y para describir el
comportamiento interno de un caso de uso, con un nivel medio de generalidad. Incluso para
detallar el funcionamiento interno de un método en una clase, siendo este nivel el más
detallado de los tres.
En el primer y segundo nivel, se utilizan diagramas de actividad para describir el flujo general
de una aplicación, bien sea a través de un proceso que involucre varios casos de uso, un
único caso de uso o incluso un escenario dentro de un caso de uso. En cada circunstancia
es posible utilizar las herramientas y elementos ofrecidos por el diagrama para documentar el
proceso de uso de la aplicación por parte del usuario, abarcando el nivel de detalle y la
complejidad del proceso que se desee.
Por otra parte, en un nivel mucho mayor de detalle, es posible utilizar diagramas de actividad
para documentar el comportamiento y estructura interna de un método dentro de una clase.
Esto implica el modelado no solamente del flujo de dicho comportamiento, sino las
implicaciones que dicho flujo tiene sobre el conocimiento (atributos) de la clase en cuestión.
Los elementos que se pueden utilizar para construir un diagrama de actividad son:
En alianza con
Colombia
ACTIVIDADES Y TRANSICIONES
Las actividades son el elemento constitutivo central de un diagrama de actividad.
Esto resulta bastante evidente. Una actividad es un paso del proceso en el que se
realiza algún tipo de trabajo, que puede tomar la forma de manipulación de datos,
cálculo o búsqueda de información, etc. Partiendo de este hecho, podría decirse
que un diagrama de actividad es simplemente un conjunto de actividades unidas
mediante transiciones. Las transiciones determinan la manera cómo es posible pasar
de una actividad a otra. Usualmente, este tránsito se da cuando una actividad ha
sido terminada. En la siguiente figura se ilustra esta idea, y se muestran las
representaciones visuales utilizadas para cada uno de los dos elementos.
GUARDAS
Las guardas permiten definir condiciones que deben cumplirse para que una
transición pueda darse. Si la guarda no es cumplida (evaluada con un resultado
verdadero, si se quiere ser un poco más formal) no es posible hacer la transición, a
pesar de que la actividad anterior haya sido terminada. Modificando el diagrama de
la figura anterior para incluir una guarda resultaría en:
DECISIONES
En los casos en que es necesario tomar una decisión dentro del flujo de un diagrama
de actividad, se utiliza una representación que es común en los diagramas de flujo: un
rombo. Por cada alternativa de acción posible, debe existir una flecha que sale del
rombo y cada una de ellas debe tener una guarda, que determine si se toma o no
En alianza con
Colombia
esa ruta. Es importante anotar que para que una decisión esté bien definida, las
guardas de todas las rutas que salgan de ella deben ser mutuamente excluyentes, de
manera que solamente sea posible tomar una. La ambigüedad en la definición de las
guardas destruiría el propósito de la decisión.
CONCURRENCIA/SINCRONIZACIÓN
En el tiempo, desde que los diagramas de flujo fueron creados, resulta
extremadamente común encontrar lenguajes en plataformas de software y hardware
que soportan el proceso concurrente de hilos de ejecución. Los diagramas de
actividad presentan convenciones para manejar este tipo de situaciones. En primer
lugar, cuando es posible ejecutar simultáneamente un conjunto de actividades es
posible incluir, en el diagrama, un elemento conocido como un fork (tenedor
literalmente) que representa la ejecución concurrente de una serie de hilos. De
manera similar, cuando un conjunto de actividades concurrentes deben mezclarse o
sincronizarse, se crea un punto de sincronización que, para todos los fines prácticos,
es un fork invertido.
Actividad 1
Actividad 3
En alianza con
Colombia
INICIO Y FINAL
Los diagramas de actividad ofrecen también elementos para modelar el comienzo y
el final del diagrama. Como anotación, es posible que exista más de un punto de
finalización para un diagrama de actividad. Las diferentes rutas y decisiones que se
presentan dentro de un diagrama de este estilo pueden generar la existencia de
diferentes formas, y por tanto puntos de finalización de la actividad. La
representación visual de cada uno de estos elementos es:
DIAGRAMA DE SECUENCIA
Los diagramas de secuencia son un tipo particular e importante de los diagramas UML de
comportamiento. El foco principal de los diagramas de comportamiento es ofrecer una
representación sencilla de las interacciones y el orden de las mismas. Sin embargo, no todas
las interacciones dentro de un sistema de software merecen o necesitan ser documentadas
utilizando un diagrama de secuencia, u otro diagrama de comportamiento. En primer lugar,
puede darse el caso de que una interacción particular sea demasiado compleja, por lo que
se represente solo una parte de la misma. El otro caso posible es que la interacción sea tan
sencilla que no sea necesario emplear tiempo ni recursos documentándola.
En alianza con
Colombia
Cada participante tiene una línea punteada que corre verticalmente desde su centro. Estas
líneas son llamadas líneas de vida e indican que un participante existe y está listo para recibir
mensajes (invocaciones de métodos) de otros participantes en la interacción.
Ya que se ha mencionado que uno de los propósitos principales de un diagrama de
secuencia es la representación del orden de las interacciones, resulta evidente que el sentido
del tiempo juega un papel importante en un diagrama de este tipo. El tiempo, en un diagrama
de secuencia, comienza en la parte superior de la página, justo debajo del participante que
se encuentra más arriba y aumenta a medida que se baja por el diagrama. El orden en que
se ubican las interacciones, en la página, indica el orden en que suceden en tiempo de
ejecución. La siguiente figura ilustra el concepto:
Aquí puede verse la situación cuando el participante part1, de la clase Participante1 envía
un mensaje al participante part2, de la clase Participante2. Inspeccionando la figura, es
posible ver que aparecen nuevos elementos:
En alianza con
Colombia
Adicionalmente, y dependiendo del tipo (más detalle sobre esto abajo en el documento), un
mensaje puede generar una respuesta por parte del receptor (se puede pensar en esto en
términos del valor retornado luego de invocar un método, o simplemente el retorno de control
del punto de ejecución cuando el método es de tipo void). La respuesta a un mensaje es
representada mediante un tipo particular de flecha; una punteada y hueca representa el
retorno de un mensaje previamente enviado:
Ahora bien, las interacciones entre participantes pueden ser, y usualmente son, más complejas
que un simple envío/recepción de mensajes (uno a la vez). En la mayor parte de los casos, un
mensaje recibido por un participante causa que éste envíe a su vez mensajes a otros
participantes, o incluso, invoque mensajes sobre sí mismo (ejecutando métodos que le
pertenecen). Un ejemplo de estas situaciones es:
En alianza con
Colombia
En este caso, el envío del mensaje inicial desde part1 hacia part2, produjo que part2 enviara
dos mensajes (mensajeAnidado1 y mensajeAnidado2) hacia part3, recibiendo respuesta
para cada uno de ellos, y luego, invocara un mensaje sobre sí mismo (autoMensaje, que
representa una llamada al método del mismo nombre de la clase Participante2). Todo esto
sucede antes de que el mensaje inicial, mensaje genere una respuesta para part1. Esto resulta
evidente si se leen los números que indican el orden de las interacciones y además, se apoya
en el recurso visual mencionado al principio de la lectura, referente a que el orden de
ubicación de los mensajes en el diagrama representa el orden de su ocurrencia en el tiempo.
Todos los mensajes ubicados visualmente entre el mensaje uno y el mensaje ocho serán
ejecutados en el tiempo de manera similar, entre el envío del mensaje uno y la recepción de
la respuesta correspondiente, en el mensaje ocho.
Como anotación final al tema de los mensajes anidados, es importante mencionar que no
existe límite para el número de mensajes anidados dentro de un mensaje particular, así como
tampoco lo existe para el número de niveles de la invocación. En este caso, part3 pudo
haber enviado un mensaje a otros participantes antes de retornar las respuestas a part2.
TIPOS DE MENSAJES
Con la estructura de un diagrama de secuencia descrita, como se ha hecho hasta ahora, es
posible abordar un tema importante: el de los diferentes tipos de mensajes. Existen cinco tipos
de mensajes básicos en un diagrama de secuencia:
En alianza con
Colombia
En alianza con
Colombia
Resulta evidente aquí la utilidad de las flechas que representan los mensajes de
respuesta. Sin ellas no es claro si los mensajes dos, tres y cuatro se envían luego de
que el mensaje uno ha recibido respuesta, o si se encuentran anidados dentro de
éste. Problemas de lectura de esta índole son mucho más probables y mucho más
costosos en diagramas más complicados. Además de indeseables, son muy fáciles de
evitar si se incluye de manera formal las flechas que indican los mensajes de retorno
dentro del diagrama.
En alianza con
Colombia
Mensajes de destrucción. Así como un objeto puede crearse en algún punto de una
interacción, también puede ser destruido de ser necesario. Tal como sucede con un
mensaje de creación, un mensaje de destrucción tiene una representación particular:
En alianza con
Colombia
FRAGMENTOS
A estas alturas, y con los conceptos vistos, resulta evidente que modelar una interacción
relativamente compleja resulta sencillo en términos operativos, pero puede producir un
resultado difícil de leer, por cuanto el diagrama de secuencia resultante puede ser bastante
largo. Para facilitar la labor de organización, así como para permitir la inclusión de
condicionales y ciclos dentro de la realización de un diagrama de secuencia, se introduce
aquí el concepto de fragmento.
Un fragmento de un diagrama de secuencia es una “caja” que encierra un número de
mensajes e interacciones del diagrama. Un fragmento se superpone al diagrama y puede
contener tantas interacciones como sean necesarias y de hecho otros fragmentos, si el
diagrama así lo requiere. Un fragmento tiene, en la parte superior izquierda, un operador que
indica el tipo de fragmento del que se trata:
Fragmento opt.
En alianza con
Colombia
En este caso, se utilizó un fragmento de tipo opt, que indica que los mensajes contenidos
dentro del fragmento serán ejecutados de manera opcional, dependiendo del resultado de
la evaluación de la Guarda. La guarda, que es una condición de tipo booleano, determina
si se ejecutan o no las interacciones contenidas en el fragmento, de manera muy similar a
como lo hace una instrucción condicional en un programa. De hecho, si se desea asociar el
fragmento opt con una estructura de control, sería muy similar a una instrucción if y la guarda
se convertiría entonces en la condición a evaluar para determinar si se entra o no al if, para
ejecutar las instrucciones allí contenidas.
Fragmento alt.
En ocasiones, una sola condición no es suficiente para indicar el flujo de una interacción. En
esas situaciones, un fragmento de tipo alt es la solución.
Un fragmento alt tiene múltiples guardas que indican múltiples puntos de entrada a la
ejecución de las interacciones contenidas en el fragmento principal. Si se quiere establecer
una relación de similitud con alguna estructura de control, un fragmento alt correspondería a
una sentencia de tipo switch-case. Es acostumbrado incluir al final una guarda de tipo [else]
para que se ejecuten las interacciones allí contenidas, en caso de que ninguna de las
guardas previas haya sido disparada.
Fragmento loop.
Otro tipo de fragmento que resulta altamente útil es el fragmento loop. Este indica que las
interacciones en él contenidas deben ser ejecutadas tantas veces como indique la guarda
definida. Un ejemplo de un fragmento de tipo loop es:
En alianza con
Colombia
Nótese que en este ejemplo el fragmento loop está inmerso dentro de la opción else del
fragmento alt. Asimismo, la guarda definida indica que las interacciones contenidas en el
fragmento deben ejecutarse cinco veces. La notación utilizada es semejante a la usada
cuando se define una instrucción de control de tipo for. De hecho, el comportamiento
descrito por un fragmento loop es equivalente al descrito por una estructura de control for.
En alianza con
Colombia