Diagrama de Comunicacion

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 26

Programación Avanzada

Diseño
Diagramas de Comunicación
Contenido
 Diagramas de Interacción
 Notación
 Reuso de Elementos de Diseño

Programación Avanzada | Diseño: Diagramas de Comunicación 2


Diagramas de Interacción
 UML incluye los diagramas de interacción
que sirven para mostrar ejemplos de cómo
ciertos objetos interactúan a través de
mensajes para la realización de tareas
 Existen varios tipos de diagramas de
interacción que son semánticamente
equivalentes entre sí, en particular:
 Diagramas de Secuencia
 Diagramas de Comunicación
Programación Avanzada | Diseño: Diagramas de Comunicación 3
Diagramas de Interacción (2)
 Un Diagrama de Secuencia
: ClaseA : ClaseB

mens1()
mens2()

mens3()

 Su Diagrama de Comunicación equivalente


1: mens2()

mens1() 2: mens3()
: ClaseA : ClaseB

Programación Avanzada | Diseño: Diagramas de Comunicación 4


Notación
Instancias
 Las instancias se representan igual que en
los diagramas de instancias
 Corresponden a una instancia “cualquiera”
de una cierta clase o interfaz (no a una
instancia real)
: Persona p : Persona p / Rol : Persona

Sin nombre Con nombre Cuando existen


varias formas de
acceder a esa
instancia
Programación Avanzada | Diseño: Diagramas de Comunicación 5
Notación
Clases
 Las clases se representan con el nombre
de la clase dentro de un rectángulo
 Corresponden a una clase no a una
instancia
Persona

Clase Persona

Programación Avanzada | Diseño: Diagramas de Comunicación 6


Notación
Links
 Representa una conexión entre instancias
que indica navegabilidad y visibilidad entre
ellas
 Establece una relación de cliente/servidor
entre las instancias

: Empresa : Persona

Programación Avanzada | Diseño: Diagramas de Comunicación 7


Notación
Mensajes
 Los mensajes son representados mediante
una flecha etiquetada
 Un mensaje está asociado a un link y tiene
asignado un número de secuencia que
determina el orden de ocurrencia
1: contratar()

2: asignarSeccion()

3: asignarCliente()
: Empresa : Persona

Programación Avanzada | Diseño: Diagramas de Comunicación 8


Notación
Parámetros
 Los parámetros se muestran entre
paréntesis a la derecha del nombre del
mensaje
 Se puede mostrar además su tipo

1: aumentarSueldo(s:Real)

: Empresa : Persona

Programación Avanzada | Diseño: Diagramas de Comunicación 9


Notación
Tipo de Retorno
 El valor de retorno puede ser mostrado a la
izquierda del mensaje, con un := en medio
 Se puede mostrar además el tipo del valor
de retorno

1: s := obtenerSueldo() : Real

: Empresa : Persona

Programación Avanzada | Diseño: Diagramas de Comunicación 10


Notación
Sintaxis de Mensajes
 La sintaxis de los mensajes es la siguiente:
[ret :=] mensaje([param [: TipoParam]]) [: TipoRet]

 Donde:
 ret almacena el resultado de la operación (opcional)
 mensaje es el nombre del mensaje enviado (y de la
operación invocada)
 param son argumentos usados en el envío
 TipoParam es el tipo de cada parámetro (opcional)
 TipoRet es el tipo del recorrido de la operación
(opcional)
Programación Avanzada | Diseño: Diagramas de Comunicación 11
Notación
Iteración
 Las iteraciones se indican mediante un
asterisco (*) a continuación del numero de
secuencia del mensaje
 Esto expresa que el mensaje es enviado en
forma repetida (en un loop) al receptor
class Simulador {
Generador gen;
1* [i:=1..n] : x := generar()

: Simulador : Generador void unaOper() {


for (i from 1 to n) {
x = gen.generar();
}
}
Programación Avanzada | Diseño: Diagramas de Comunicación 12
Notación
Creación de Instancias
 La forma de ilustrar la creación de una
instancia es enviando el mensaje create
 Este mensaje puede incluir parámetros
 Lo usual es especificar un nombre para la
instancia para poder utilizarla después

1: e := create()

: Empresa : Empleado

Programación Avanzada | Diseño: Diagramas de Comunicación 13


Notación
Destrucción de Instancias
 La forma de ilustrar explícitamente la
destrucción de una instancia es enviando el
mensaje destroy
 Previamente, debe eliminarse todo link que
exista con esa instancia
1: destroy()

: Empresa : Empleado

Programación Avanzada | Diseño: Diagramas de Comunicación 14


Notación
Números de Secuencia
 El orden de ocurrencia de los mensajes
viene dado por los números de secuencia
 El mensaje que inicia la interacción
generalmente no es numerado
mens1() 1: mens2()
:A :B

1.1: mens3() 2.1: mens5()

2: mens4() 2.2: mens6()


:C :D

Programación Avanzada | Diseño: Diagramas de Comunicación 15


Notación
Números de Secuencia (2)
:A :B :C :D

mens1()

mens2()

mens3()

mens4()

mens5()

mens6()

Programación Avanzada | Diseño: Diagramas de Comunicación 16


Notación
Mensajes Condicionales
 Un mensaje condicional es enviado
únicamente si su guarda es satisfecha
 La guarda se muestra entre paréntesis
rectos ([ ]) a la izquierda del mensaje

1: [p.edad>18] contratar()

: Empresa p : Persona

Programación Avanzada | Diseño: Diagramas de Comunicación 17


Notación
Colecciones
 Los multiobjetos de los diagramas de
interacción representan una colección de
objetos de una cierta clase

: Empleado

Colección de instancias
de la clase Empleado

Programación Avanzada | Diseño: Diagramas de Comunicación 18


Notación
Mensajes a Colecciones
 Un mensaje a una colección representa un
mensaje al objeto colección mismo
 No un broadcast a todos los elementos
contenidos en él
1: e := create()

: Empresa : Empleado

2: add(e)

: Empleado

Programación Avanzada | Diseño: Diagramas de Comunicación 19


Notación
Responsabilidad de Colecciones
 Las colecciones serán tratadas como meros
contenedores de objetos por lo que no
tendrán otra responsabilidad más que esa
 Proveerán solamente operaciones que
permitan administrar los objetos contenidos
 En general las interfaces de Diccionario
(add, remove, find, member, etc.) e
Iterador (next, etc.) son suficientes para las
colecciones
Programación Avanzada | Diseño: Diagramas de Comunicación 20
Notación
Responsabilidad de Colecciones (2)
 add(o:Tipo) Agrega la instancia o a la
colección del tipo Tipo
 remove(o:Tipo) Remueve la instancia o de la
colección del tipo Tipo. No elimina la instancia
 find(c:Clave):Tipo Retorna la instancia
con clave c de tipo Clave
 member(o:Tipo):Boolean Devuelve un
booleano indicando si la instancia o de tipo Tipo
existe o no en la colección
 next():Tipo Devuelve el próximo elemento
en la colección. Se supone que la colección está
ordenada
Programación Avanzada | Diseño: Diagramas de Comunicación 21
Notación
Resp. de Colecciones - Ejemplo

t := totalSueldos() 1* [foreach]: e := next()

: Empresa : Empleado

2* s := getSueldo()

e : Empleado


t := totalSueldos() 1: t := getTotal()

: Empresa : Empleado

Programación Avanzada | Diseño: Diagramas de Comunicación 22


Notación
Datatypes
 El procesamiento de datatypes
(construcción, envío de mensajes) no se
muestra gráficamente: se utilizan notas
dp := obtenerDatosProducto():Set(DataProducto) 1* [foreach]: l := next()

: Venta : LineaDeVenta

Retorna un Set “dp” de los


DataProducto obtenidos 2* d := getDatos():DataProducto

Retorna un 2.1* p := getPrecio():Float


DataProducto “d” que 2.2* c := getCodigo():String
contiene el precio (p) y l : LineaDeVenta : EspProducto
código (c) del Producto

Programación Avanzada | Diseño: Diagramas de Comunicación 23


Notación
Datatypes (2)
 Es posible iterar sobre los elementos de una
colección de datatypes: forall dt in ColDT
agregarDatos(colDP: Set(DataProducto)) 1* [forall dp in ColDP]: agregar(dp : DataProducto)

: Venta : LineaDeVenta

 Es posible acceder a los elementos de un


datatype utilizando el operador “.”
agregar(dp: DataProducto) 1: agregarPrecio(dp.precio)

: LineaDeVenta : EspProducto

Programación Avanzada | Diseño: Diagramas de Comunicación 24


Reuso de Elementos de Diseño
 Se busca reutilizar los elementos de
diseño generados de una iteración a otra
 En particular: clases, operaciones y atributos
 Esto apunta a generar iterativamente el
diseño y no “reinventar la rueda” cada vez
 El diseño debe ser consistente de una
iteración a otra. Es decir, si un elemento
de diseño cambia, no puede quedar
información inconsistente en otra parte
del diseño
Programación Avanzada | Diseño: Diagramas de Comunicación 25
Diagramas de Comunicación
Errores Comunes
 Suponer la existencia de links nunca
generados
 Enviar un mensaje a un multiobjeto que
implique el procesamiento con todos los
objetos contenidos en él
 No especificar qué sucede con mensajes
que aparentan ser triviales
 Representar datatypes como instancias

Programación Avanzada | Diseño: Diagramas de Comunicación 26

También podría gustarte