You are on page 1of 57

Tema 1

UML:
Lenguaje Unificado de Modelado

Técnicas de Programación - Curso 2008/09


(Esther Guerra Sánchez)
Introducción

z Unified Modeling Language


z Motivación: combinar y estandarizar una notación para
describir sistemas orientados a objetos a partir de los
lenguajes de modelado más conocidos
z Booch – OOD
z Rumbaugh – OMT
z Jacobson – OOSE y Objectory
z UML es un lenguaje gráfico para visualizar, especificar,
construir y documentar un sistema software desde distintos
puntos de vista
z UML permite describir los aspectos estáticos (estructura) y
dinámicos (comportamiento) de un sistema
Introducción

z Similitud:
z Arquitectos: planos ⇒ edificios
z Ingenieros del software: diagramas ⇒ programas

z UML versión 2.0 (finales 2004)

z Dominio: contexto de un problema


z Modelo: abstracción de un problema
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 Asociaciones: relaciones 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}
z Un atributo subrayado es estático
Diagramas de estructura
Atributos. Ejemplo
public class ClaseA {
ClaseA String name;
name: String Rectangle shape;
shape: Rectangle public Integer size = null;
Integer area;
+ size: Integer [0..1]
Integer height = new Integer(5);
/ area: Integer {readOnly} Integer width;
height: Integer = 5 protected Point pos;
width: Integer
# pos: Point public Integer getArea () {
return height*width;
}
}

ClaseB public class ClaseB extends ClaseA {


String id;
id: {redefines name} Square shape;
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

public class Figura …


Figura public class Circulo extends Figura …

Circulo Cuadrado Elipse


Diagramas de estructura
Relación de generalización
z Clasificación múltiple: un objeto puede pertenecer a
varios subtipos no relacionados por herencia

Persona discriminador

{sexo} {profesión}

Mujer Hombre Celador Enfermero Médico


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
public class B {
List<A> a = new ArrayList<A>(4);
}

Equivalente a:
B
a: A[1..4]
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
Clases asociativas
z Asociación con atributos propios

casado con >


Empleado Persona
1 1
testigos 2
Matrimonio

- fecha

Clase asociativa
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 y constantes
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
Clases parametrizadas (templates)
z Descriptor de una clase con parámetros
z Define una familia de clases, donde cada
clase se especifica con un binding de los
parámetros a valores
z Los parámetros suelen representar tipos de
atributos, pero también pueden representar
enteros, otros tipos u operaciones
Diagramas de estructura
Clases parametrizadas (templates)

T public class MiArray<T> {


List<T> elems = new ArrayList<T>;
void add (T elem) {
MiArray ...
+ elems: T[0..*] }
T get (int pos) {
+ add(T elem): void ...
+ get(int pos): T }
}

<<bind>> (Ficha)
public class ListinTelefonico {
MiArray<Ficha> listin =
new MiArray<Ficha>();
ListinTelefonico }
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”)
Diagramas de estructura
Modelado de sistemas
z Nombres: Clases y sus propiedades
z Adjetivos: Valores de las propiedades
z Verbos: Comportamiento de las clases (métodos)

"El coche tiene color rojo y se mueve“


“El documento tiene letra grande y se muestra“

1. Identificar clases
2. Identificar y depurar relaciones
3. Identificar atributos de clases y relaciones
4. Añadir herencia
5. Comprobar casos de uso (iterar)
6. Añadir y simplificar métodos
Diagramas de estructura
Ejercicio
z Representa mediante un diagrama de clases la siguiente
especificación:

z Una aplicación necesita almacenar información sobre empresas,


sus empleados y sus clientes
z Empleados y clientes se caracterizan por su nombre y edad
z Los empleados tienen un sueldo bruto
z Los empleados que son directivos tienen una categoría y un
conjunto de empleados subordinados
z De los clientes se necesita conocer su teléfono de contacto
z La aplicación necesita mostrar los datos de empleados y clientes
Diagramas de estructura
Ejercicio
R1: una aplicación necesita
almacenar información
sobre empresas, sus
empleados y sus clientes

Empleado Cliente
empleados 1..* clientes 0..*

R2: empleados y clientes se


caracterizan por su nombre 1 1..*
y edad
Empresa
R3: los empleados tienen
un sueldo bruto
Diagramas de estructura
Ejercicio Persona
R2: empleados y clientes se - nombre: String
- edad: Integer
caracterizan por su nombre
y edad

R3: los empleados tienen


un sueldo bruto

Empleado Cliente
- sueldo_bruto: Double clientes 0..*
empleados 1..*

1 1..*
R4: los empleados que son
directivos tienen una Empresa
categoría y un conjunto de
empleados subordinados
Diagramas de estructura
Ejercicio Persona
R4: los empleados que son - nombre: String R5: teléfono de clientes
- edad: Integer
directivos tienen una
categoría y un conjunto de R6: mostrar datos de
empleados subordinados empleados y clientes

Empleado Cliente
subordinados
- sueldo_bruto: Double 1..* clientes 0..*
0..*
empleados

1 1..*

Directivo Empresa
0..* - categoria: String
Diagramas de estructura
Ejercicio Persona
- nombre: String R5: teléfono de clientes
- edad: Integer
+ mostrar () R6: mostrar datos de
empleados y clientes

Empleado Cliente
subordinados 1..*
- sueldo_bruto: Double - telefono: String
0..* empleados
+ mostrar () + mostrar ()
+ calcular_salario_neto() clientes 0..*

1 1..*

Directivo Empresa
0..* - categoria: String - nombre: String
+ mostrar ()
Diagramas de estructura
Ejemplo
Diagramas de estructura
ReproductorCD
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 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

restricción
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,
(orden relativo especificado con números)
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
(i) iteración 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
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

mensaje de
creación
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

mensaje de
destrucción
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 [conVentana==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 :Net :Mobile

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

send()

inUse()

connect(pno)
connect()
Diagramas de comportamiento
Ejercicio: posible solución

:Button :Dialer :Display :Speaker send:Button :Net :Mobile

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

send()

inUse()

connect(pno)
connect()

¿Diagrama de colaboración equivalente?


Diagramas de comportamiento
Solución

:Speaker send:Button

1.2: emitTone(code) 2: send()

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


:Button :Dialer :Net

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

:Display :Mobile

You might also like