Você está na página 1de 57

Tema 1

UML:
Lenguaje Unificado de Modelado

Tcnicas de Programacin - Curso 2008/09


(Esther Guerra Snchez)

Introduccin
z
z

Unified Modeling Language


Motivacin: combinar y estandarizar una notacin para
describir sistemas orientados a objetos a partir de los
lenguajes de modelado ms conocidos
z
z
z

Booch OOD
Rumbaugh OMT
Jacobson OOSE y Objectory

UML es un lenguaje grfico para visualizar, especificar,


construir y documentar un sistema software desde distintos
puntos de vista
UML permite describir los aspectos estticos (estructura) y
dinmicos (comportamiento) de un sistema

Introduccin
z

Similitud:
z
z

Arquitectos: planos edificios


Ingenieros del software: diagramas programas

UML versin 2.0 (finales 2004)

Dominio: contexto de un problema


Modelo: abstraccin de un problema

Contenido
z

Diagramas de estructura
z
z
z

Clases y objetos
Relaciones
Interfaces

Diagramas de comportamiento
z
z
z

Colaboraciones
Diagramas de secuencia
Diagramas de comunicacin

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 semntica
z Atributos: tipo, visibilidad, posible valor inicial
z Operaciones: signatura, visibilidad
Asociaciones: relaciones entre clases

Diagramas de objetos: estructura del sistema en


tiempo de ejecucin.
z
z

Objetos: instancias de una clase


z Atributos (valores actuales)
Links: relaciones entre objetos, instancias de asociaciones

Diagramas de estructura
Clases y objetos. Ejemplo
Diagrama de
clases:

Elemento

Carbono

Diagrama de
objetos:
:Hidrgeno

Hidrgeno

:Hidrgeno

:Hidrgeno

:Carbono

:Carbono

:Hidrgeno

:Hidrgeno

:Hidrgeno

Diagramas de estructura
Clases y objetos
Nombre
de la clase
visibilidad

Circulo
-radio: double
-centrox: double
-centroy: double
+Area(): double
+Permetro(): double

Nombre
del objeto

En cursiva si es
abstracta
Atributos

Operaciones
Clase
del objeto

unCirculo: Circulo
radio = 3.4
centrox = 2.0
centroy = 2.0

Valores de
los atributos

Diagramas de estructura
Atributos
z

Notacin para atributos de clases:

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


z
z
z
z

Visibilidad: + (pblico) (privado) # protegido


/: indica que el atributo es derivado
Multiplicidad: va entre [ ] y vale 1 por defecto
Propiedades: {readOnly}, {union}, {subsets
<property-name>}, {redefines <property-name>},
{ordered}, {bag}, {seq}, {sequence}
Un atributo subrayado es esttico

Diagramas de estructura
Atributos. Ejemplo
ClaseA
name: String
shape: Rectangle
+ size: Integer [0..1]
/ area: Integer {readOnly}
height: Integer = 5
width: Integer
# pos: Point

public class ClaseA {


String name;
Rectangle shape;
public Integer size = null;
Integer area;
Integer height = new Integer(5);
Integer width;
protected Point pos;
public Integer getArea () {
return height*width;
}
}

ClaseB
id: {redefines name}
shape: Square

public class ClaseB extends ClaseA {


String id;
Square shape;
}

Diagramas de estructura
Mtodos
z

Notacin para mtodos de clases:

[visibilidad] nombre ( [parmetros] ) [: tipo-retorno] [{propiedad}]


z
z
z
z
z

Visibilidad: + (pblico) (privado) # protegido


Parmetros: separados por comas
Propiedades: {query}, {update}, {concurrent},
{abstract}, {constructor}
Un mtodo subrayado es esttico
Ejemplos:
z
z

display()
+ toString(): String

Diagramas de estructura
Estereotipos
z

Estereotipo: extensin del vocabulario de UML que


permite crear nuevos bloques derivados de los
existentes, pero especficos a un problema concreto

Ejemplos:
z
z
z
z

<<type>>
<<enumeration>>
<<interface>>
...

<<enumeration>>

MiBooleano
+ cierto: Integer
+ false: Integer

Diagramas de estructura
Relacin de generalizacin
z

Especializacin
Figura

Circulo

Cuadrado

public class Figura


public class Circulo extends Figura

Elipse

Diagramas de estructura
Relacin de generalizacin
z

Clasificacin mltiple: un objeto puede pertenecer a


varios subtipos no relacionados por herencia
Persona

{sexo}

Mujer

Hombre

discriminador

{profesin}

Celador

Enfermero

Mdico

Diagramas de estructura
Relacin de asociacin
z
z

Especifica que una clase utiliza otra clase


Pueden tener etiquetas: nombre, roles, multiplicidad
navegacin

Cliente

titular

Tiene

1..*

Ejemplos de cardinalidad:
1..*
0..1
1,2
3

mnimo 1, no hay mximo


mnimo 0, mximo 1
uno o dos
exactamente 3

cuentas
0..*

Cuenta

Navegacin:
unidireccional
bidireccional
no especificado
no navegable (x)

Diagramas de estructura
Relacin de asociacin
public class B {
List<A> a = new ArrayList<A>(4);
}
Equivalente a:

B
a: A[1..4]

Diagramas de estructura
Relacin de composicin
z

Relacin del tipo todo/parte


Crculo

Punto

(todo)

(parte)

Es una relacin fuerte:


z
z

Si el Crculo se copia o elimina, tambin lo hace el Punto


La cardinalidad en la parte del todo es 0..1 1

Diagramas de estructura
Relacin de agregacin
z

Relacin del tipo todo/parte


Ventana

susFiguras
0..*

(todo)
z

Figura

(parte)

No es una relacin fuerte:


z

La Ventana contiene Figuras, pero cada una puede existir


sin la otra

Diagramas de estructura
Relacin de dependencia
z

Relacin dbil de uso que declara que un


cambio en la especificacin de un elemento
puede afectar a otro que lo utiliza
Ventana

susFiguras

Figura

0..*
Draw(ContextoDibujo)

suContexto
ContextoDibujo

Dependencia

Diagramas de estructura
Clases asociativas
z

Asociacin con atributos propios


casado con >
Empleado

Persona

testigos 2
Matrimonio
- fecha

Clase asociativa

Diagramas de estructura
Interfaces
z
z
z

Coleccin de operaciones que especifican un


servicio de una clase o componente
Separa especificacin e implementacin de una
abstraccin
Incluyen:
z
z
z
z

Nombre
Operaciones sin implementacin y constantes
Relaciones de realizacin
Pueden tener relaciones de generalizacin

No incluyen:
z
z

Atributos
Asociaciones

Diagramas de estructura
Interfaces. Ejemplo

Diagramas de estructura
Clases parametrizadas (templates)
z
z

Descriptor de una clase con parmetros


Define una familia de clases, donde cada
clase se especifica con un binding de los
parmetros a valores
Los parmetros suelen representar tipos de
atributos, pero tambin pueden representar
enteros, otros tipos u operaciones

Diagramas de estructura
Clases parametrizadas (templates)
T
MiArray
+ elems: T[0..*]
+ add(T elem): void
+ get(int pos): T

public class MiArray<T> {


List<T> elems = new ArrayList<T>;
void add (T elem) {
...
}
T get (int pos) {
...
}
}

<<bind>> (Ficha)

ListinTelefonico

public class ListinTelefonico {


MiArray<Ficha> listin =
new MiArray<Ficha>();
}

Diagramas de estructura
Estilo
z

Los atributos no deben ser objetos (usar


relaciones en tal caso)

Los diagramas de clases no suelen incluir


(son detalles de implementacin):
z
z
z

Constructores
Mtodos de acceso (get/set)
Mtodos de gestin de elementos de una
asociacin o agregacin (por ej. add/remove)

Diagramas de estructura
Modelado de sistemas
z

Nombres: Clases y sus propiedades

Adjetivos: Valores de las propiedades

Verbos: Comportamiento de las clases (mtodos)


"El coche tiene color rojo y se mueve
El documento tiene letra grande y se muestra

1.
2.
3.
4.
5.
6.

Identificar clases
Identificar y depurar relaciones
Identificar atributos de clases y relaciones
Aadir herencia
Comprobar casos de uso (iterar)
Aadir y simplificar mtodos

Diagramas de estructura
Ejercicio
z

Representa mediante un diagrama de clases la siguiente


especificacin:
z
z
z
z
z
z

Una aplicacin necesita almacenar informacin sobre empresas,


sus empleados y sus clientes
Empleados y clientes se caracterizan por su nombre y edad
Los empleados tienen un sueldo bruto
Los empleados que son directivos tienen una categora y un
conjunto de empleados subordinados
De los clientes se necesita conocer su telfono de contacto
La aplicacin necesita mostrar los datos de empleados y clientes

Diagramas de estructura
Ejercicio
R1: una aplicacin necesita
almacenar informacin
sobre empresas, sus
empleados y sus clientes

Empleado
empleados

R2: empleados y clientes se


caracterizan por su nombre
y edad

Cliente
1..*

clientes 0..*

1..*
Empresa

R3: los empleados tienen


un sueldo bruto

Diagramas de estructura
Ejercicio

Persona

R2: empleados y clientes se


caracterizan por su nombre
y edad

- nombre: String
- edad: Integer

R3: los empleados tienen


un sueldo bruto
Empleado
- sueldo_bruto: Double
empleados
1..*

Cliente
clientes 0..*

R4: los empleados que son


directivos tienen una
categora y un conjunto de
empleados subordinados

1..*
Empresa

Diagramas de estructura
Ejercicio

Persona

R4: los empleados que son


directivos tienen una
categora y un conjunto de
empleados subordinados

subordinados

0..*

- nombre: String
- edad: Integer

R5: telfono de clientes


R6: mostrar datos de
empleados y clientes

Empleado

Cliente

- sueldo_bruto: Double

1..*

clientes 0..*

empleados

1
Directivo

0..* - categoria: String

1..*
Empresa

Diagramas de estructura
Ejercicio

subordinados

0..*

Persona
- nombre: String
- edad: Integer

R5: telfono de clientes

+ mostrar ()

R6: mostrar datos de


empleados y clientes

Empleado
- sueldo_bruto: Double
+ mostrar ()
+ calcular_salario_neto()

Cliente
1..*
empleados

- telefono: String
+ mostrar ()
clientes 0..*

1
Directivo

0..* - categoria: String


+ mostrar ()

1..*
Empresa

- nombre: String

Diagramas de estructura
Ejemplo

Diagramas de
estructura
ReproductorCD
Ejemplo
InterfazUsuario
...
...

- Tpausa: Tiempo
- NumActual: Entero

disco
1

+ stop()
+ pause()
+ play()
1
+ eject()
+ apagar()
+ finCancion()
- buscaDisco(d: InfoDisco):
ListaCanciones
player 1
driver 1
ControladorCD
...
+ play(act: Cancion, desde: Tiempo)
+ stop() : Tiempo
+ detectarDisco() : InfoDisco
+ detectarAbierto() : Logico
+ abrir()
+ cerrar()
+ apagar()

ListaCanciones

...
+ obtenerCancion(Orden: Entero):
Cancion
+ numCanciones(): Entero
....

pista 0..*
1
actual

Cancion
- titulo: Cadena
- duracion: Tiempo
- Artista: Cadena
- Orden: Entero
...

Diagramas de comportamiento
Colaboraciones
z

Una colaboracin es una interaccin entre dos o


ms clases

Muestra la implementacin de una operacin o la


realizacin de un caso de uso

Pueden describirse con ms de un diagrama de


interaccin

Patrones = colaboraciones parametrizadas

Diagramas de comportamiento
Colaboraciones. Ejemplo
Estructura interna de una colaboracin

rol

bindings

restriccin

Diagramas de comportamiento
Diagramas de interaccin
z

Interaccin: comportamiento que comprende una


secuencia de mensajes intercambiados entre un
conjunto de objetos de una colaboracin, dentro de
un contexto determinado, para alcanzar cierto fin

Especifican la secuencia de mensajes para cumplir


el objetivo de la colaboracin

Tipos de diagrama de interaccin:


z
z

de secuencia: destaca la ordenacin temporal


de comunicacin (o colaboracin): destaca la organizacin
estructural de los objetos involucrados

Diagramas de comportamiento
Diagramas de comunicacin
z

Objetos necesarios
(roles o instancias)
para una interaccin,
y sus relaciones

/ Observer : SlidingBarIcon

relacin

roles
z

Similar a un
diagrama de objetos,
muestra el contexto
necesario para una
colaboracin

:Window

relacin
/Subject :CallQueue

participantes

Diagramas de comportamiento
Diagramas de comunicacin
z

Pueden mostrar la secuencia de mensajes,


(orden relativo especificado con nmeros)

Llamadas anidadas:
realizarPago(cantidad)

:Registro

1: realizarPago(cantidad)

:Venta

1.1: crear(cantidad)

:Pago

Iteraciones:
ejecutar( )

:Simulador

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

:Random

Diagramas de comportamiento
Diagramas de comunicacin
:ClaseE
2: msg6()
msg1()

condiciones

:ClaseA

1a [test]: msg2()

1b [not test]: msg4()

:ClaseD

1b.1: msg5()

:ClaseB

1a.1: msg3()

:ClaseC

Diagramas de comportamiento
Diagramas de comunicacin
(i) iteracin para obtener referencias
a las instancias individuales
servers

:Client

:Server
:Server

1:aServer:=find(specs)

multi-objeto
aServer <<local>>

:Server
2:process
(ii) mensaje a cada instancia,
usando la referencia temporal

Diagramas de comportamiento
Diagramas de secuencia
z

Mensajes entre objetos (roles o instancias) para una


interaccin

Dos dimensiones:
z
z

Temporal: generalmente vertical


Instancias: generalmente horizontal. El orden relativo de
las instancias no tiene importancia

Muestra la existencia y duracin de las instancias,


pero no sus relaciones

Diagramas de comportamiento
Diagramas de secuencia
:caller

:exchange

:receiver

lift receiver
dial tone

Objetos
Focos de
Control

dial digit
...
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 operacin que invoc. Puede
usarse para procesos concurrentes cuando el mensaje
es sncrono.
Comunicacin asncrona, sin anidamiento de control.
El objeto que enva no se detiene a esperar respuesta.
Retorno de una llamada a procedimiento. Puede
omitirse si queda claro por el fin de la activacin.

Diagramas de comportamiento
Diagramas de secuencia
LoginPage:
Servlet
login(Dan,b4)

ac:
Authentication
Controller

ds:
UserData
Service

validateCredentials
(Dan,b4)
restoreUserData(Dan)
create(Dan,Admin)
currentUser
currentUser

mensaje de
creacin

CurrentUser:
UserData

Diagramas de comportamiento
Diagramas de secuencia
guarda

operador

marco
preferente
:Distribuidor

:Pedido

usual
:Distribuidor

entregar()
loop
alt

[for each producto]


[value > 10000]
entregar()

[else]

entregar()

procedure entregar()
foreach producto:
if producto.value>10000
preferente.entregar()
else
usual.entregar()
end if
end for
end procedure

Diagramas de comportamiento
Diagramas de secuencia
z

Fragmentos combinados, operadores:


z
z
z
z
z
z
z
z

Alternativa (alt): eleccin (mediante una guarda) de una interaccin.


Mltiples fragmentos, slo se ejecuta el que cumpla la guarda.
Opcin (opt): equivale a un operador alt con un solo fragmento. Se ejecuta
si la guarda se cumple.
Bucle (loop): el fragmento se ejecuta mltiples veces. La guarda indica
cmo realizar la iteracin.
Negativa (neg): define una interaccin invlida.
Paralelo (par): cada fragmento se ejecuta en paralelo.
Regin crtica (critical): slo puede haber un proceso ejecutando
simultneamente el fragmento
Diagrama de secuencia (sd): rodea un diagrama de secuencia
Referencia (ref): el marco hace referencia a una interaccin definida en otro
diagrama. El marco dibujado cubre las lneas involucradas en la interaccin.
Puede incluir parmetros y un valor de retorno.

Diagramas de comportamiento
Diagramas de secuencia
sd name

name:Clase1

new

:Clase2

mensaje
autollamada
return
delete

mensaje de
destruccin

Diagramas de comportamiento
Diagramas de secuencia
sd M

sd N

:Clase1

:Clase2

:Clase3

m1

:Clase2
m3

:Clase3
m4

m2
m3

m5
ref

Diagramas de comportamiento
Ejercicio
Especificar el diagrama de secuencia de la operacin 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.aadeHabitacion(h1);
lab.aadeHabitacion(h2);
h1.aadePuerta(puerta);
return lab;
}
}

Diagramas de comportamiento
Solucin
:JuegoLaberinto
crearLaberinto()

lab:Laberinto
h1:Habitacion
h2:Habitacion
create(h1,h2)

puerta:Puerta
aadeHabitacion(h1)
aadeHabitacion(h2)
aadePuerta(puerta)

Diagramas de comportamiento
Ejercicio
Especificar el diagrama de secuencia de la operacin 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.aadeVentana(new Ventana());
lab.aadeHabitacion(h);
}
}

Diagramas de comportamiento
Solucin
:JuegoLaberinto

lab:Laberinto

crearLaberinto()
loop

[for i = 1 to 10]

h:Habitacion
opt

[conVentana==true]

v:Ventana
aadeVentana(v)

aadeHabitacion(h)

Diagramas de comportamiento
Ejercicio
Especificar el diagrama de secuencia de la operacin realizarJugada
definida en la clase Jugador, para el juego del parchs

Jugador

- casillaActual: int
+ realizarJugada(): void
+ casillaActual(): int

Dado
+ tirar(): int

*
1

Tablero
+ mover(int actual,
int unidades):
boolean

Diagramas de comportamiento
Solucin
d1:Dado

:Jugador

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 realizacin de una
llamada desde un telfono mvil.
z
z

El usuario pulsa los dgitos del nmero de telfono


Para cada dgito
z
z

z
z
z
z
z

la pantalla se actualiza para aadir el dgito marcado


se emite un tono por el receptor

El usuario pulsa el botn Enviar


El indicador en uso se ilumina en pantalla
El mvil establece conexin con la red
Los dgitos acumulados se mandan a la red
Se establece la conexin con el nmero marcado

Diagramas de comportamiento
Ejercicio: posible solucin
:Button

loop

:Dialer

:Display

:Speaker

send:Button

:Net

:Mobile

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

displayDigit
(code)

emitTone
(code)

send()
inUse()
connect(pno)
connect()

Diagramas de comportamiento
Ejercicio: posible solucin
:Button

loop

:Dialer

:Display

:Speaker

send:Button

:Net

:Mobile

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

displayDigit
(code)

emitTone
(code)

send()
inUse()
connect(pno)
connect()

Diagrama de colaboracin equivalente?

Diagramas de comportamiento
Solucin
:Speaker
1.2: emitTone(code)

:Button

1*[i=1..9]: digit (code)

:Dialer

send:Button
2: send()

2.2: connect(pno)

:Net

1.1: displayDigit(code),
2.1: inUse()

:Display

2.2.1: connect()

:Mobile

Você também pode gostar