Você está na página 1de 47

Tema 1

UML:
Lenguaje Unificado de Modelado

Técnicas de Programación - Curso 2007/08


Introducción

z Dominio: contexto de un problema


z Modelo: abstracción de un problema
z UML:
z Unified Modeling Language. Versión 2.0 (finales de 2004)
z Lenguaje de modelado de sistemas
z Diagramas de estructura, comportamiento, ...
z Especificar sistemas
z Visualizar sistemas
z Construir sistemas
z Documentar sistemas
z Ingeniería directa: hacer diagramas y luego implementar
z Ingeniería inversa: a partir de código extraer los diagramas
Contenido

z Diagramas de estructura
z Clases y objetos
z Relaciones
z Interfaces
z Diagramas de comportamiento
z Colaboraciones
z Diagramas de secuencia
z Diagramas de comunicación
Diagramas de estructura
Clases y objetos
z Diagramas de clases: estructura del sistema.
z Clases: conceptos dentro del sistema que comparten los
mismos atributos, operaciones, relaciones y semántica
z Atributos: tipo, visibilidad, posible valor inicial
z Operaciones: signatura, visibilidad
z Relaciones: asociaciones entre clases

z Diagramas de objetos: estructura del sistema en


tiempo de ejecución.
z Objetos: instancias de una clase
z Atributos (valores actuales)
z Links: relaciones entre objetos, instancias de asociaciones
Diagramas de estructura
Clases y objetos. Ejemplo
Diagrama de
Clases: Elemento

Carbono Hidrógeno

Diagrama de
:Hidrógeno :Hidrógeno
Objetos:
:Hidrógeno :Carbono :Carbono :Hidrógeno

:Hidrógeno :Hidrógeno
Diagramas de estructura
Clases y objetos
Nombre En cursiva si es
de la clase Circulo
abstracta
-radio: double
-centrox: double Atributos
visibilidad -centroy: double

+Area(): double
+Perímetro(): double
Operaciones

Clase
del objeto
Nombre unCirculo: Circulo
del objeto radio = 3.4
centrox = 2.0 Valores de
centroy = 2.0 los atributos
Diagramas de estructura
Atributos
z Notación para atributos de clases:

[visibilidad] [/] nombre [:tipo] [multiplicidad] [= valor] [{propiedad}]

z Visibilidad: + (público) – (privado) # protegido


z /: indica que el atributo es derivado
z Multiplicidad: va entre [ ] y vale 1 por defecto
z Propiedades: {readOnly}, {union}, {subsets
<property-name>}, {redefines <property-name>},
{ordered}, {bag}, {seq}, {sequence}, {composite}
z Un atributo subrayado es estático
Diagramas de estructura
Atributos. Ejemplo
ClaseA
name: String
shape: Rectangle
+ size: Integer [0..1]
/ area: Integer {readOnly}
height: Integer = 5
width: Integer
# pos: Point

ClaseB
id: {redefines name}
shape: Square
Diagramas de estructura
Métodos
z Notación para métodos de clases:

[visibilidad] nombre ( [parámetros] ) [: tipo-retorno] [{propiedad}]

z Visibilidad: + (público) – (privado) # protegido


z Parámetros: separados por comas
z Propiedades: {query}, {update}, {concurrent},
{abstract}, {constructor}
z Un método subrayado es estático
z Ejemplos:
z display()
z + toString(): String
Diagramas de estructura
Estereotipos
z Estereotipo: extensión del vocabulario de UML que
permite crear nuevos bloques derivados de los
existentes, pero específicos a un problema concreto

z Ejemplos: <<enumeration>>
z <<type>>
MiBooleano
z <<enumeration>>
z <<interface>> + cierto: Integer
+ false: Integer
z ...
Diagramas de estructura
Relación de generalización
z Especialización
Figura

Circulo Cuadrado Elipse

z Clasificación múltiple
z Clasificación dinámica
Diagramas de estructura
Relación de asociación
z Especifica que una clase utiliza otra clase
z Pueden tener etiquetas: nombre, roles, multiplicidad
navegación

titular Tiene cuentas


Cliente Cuenta
1..* 0..*

z Ejemplos de cardinalidad: z Navegación:


1..* mínimo 1, no hay máximo unidireccional
0..1 mínimo 0, máximo 1 bidireccional
1,2 uno o dos no especificado
3 exactamente 3 no navegable (x)
Diagramas de estructura
Relación de asociación
Diagramas de estructura
Relación de composición
z Relación del tipo todo/parte

Círculo Punto

(todo) (parte)

z Es una relación fuerte:


z Si el Círculo se copia o elimina, también lo hace el Punto
z La cardinalidad en la parte del todo es 0..1 ó 1
Diagramas de estructura
Relación de agregación
z Relación del tipo todo/parte

susFiguras
Ventana Figura
0..*

(todo) (parte)

z No es una relación fuerte:


z La Ventana contiene Figuras, pero cada una puede existir
sin la otra
Diagramas de estructura
Relación de dependencia
z Relación débil de uso que declara que un
cambio en la especificación de un elemento
puede afectar a otro que lo utiliza

susFiguras Figura
Ventana
0..*
Draw(ContextoDibujo)

suContexto

ContextoDibujo

Dependencia
Diagramas de estructura
Interfaces
z Colección de operaciones que especifican un
servicio de una clase o componente
z Separa especificación e implementación de una
abstracción
z Incluyen:
z Nombre
z Operaciones sin implementación
z Relaciones de realización
z Pueden tener relaciones de generalización
z No incluyen:
z Atributos
z Asociaciones
Diagramas de estructura
Interfaces. Ejemplo
Diagramas de estructura
Estilo
z Los atributos no deben ser objetos (usar
relaciones en tal caso)

z Los diagramas de clases no suelen incluir


(son detalles de implementación):
z Constructores
z Métodos de acceso (“get”/“set”)
z Métodos de gestión de elementos de una
asociación o agregación (por ej. “add”/“remove”)
DiagramasReproductorCD
de estructura
ListaCanciones
Ejemplo - Tpausa: Tiempo
- NumActual: Entero
1 disco
...
1
+ obtenerCancion(Orden: Entero):
+ stop() Cancion
+ pause() + numCanciones(): Entero
InterfazUsuario + play() 1 ....
+ eject()
...
+ apagar()
... + finCancion()
- buscaDisco(d: InfoDisco): pista 0..*
1
ListaCanciones Cancion
player 1 actual
- titulo: Cadena
driver 1 - duracion: Tiempo
ControladorCD - Artista: Cadena
- Orden: Entero
...
...
+ play(act: Cancion, desde: Tiempo)
+ stop() : Tiempo
+ detectarDisco() : InfoDisco
+ detectarAbierto() : Logico
+ abrir()
+ cerrar()
+ apagar()
Diagramas de estructura
Ejercicio
z Definir un diagrama de clases que describa una red de
ordenadores.
z Los elementos que puede incluir la red son:
z Servidores, PCs, Impresoras
z Hubs, Cables de red
z Los PCs pueden conectarse con un único Hub, mientras que
los Servidores pueden conectarse con uno o varios.
z Servidores y PCs pueden generar mensajes de cierta longitud.
z Los Hubs tienen un número de puertos, algunos de los cuales
puede usarse para conectar con otros Hubs. Además tienen
cierta probabilidad de “perder” mensajes.
z Existe cierta probabilidad de que las Impresoras se averíen
durante cierto tiempo.
Diagramas de estructura
Ejercicio: posible solución

El que los PCs puedan conectarse con un único Hub y los servidores con
uno o varios puede modelarse mediante una restricción OCL, o añadiendo
asociaciones desde Servidor y PC
Diagramas de comportamiento
Colaboraciones
z Una colaboración es una interacción entre dos o
más clases

z Muestra la implementación de una operación o la


realización de un caso de uso

z Pueden describirse con más de un diagrama de


interacción

z Patrones = colaboraciones parametrizadas


Diagramas de comportamiento
Colaboraciones. Ejemplo
Estructura interna de una colaboración

rol

bindings
Diagramas de comportamiento
Diagramas de interacción
z Interacción: comportamiento que comprende una
secuencia de mensajes intercambiados entre un
conjunto de objetos de una colaboración, dentro de
un contexto determinado, para alcanzar cierto fin

z Especifican la secuencia de mensajes para cumplir


el objetivo de la colaboración

z Tipos de diagrama de interacción:


z de secuencia: destaca la ordenación temporal
z de comunicación (o colaboración): destaca la organización
estructural de los objetos involucrados
Diagramas de comportamiento
Diagramas de comunicación
z Objetos necesarios
(roles o instancias) / Observer : SlidingBarIcon
para una interacción,
y sus relaciones relación participantes
roles
z Similar a un :Window
diagrama de objetos,
muestra el contexto relación
necesario para una
colaboración /Subject :CallQueue
Diagramas de comportamiento
Diagramas de comunicación
z Pueden mostrar la secuencia de mensajes
Llamadas anidadas:
realizarPago(cantidad) 1: realizarPago(cantidad)
:Registro :Venta

1.1: crear(cantidad)

:Pago

Iteraciones:

ejecutar( ) 1*[i:=1..N]: num:= nextInt()


:Simulador :Random
Diagramas de comportamiento
Diagramas de comunicación

:ClaseE

2: msg6()

msg1() 1a [test]: msg2()


:ClaseA :ClaseB

condiciones 1b [not test]: msg4() 1a.1: msg3()

:ClaseD :ClaseC
1b.1: msg5()
Diagramas de comportamiento
Diagramas de comunicación

servers
:Client :Server
:Server
1:aServer:=find(specs)

multi-objeto

aServer <<local>>
:Server
2:process
Diagramas de comportamiento
Diagramas de secuencia
z Mensajes entre objetos (roles o instancias) para una
interacción

z Dos dimensiones:
z Temporal: generalmente vertical
z Instancias: generalmente horizontal. El orden relativo de
las instancias no tiene importancia

z Muestra la existencia y duración de las instancias,


pero no sus relaciones
Diagramas de comportamiento
Diagramas de secuencia
:caller :exchange :receiver

lift receiver
dial tone
Objetos
dial digit
Focos de ...
Control route

ringing tone phone rings


answer phone
Mensajes
stop tone stop ringing
Diagramas de comportamiento
Diagramas de secuencia
Tipos de flujo de control
Llamada a procedimiento u otra forma de llamada con
anidamiento de control. La secuencia anidada termina
antes de que siga la operación que invocó. Puede
usarse para procesos concurrentes cuando el mensaje
es síncrono.
Comunicación asíncrona, sin anidamiento de control.
El objeto que envía no se detiene a esperar respuesta.

Retorno de una llamada a procedimiento. Puede


omitirse si queda claro por el fin de la activación.
Diagramas de comportamiento
Diagramas de secuencia

ac: ds:
LoginPage:
Authentication UserData
Servlet
Controller Service

login(“Dan”,“b4”) validateCredentials
(“Dan”,“b4”)
restoreUserData(“Dan”)
create(“Dan”,”Admin”)
CurrentUser:
UserData
currentUser
currentUser
Diagramas de comportamiento
Diagramas de secuencia
operador guarda marco
preferente usual
:Pedido
:Distribuidor :Distribuidor
entregar()

loop [for each producto]


procedure entregar()
alt [value > 10000] foreach producto:
if producto.value>10000
entregar() preferente.entregar()
else
usual.entregar()
[else] end if
entregar() end for
end procedure
Diagramas de comportamiento
Diagramas de secuencia
z Fragmentos combinados, operadores:

z Alternativa (alt): elección (mediante una guarda) de una interacción.


Múltiples fragmentos, sólo se ejecuta el que cumpla la guarda.
z Opción (opt): equivale a un operador alt con un solo fragmento. Se ejecuta
si la guarda se cumple.
z Bucle (loop): el fragmento se ejecuta múltiples veces. La guarda indica
cómo realizar la iteración.
z Negativa (neg): define una interacción inválida.
z Paralelo (par): cada fragmento se ejecuta en paralelo.
z Región crítica (critical): sólo puede haber un proceso ejecutando
simultáneamente el fragmento
z Diagrama de secuencia (sd): rodea un diagrama de secuencia
z Referencia (ref): el marco hace referencia a una interacción definida en otro
diagrama. El marco dibujado cubre las líneas involucradas en la interacción.
Puede incluir parámetros y un valor de retorno.
Diagramas de comportamiento
Diagramas de secuencia
sd name

name:Clase1

new
:Clase2

mensaje

autollamada

return

delete
Diagramas de comportamiento
Diagramas de secuencia

sd M sd N

:Clase1 :Clase2 :Clase3 :Clase2 :Clase3

m1 m3 m4
m2
m3 m5
ref
N
Diagramas de comportamiento
Ejercicio
Especificar el diagrama de secuencia de la operación “crearLaberinto”

public class JuegoLaberinto {


public Laberinto crearLaberinto () {
Laberinto lab = new Laberinto();
Habitacion h1 = new Habitacion();
Habitacion h2 = new Habitacion();
Puerta puerta = new Puerta(h1, h2);
lab.añadeHabitacion(h1);
lab.añadeHabitacion(h2);
h1.añadePuerta(puerta);
return lab;
}
}
Diagramas de comportamiento
Solución
:JuegoLaberinto
crearLaberinto()
lab:Laberinto

h1:Habitacion

h2:Habitacion
create(h1,h2)
puerta:Puerta
añadeHabitacion(h1)

añadeHabitacion(h2)

añadePuerta(puerta)
Diagramas de comportamiento
Ejercicio
Especificar el diagrama de secuencia de la operación “crearLaberinto”

public class JuegoLaberinto {


private Laberinto lab;
private boolean conVentana;

public JuegoLaberinto() {
lab = new Laberinto();
conVentana = true;
}

public void crearLaberinto () {


Habitacion h;
for (int i=0; i<10; i++) {
h = new Habitacion();
if (conVentana == true)
h.añadeVentana(new Ventana());
lab.añadeHabitacion(h);
}
}
Diagramas de comportamiento
Solución
:JuegoLaberinto lab:Laberinto
crearLaberinto()

loop [for i = 1 to 10]


h:Habitacion

opt [tieneVentana==true]

v:Ventana

añadeVentana(v)

añadeHabitacion(h)
Diagramas de comportamiento
Ejercicio
Especificar el diagrama de secuencia de la operación “realizarJugada”
definida en la clase Jugador, para el juego del parchís

* 2
Jugador Dado
- casillaActual: int
+ realizarJugada(): void + tirar(): int
+ casillaActual(): int
*
1
Tablero

+ mover(int actual,
int unidades):
boolean
Diagramas de comportamiento
Solución
:Jugador d1:Dado d2:Dado :Tablero
realizarJugada()

par tirar()

n1

tirar()

n2

ca:=casillaActual()

mover(ca,n1+n2)

movRealizado
Diagramas de comportamiento
Ejercicio
Identificar las clases relevantes y realizar el diagrama de secuencia para
el siguiente caso de uso, que corresponde a la realización de una
llamada desde un teléfono móvil.

z El usuario pulsa los dígitos del número de teléfono


z Para cada dígito
z la pantalla se actualiza para añadir el dígito marcado
z se emite un tono por el receptor
z El usuario pulsa el botón “Enviar”
z El indicador “en uso” se ilumina en pantalla
z El móvil establece conexión con la red
z Los dígitos acumulados se mandan a la red
z Se establece la conexión con el número marcado
Diagramas de comportamiento
Ejercicio: posible solución

:Button :Dialer :Display :Speaker send:Button :CellularRadio

loop [for i = 1 to 9]
digit(code) displayDigit
(code) emitTone
(code)

send()

connect(pno)

inUse()
Diagramas de comportamiento
Ejercicio: posible solución

:Button :Dialer :Display :Speaker send:Button :CellularRadio

loop [for i = 1 to 9]
digit(code) displayDigit
(code) emitTone
(code)

send()

connect(pno)

inUse()

¿Diagrama de colaboración equivalente?


Diagramas de comportamiento
Solución

Você também pode gostar