Está en la página 1de 15

Captulo 15

NOTACIN DE LOS
DIAGRAMAS DE INTERACCIN
Los gatos son ms listos que los perros. No puedes
conseguir que ocho gatos empujen un trineo por la nieve.
JeffValdez
ObjetiVos
Leer la notacin de los diagramas de interaccin (secuencia y colaboracin) Ul\1L
bsicos.
Introduccin
Los siguientes captulos estudian el diseo de objetos. El lenguaje utilizado para ilustrar
los diseos es, principalmente, los diagramas de interaccin. Por tanto, es aconsejable,
por lo menos, examinar superficialmente los ejemplos de este captulo y familiarizarse
con la notacin antes de avanzar.
UML incluye los diagramas de interaccin para ilustrar el modo en el que los ob-
jetos interaccionan por medio de mensajes. Este captulo introduce la notacin, mientras
que los captulos siguientes se centran en su uso en el contexto del aprendizaje y reali-
zacin del diseo de objetos para el caso de estudio del PDV NuevaEra.
Lea los siguientes captulos para las guas de diseo
Este captulo introduce la notacin. Para crear objetos bien diseados, tambin se deben
entender los principios de diseo. Despus de familiarizares algo con la notacin de los
diagramas de interaccin, es importante estudiar los siguientes captulos sobre estos prin-
cipios y cmo aplicarlos mientras se dibujan los diagramas de interaccin.
186 UML Y PATRONES
15.1. Diagramas de secuencia y colaboracin
EL trmino diagrama de interaccin es una generalizacin de dos tipos de diagramas
UML ms especializados; ambos pueden utilizarse para representar de forma similar in-
teracciones de mensajes:
Diagramas de colaboracin.
Diagramas de secuencia.
A lo largo del libro, se utilizarn ambos tipos, para remarcar la flexibilidad en la
eleccin.
Los diagramas de colaboracin ilustran las interacciones entre objetos en un for-
mato de grafo o red, en el cual los objetos se pueden colocar en cualquier lugar del dia-
grama, como se muestra en la Figura 15 .l.
:lnstanciaCiaseA
1: mensaje2() +
2: mensaje3() +
'-------1 :lnstanciaCiaseB
Figura 15.1. Diagrama de colaboracin.
Los diagramas de secuencia ilustran las interacciones en un tipo de formato con el
aspecto de una valla, en el que cada objeto nuevo se aade a la derecha, como se mues-
tra en la Figura 15.2.
mensae1
mensae2
mensae3
Figura 15.2. Diagrama de secuencia.
Cada tipo tiene puntos fuertes y dbiles. Cuando se dibujan los diagramas para pu-
blicarlos en pginas estrechas, los diagramas de colaboracin tienen la ventaja de per-
mitir la expansin vertical para los nuevos objetos; los objetos adicionales en un dia-
grama de secuencia deben extenderse hacia la derecha, lo que supone una limitacin. Por
otro lado, los ejemplos de diagramas de colaboracin dificultan que se vea fcilmente la
secuencia de mensajes.
15.2.
15.3.
NOTACIN DE LOS DIAGRAMAS DE INTERACCIN 187
La mayora prefieren los diagramas de secuencia cuando utilizan una herramienta
CASE para hacer ingeniera inversa del cdigo fuente a diagramas de interaccin, pues-
to que muestran claramente la secuencia de mensajes.
Tipo Puntos fuertes Puntos dbiles
secuencia muestra claramente la secuencia u fuerza a extender por la derecha
ordenacin en el tiempo cuando se aaden nuevos objetos;
de los mensajes consume espacio horizontal
notacin simple
colaboracin economiza espacio, flexibilidad al difcil ver la secuencia de mensajes
aadir nuevos objetos en dos dimen-
siones notacin ms compleja
es mejor para ilustrar bifurcaciones
complejas, iteraciones y comporta-
miento concurrente
Ejemplo de diagrama de colaboracin: realizarPago
1 direccin del mensaje J
:Registro :Venta
~
1.1: create(dineroEntregad ) +
....... ..o
primer mensaje J 1 parmetro J
1 instancia J
..
creacin indicada con
un mensaje "create"
Figura 15.3. Diagrama de colaboracin.
El diagrama de colaboracin que se muestra en la Figura 15.3 se lee como sigue:
l. Se enva el mensaje realizarPago a una instancia de Registro. No se identifica al
ermsor.
2. La instancia de Registro enva el mensaje realizarPago a una instancia de Venta.
3. La instancia de Venta crea una instancia de Pago.
Ejemplo de diagrama de secuencia: realizarPago
El objetivo del diagrama de secuencia que se muestra en la Figura 15.4 es el mismo que
el del anterior diagrama de colaboracin.

188 UML Y PATRONES
1 : 1
....
1
1
.o
1 1
1
1
1
1
1
1
t
t
una caja de activacin que
muestra el foco de control
15.4.
Figura 15.4. Diagrama de secuencia.
Los diagramas de interaccin
son importantes
t
t
Un problema tpico en los proyectos de tecnologa de objetos es que no aprecian el va- 41
lor de llevar a cabo el diseo de objetos mediante el uso de los diagramas de interaccin.
Un problema relacionado es hacerlos de una manera vaga, como mostrando mensajes 4l
hacia objetos que realmente necesitan mucha elaboracin adicional; por ejemplo, mos-
trando el mensaje ejecutarSimulacion a algn objeto Simulacion, pero sin continuar con
el diseo ms detallado, como pensando que en virtud de un mensaje con un buen
nombre el diseo se completa mgicamente.
Se debera dedicar un tiempo y esfuerzo no trivial a la creacin de diagramas de in- 41
teraccin, como reflejo de que se ha estudiado cuidadosamente los detalles del diseo de
objetos. Por ejemplo, si la duracin de la iteracin es de dos semanas, quizs medio da 4l
o uno entero, cerca del comienzo de la iteracin, se debera dedicar a la creacin de los
diagramas de interaccin (y en paralelo, los diagramas de clases), antes de pasar a la
programacin. S, es cierto, el diseo que se representa en los diagramas ser imperfecto 41
y especulativo, y se modificar durante la programacin, pero proporcionar un punto
partida serio, consistente y comn, que sirve de inspiracin durante la programa-
CIOn.
Sugerencia
Cree los diagramas de interaccin por parejas, no solo. El diseo colaborando con otro
ser mejor, y los compaeros aprendern rpidamente los unos de los otros.
15.5.
NOTACIN DE LOS DIAGRAMAS DE INTERACCIN 189
La realizacin de los diagramas de interaccin (en otras palabras, decidir sobre los deta-
lles del diseo de objetos) es una etapa muy creativa del A/000.
Se pueden aplicar patrones codificados, principios y estilos para mejorar la calidad de sus
diseos.
Los principios de diseo que se necesitan para la construccin con xito de los dia-
gramas de interaccin pueden codificarse, explicarse y aplicarse de forma sistemtica.
Este enfoque para entender y utilizar los principios de diseo se basa en los patrones
-guas y principios estructurados-. Por tanto, despus de introducir la sintaxis de los
diagramas de interaccin, volveremos la atencin (en los siguientes captulos) hacia los
patrones de diseo y su aplicacin a los diagramas de interaccin.
Notacin general de los diagramas de interaccin
Representacin de clases e instancias
UML ha adoptado un enfoque simple y consistente para representar las instancias
frente a los clasificadores (ver Figura 15.5):
Para cualquier tipo de elemento UML (clase, actor, ... ), una instancia utiliza el mismo
smbolo grfico que el tipo, pero con la cadena de texto que lo designa subrayada.
Venta
o,
'
'
'
1 clase
:Venta
'
'
'
1 i n s t ~ c i ~
v1:Venta
'
'
'
instancia nombrada
Figura 15.5. Clases e instancias.
En consecuencia, para mostrar una instancia de una clase en un diagrama de inte-
raccin, se utiliza el smbolo grfico para una clase, esto es el rectngulo, pero con el
nombre subrayado.
Se puede utilizar un nombre para identificar de manera nica la instancia. Si no se
utiliza, obsrvese que los ":"preceden al nombre de la clase.
Sintaxis de la expresin de mensaje bsica
UML cuenta con una sintaxis bsica para las expresiones de los mensajes:
return := mensaje(parametro: tipoParametro): tipoRetorno
Podra excluirse la informacin del tipo si es obvia o no es importante. Por ejemplo:
espec := getEspecProducto(id)
espec .- getEspecProducto(id:ArticuloiD)
espec := getEspecProducto(id:ArticuloiD):EspecificacionDelProducto
190 UML Y PATRONES
15.6. Notacin bsica de los diagramas de colaboracin
Enlaces
Un enlace es un camino de conexin entre dos objetos; indica que es posible alguna for-
ma de navegacin y visibilidad entre los objetos (ver Figura 15.6). De manera ms
formal, un enlace es una instancia de una asociacin. Por ejemplo, existe un enlace -o
camino de navegacin- desde un Registro a una Venta, a lo largo del que pueden fluir
los mensajes, como el mensaje realizarPago.
1: realizarPago(dineroEntregado)-
2:foo() - .--------,
:Registro :Venta
2.1: bar()
.,.____
llnea de enlace
Figura 15.6. Lneas de enlaces ..
Obsrvese que, a lo largo del mismo enlace, pueden fluir mltiples mensajes, y mensajes
en ambas direcciones.
Mensajes
Cada mensaje entre objetos se representa con una expresin de mensaje y una pequea
flecha que indica la direccin del mensaje. Podran fluir muchos mensajes a lo largo de
este enlace (Figura 15.7). Se aade un nmero de secuencia para mostrar el orden se-
cuencial de los mensajes en el hilo de control actual.
msj1() +
:Registro
todos los mensajes fluyen en el mismo enlace
1: msj2()
2: msj3()
3: msj4()
3.1: msj5()
.P
_...
.. -
Figura 15.7. Mensajes.
Mensajes a "self" o "this"
:Venta
Se puede enviar un mensaje desde un objeto a l mismo (Figura 15.8). Esto se representa
mediante un enlace a l mismo, con mensajes que fluyen a lo largo del enlace.
NOTACIN DE LOS DIAGRAMAS DE INTERACCIN 191
1: limpiar() t
Figura 15.8. Mensajes a "this".
Creacin de instancias
Cualquier mensaje se puede utilizar para crear una instancia, pero en UML existe el con-
venio de utilizar para este fin el mensaje denominado create. Si se utiliza otro nombre de
mensaje (quizs menos obvio), se podra aadir al mensaje una caracterstica especial
llamada estereotipo UML, como create.
El mensaje create podra incluir parmetros, que indican el paso de valores iniciales.
Esto indica, por ejemplo, la llamada a un constructor con parmetros en Java.
Adems, podra aadirse opcionalmente la propiedad UML {new} a la caja de la ins-
tancia para resaltar la creacin.
:Registro
mensaje de creacin, con parmetros de creacin opcionales.
Esto se interpretar, normalmente, como una llamada a un constructor .
.... -
()" .....
1: create(cajero) -
create
-
:Venta {new}
1: hacer( cajero) 1


Si se utiliza un nombre para el mensaje de creacin
no obvio, el mensaje podra estereotiparse por claridad.
Figura 15.9. Creacin de instancias.
Secuencia de nmeros de mensaje
El orden de los mensajes se representa mediante nmeros de secuencia, como se
muestra en la Figura 15.10. El esquema de numeracin es:
l. No se numera el primer mensaje. Por tanto, el msjl() no se numera.
2. El orden y anidamiento de los siguientes mensajes se muestran con el esquema
de numeracin vlido en el que los mensajes anidados tienen un nmero adjun-
to. El anidamiento se denota anteponiendo el nmero del mensaje entrante al n-
mero del mensaje saliente.
192 UML Y PATRONES
msj1()-+
:GlaseA :ClaseS
.. o
... -
0
1.1: msj3()
numeracin vlida
:Glasee
Figura 15.10. Secuencia de nWTieracin.
En la Figura 15.11 se muestra un caso ms complejo.
1

/tercero
..
:ClaseS
1 .1: msj3()
0

2.1: t
:Glasee
1 quinto
o 2.2: msj6()
.......
..
.---"--.
1 sexto
:GlaseO
Figura 15.11. Secuencia de numeracin compleja.
Mensajes condicionales
Un mensaje condicional (ver Figura 15.12) se muestra con una clusula condicional, si-
milar a una clusula de iteracin, entre corchetes, a continuacin del nmero de se-
cuencia. El mensaje slo se enva si la evaluacin de la clusula es verdad.
mensaje condicional, con condicin
..
1 [ color = rojo ] : calcular()
:Bar
Figura 15.12. Mensaje condicional.
NOTACIN DE LOS DIAGRAMAS DE INTERACCIN 193
Caminos condicionales mutuamente exclusivos
El ejemplo de la Figura 15.13 ilustra los nmeros de secuencia con caminos condicio-
nales mutuamente exclusivos.
incondicional despus
del msj2 o el msj4
.....
.....
:GlaseE
1 a y 1 b son caminos
condicionales mutuamente exlusivos.
o
2: msj6()
t
:GlaseA
. ..
a...-
1a [condicion1]: msj2() __.
1 b [no condicion1] : msj4()
:GlaseO
Figura 15.13. Mensajes mutuamente exclusivos.
:CiaseB
:Glasee
1a.1: msj3()

En este caso es necesario modificar las expresiones de la secuencia con una letra de
camino condicional. La primera letra que se utiliza es la a por convenio. La Figura 15.13
establece que se podra ejecutar o la o lb despus de msjl(). Ambos tienen el nmero
de secuencia 1 puesto que cualquiera de ellos podra ser el primer mensaje interno.
Ntese que los siguientes mensajes anidados todava se anteponen de manera con-
sistente con su secuencia de mensaje exterior. De este modo 1 b.l es el mensaje anidado
de lb.
Iteracin o bucle
La notacin de las iteraciones se muestra en la Figura 15.14. Si los detalles de la clusula
de iteracin no son importantes para el modelador, se puede utilizar simplemente un "*".
---
eecutarSimulacion
:Simulador :Aleatorio
la iteracin se indica con un * y una clusula de iteracin
opcional a continuacin del nmero de secuencia
Figura 15.14. Iteracin.
194 UML Y PATRONES
t:=getT o tal()
Iteracin sobre una coleccin (multiobjeto)
Un algoritmo tpico es iterar sobre todos los miembros de una coleccin (como una lis- ~
ta o una tabla), enviando un mensaje a cada uno de ellos. A menudo, se utiliza, final-
mente, algn tipo de objeto iterador, como una implementacin de java. util.Iterator
0
el ~
iterador de la librera estndar de C++. En UML, el trmino multiobjeto se utiliza
para denotar un conjunto de instancias -una coleccin-. En los diagramas de cola-
boracin, se puede indicar como se muestra en la Figura 15.15. ~
:Venta
/
/
/
/
/
~
1 *: st:=getSubtotal()
/
/
/
f) *
_o
:LineaDeVenta
0..
la doble caja indica un multiobjeto (coleccin)
estos dos smbolos * utilizados conjuntamente implican
iteracin sobre el multiobjeto y el envo del mensaje
getSubtotal a cada uno de los miembros
por ejemplo, un objeto Lista que contiene
muchos objetos LineaDeVenta
Figura 15.15. Iteracin sobre un multiobjeto.
El marcador de multiplicidad "*" al final del enlace, se utiliza para indicar que se va ~
a enviar el mensaje a cada elemento de la coleccin, en lugar de enviarse repetidamen-
te al propio objeto coleccin.
Mensaje a un objeto clase
Los mensajes se podran enviar a las propias clases, en lugar de una instancia, para in-
vocar a los mtodos estticos o de clase. Se muestra un mensaje hacia el rectngulo de l
una clase cuyo nombre no est subrayado, lo que indica que el mensaje se est enviando
a una clase en lugar de a una instancia (ver Figura 15.16).
mensaje a una clase o una
invocacin a un mtodo esttico
.---
.. --
o ___.
lista := syncronizedlist( unalista )
java.utii.Collections
.... o
no subrayada, ..
luego es una clase
Figura 15.16. Mensaje a un objeto clase (invocacin de un mtodo esttico).
En consecuencia es importante ser consistente y subrayar los nombre de las instancias
cuando lo que se desea es una instancia, de otra manera, se podran interpretar inco-
rrectamente los mensajes a clases o instancias.
. 15.7.
NOTACIN DE LOS DIAGRAMAS DE INTERACCIN 195
Notacin bsica de los diagramas de secuencia
Enlaces
A diferencia de los diagramas de colaboracin, los diagramas de secuencia no muestran
enlaces.
Mensajes
Cada mensaje entre objetos se representa con una expresin de mensaje sobre una lnea
con punta de flecha entre los objetos (ver Figura 15.17). El orden en el tiempo se orga-
niza de arriba a abajo.
:Registro
1
1
msj1() ._, 1
:Venta
ms2
mss
ms"4
mss
Figura 15.17. Mensajes y focos de control con cajas de activacin.
Focos de control y cajas de activacin
Como se ilustra en la Figura 15.17, los diagramas de secuencia podran tambin mostrar
los focos de control (esto es, en una llamada de rutina ordinaria, la operacin se en-
cuentra en la pila de llamadas) utilizando una caja de activacin. La caja es opcional,
pero la utilizan habitualmente los modeladores de UML.
Representacin de retornos
Un diagrama de secuencia podra opcionalmente mostrar el retomo de un mensaje me-
diante una lnea punteada con la punta de flecha abierta, al final de una caja de activa-
cin (ver Figura 15.18). Lo normal es que se excluya por quienes utilizan UML. Algu-
nos anotan la lnea de retomo para describir lo que se est devolviendo (si es el caso) a
partir del mensaje.
196 UML Y PATRONES
:Registro
1
1
msj1() .,. 1
:Venta
ms2
ms3
Figura 15.18. Representacin de retornos.
Mensajes a "self" o "this"
Se puede representar un mensaje que se enva de un objeto a l mismo utilizando una
caja de activacin anidada (ver Figura 15.19).
:Registro
limpiar()
Figura 15.19. Mensajes a "this".
Creacin de instancias
La notacin para la creacin de instancias se muestra en la Figura 15.20.
Lnea de vida del objeto y destruccin de objetos
La Figura 15.20 tambin ilustra las lneas de vida de los objetos -las lneas punteadas
verticales bajo los objetos-. stas indican la duracin de la vida de los objetos en el
diagrama. En algunas circunstancias es deseable mostrar la destruccin explcita de un
objeto (como en C+ +,que no tiene recogida de basura); la notacin UML para las l-
neas de vida proporcionan una forma para expresar esta destruccin (ver Figura 15.21) .
~
.. ~
. 1
NOTACIN DE LOS DIAGRAMAS DE INTERACCIN 197
1 : 1
1
1
1 : 1
1
1
1
1
1
obsrvese que los objetos
creados recientemente se
sitan a su "altura" de creacin
b
realizarPaqo(dineroEntregado) .. 1
create(dineroEntreoado) \

1
:
1
autorizar() 1
o
1 o ... / .. ...-o
una lnea de vida de un objeto muestra
la duracin de la vida de un objeto
en el diagrama
Figura 15.20. Creacin de instancias y lnea de vida de los objetos.
1
1
1
r-------"=-de=.:s::::t:....:ro::..l- ___ ____.* o
el mensaje estereotipado
con destroy, con la gran
X y la lnea de vida corta,
indica la destruccin
explcita del objeto
Figura 15.21. Destruccin de objetos.
Mensajes condicionales
La Figura 15.22 muestra un mensaje condicional.
Figura 15.22. Un mensaje condicional.
198 UML Y PATRONES
Mensajes condicionales mutuamente exclusivos
La notacin para este caso es un tipo de lnea de mensaje con forma de ngulo que nace
desde un mismo punto, como se ilustra en la Figura 15.23.
CD LD CD
1 1
mensae1 1 1
1
1
1
1
1

Figura 15.23. Mensajes condicionales mutuamente exclusivos.
Iteracin para un nico mensaje
La notacin para la iteracin de un mensaje se muestra en la Figura 15.24.
:Simulador
1
ejecutarSimulacion() .., 1
Figura 15.24. Iteracin para un mensaje.
Iteracin de una serie de mensajes
La Figura 15.25 muestra la notacin para indicar la iteracin alrededor de una serie de
mensajes.
Iteracin sobre una coleccin (multiobjeto)
En un diagrama de secuencia, la iteracin sobre una coleccin se muestra en la Figura
15.26.
Con los diagramas de colaboracin de UML, se especifica un marcador de multi-
plicidad '*' al final del rol (al lado del multiobjeto) para indicar el envo de un men-
saje a cada elemento, en lugar de repetidamente a la propia coleccin. Sin embargo,
UML no especifica cmo hacer esto con los diagramas de secuencia.
NOTACIN DE LOS DIAGRAMAS DE_INTERACCIN 199
:Simulador : Programador
eiecutarSimulacion()
...
1 1
horas := siguienteEnt()
1 1
1 1
y
1
1
1
1
1 1
1 1
trabajar( horas )
1 1
1 ~
* [i:=1 .. N)
1
1 1
1 1
comer()
:
:
1
u ...,..-
1
Figura 15.25. Iteracin sobre una secuencia de mensajes.
1 : Ve
1
nta 1
: LineaDeVenta
1
t:=getTotal() 1
* : st:=getSubtotal()
Figura 15.26. Iteracin sobre un multiobjeto.
Mensajes a objetos de clase
Como en los diagramas de colaboracin, las llamadas a los mtodos de clase o estticos
se representan no subrayando el nombre del clasificador, lo que significa que se trata de
una clase en lugar de una instancia (ver Figura 15.27).
mensaje a una clase o una
invocacin a un mtodo esttico
mensa'e1 o ........................ no subrayada,
luego es una clase
Figura 15.27. Invocacin a un mtodo de clase o esttico.

También podría gustarte