Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
UML:
Lenguaje Unificado de
Modelado http://uml.org
Tema 4
TACC II
Curso 2008/09
1
Introducción
z Similitud:
{ Arquitectos, edificios, planos
{ Ing. Inf., programas, diagramas
z UML
{ Unified Modeling Language. Versión 2.0 (finales 2004)
{ Diagramas (ing.
(ing inf
inf.))
z Usados como esquemas y menos con información rigurosa (“planos
de arquitectos”)
z Dos modos:
• Ingeniería inversa: a partir de código hacer diagramas
• Ingeniería directa: hacer diagramas y luego implementar
z Dominio
{ Mundo en el que hay definido un problema
z Modelo:
{ Abstracción de un problema
{ Formado por objetos 2
Indice
4
Casos de Uso
z Actor
A t = Algo
Al con comportamiento
t i t (persona,
( otro
t
programa, organización...), que interactua con el
sistema.
5
Casos de Uso
zP
zPasos:
y el nombre y apellidos
Los datos básicos incluyen p del artista,, el título y fecha de la obra,, sus dimensiones,, la técnica
(óleo, acuarela u otras técnicas), el tema (retrato, naturaleza muerta, paisaje, otro) y la clasificación (obra maestra,
obra representativa, otro tipo). Si es obra maestra, el precio recomendado se calcula comparando el cuadro
introducido con los que hay en el registro de cuadros, tomando el más parecido y aplicando un algoritmo que tiene
en cuenta la coincidencia de tema, la técnica y las dimensiones del cuadro. El sistema debe utilizar información de
subasta de todo el mundo que ahora la galería recibe en un CD de manera mensual. Para una obra representativa,
el precio recomendado se calcula como si fuera una obra maestra y luego se aplica una corrección. Para una obra
de otro tipo, se calcula utilizando el área del cuadro y un coeficiente de moda para el artista. Si no hay coeficiente de
moda para un artista, el agente tiene por norma no comprar el cuadro. El coeficiente de moda varia de mes a mes.
En cuanto a la venta de cuadros por parte de la galería, el sistema simplemente registra la fecha de venta, el nombre
y dirección del comprador
p y el p
precio de venta real.
El sistema también deberá detectar nuevas tendencias en el mercado de arte tan pronto como sea posible. La idea
es detectar secuencias de compras por valores mayores que los esperados por la obra de un artista determinado, de
tal manera que tu cliente pueda comprar cuadros de ese artista antes de que otros detecten la tendencia. Con el
objetivo de detectar cuándo el precio de venta es mayor que el precio esperado cuando tu cliente compró el cuadro,
se debe mantener un registro de todas las compras y todas las ventas.
7
Se quieren generar tres informes: compras y ventas realizadas durante un año, y artistas de moda.…
Ejemplo Comprar
p una
Obra maestra
Comprar una
O
Obra representativa
Vendedor
Comprar una
Obra de Otro Tipo
Vender un
cuadro
Producir Informe
tendencias
Actualizar
8
Coeficiente de moda
Ejemplo
Caso de uso: comprar una obra maestra
Actores primarios:
Agente Galería, vendedor
Interesados y Objetivos:
• Agente: quiere obtener una recomendación lo más acertada posible del precio
máximo
á i recomendado
d d d de manera rápida.
á id
• Vendedor: quiere vender el cuadro a un precio razonable de manera rápida.
Precondiciones:
El agente ha entrado en la aplicación.
Garantía de éxito (post-condiciones):
Se registra la venta.
Escenario Principal de Éxito:
1 El agente
1. t iintroduce
t d lla d
descripción
i ió d dell cuadro.
d
2. El sistema busca el cuadro más parecido del mismo autor.
3. El sistema presenta el precio recomendado.
4. El age
agentee hace
ace u
una
ap propuesta
opues a popor debajo de
del pprecio
ec o recomendado,
eco e dado, y e el vendedor
e dedo
acepta la oferta.
5. El agente introduce información de la venta.
Extensiones:
2 N
2a. No hhay ningún
i ú cuadrod parecido id ddell mismo
i autor,
t asíí que ell sistema
i t no presenta
t una
recomendación. 9
4a. El vendedor no acepta la oferta y la venta no se produce.
Ejemplo
Terminal Punto de Venta
TPV
Procesar
Venta
Servicio
cajero de Autorización
Procesar de Pagos
Devoluciones
«actor»
«actor» Analizar
Analizador de Actividad Calculador de
A ti id d de
Actividad d Impuestos
p
Ventas
...
«actor»
Gestionar Sistema de
Seguridad contabilidad
Gestionar
Administrador Usuarios 10
del sistema
Diagramas de Caso de Uso
Relaciones
z Relaciones
R l i entre
t d dos casos d
de uso
{Generalización
z “Es
“E un caso particular
ti l d de …””
z Herencia de clases en POO (overriding)
z También se puede tener esta relación entre dos actores
{Inclusión (include)
z “Implica hacer también …”
{Extensión (extend)
z “Se insertará en …” un determinado punto (llamado “punto de
extensión”) dependiendo de una condición
condición.
z Si un caso de uso depende de varios casos de uso mediante
“extend” tendrá un punto de extensión para cada uno.
11
Ejemplo
Gestión de Pacientes
Cancel Appointment
Scheduler
Make Appointment
<<include>>
<<include>>
Check Patient Record
Doctor
<<extend>> Defer Payment
Pay Bill
13
Casos de Uso
{ Especificación de requisitos
14
Indice
z Diagramas de Casos de Uso.
z Diagramas de Estructura.
{Clases y Objetos.
{Componentes.
{Estructuras Compuestas.
{Despliegue.
{Paquetes.
q
z Diagramas de Comportamiento.
z OCL.
z Herramientas.
z Ejemplos.
z Bibliografía. 15
Clases y Objetos
z Los diagramas de Clases y de Objetos son los
principales modos de representar los aspectos
estructurales en UML.
Diagrama
ag a a de
clases
Carbono Hidrógeno
:Hidrógeno :Hidrógeno
Diagrama de
Di d
objetos :Hidrógeno :Carbono :Carbono :Hidrógeno
17
:Hidrógeno :Hidrógeno
Clases y Objetos
En cursiva si es
Nombre abstracta
de la clase Circulo
-radio: double
-centrox:
t double
d bl At ib t
Atributos
visibilidad -centroy: double
+Area(): double
+Perímetro(): double
Operaciones
Nombre Clase
d l objeto
del bj unCirculo: Circulo del objeto
radio = 3.4
centrox = 2.0
20 Valores de
centroy = 2.0 los atributos 18
Clases
Atributos
z Notación p
para atributos:
z Visibilidad (opcional):
{ Pública: +
{ Privada: -
{ Protegida: #
{ Paquete: ~
z “/” indica que el atributo es derivado.
z La multiplicidad va entre [ ] y por defecto vale 1.
z Propiedades válidas: {readOnly},
{readOnly} {union},
{union} {subsets <property
<property-
name>}, {redefines <property-name>}, {ordered}, {bag}, {seq},
{sequence}, y {composite}.
z Un atributo subrayado es estático.
19
Clases
Ejemplo atributos
ClaseA
name: String
shape: Rectangle
+ size: Integer [0..1]
/ area: Integer {readOnly}
h i ht IInteger
height: t =5
width: Integer
# pos: Point
ClaseB
id: {redefines name}
shape: Square
20
Clases
Métodos
z Notación
N t ió para métodos:
ét d
z Visibilidad (opcional).
z nombre del método
z lista de parámetros formales, separados por coma:
direccion nombre : tipo [multiplicidad] = valor [{propiedad}]
z Los métodos estáticos se subrayan.
z Ejemplos:
display ()
-hide ()
+createWindow (location: Coordinates
Coordinates, container: Container [0
[0..1]):
1]): Window
+toString (): String 21
Asociaciones
Composición
z Un Círculo contiene un Punto
z Se representa con una Composición
Círculo Punto
centro
Círculo Punto
1
z Ejemplos
Ej l ded cardinalidad:
di lid d zN
zNavegación:
ió
1..* mínimo 1, no hay máximo Unidireccional
0..*
0.. mínimo 0, no hay máximo Bidireccional
0..1 mínimo 0, máximo 1
No especificado.
1,2,4 uno, dos o cuatro
3 exactamente tres No navegable (x)
23
Asociaciones
Ejemplos de Navegación y Cardinalidad
24
Ejercicio
z Representa mediante un diagrama de clases la siguiente
especificación:
{ Una aplicación necesita almacenar información sobre
empresas, sus empleados y sus clientes.
{ Ambos se caracterizan por su nombre y edad.
{ Los
L empleados
l d tienen
ti un sueldo
ld bruto,
b t los
l empleados
l d que
son directivos tienen una categoría, así como un conjunto de
empleados
p subordinados.
{ De los clientes además se necesita conocer su teléfono de
contacto.
{ La
L aplicación
li ió necesita
it mostrar
t l
los d t
datos d empleados
de l d y
clientes.
25
Ejercicio
Persona
- nombre
- edad
+ mostrar()
Empleado Cliente
subordinados
- sueldo_bruto - telefono_de_contacto
nombre_empresa
0..*
+ mostrar
t ()
+ calcular_salario_neto()
+mostrar()
1..*
empleados 0..* clientes
1..*
Directivo
0..* Empresa
- categoria 1
- nombre
b
+ mostrar () 26
Asociaciones: Agregación
susFiguras
Ventana Figura
0 *
0..
27
Asociaciones y Dependencia.
Dependencia
z Existen relaciones de conocimiento entre clases que no
implican una relación todo/parte
titular cuentas
Cliente Cuenta
1 *
1.. 0 *
0..
suContexto
ContextoDibujo
28
Dependencia
Clases Asociativas
Nombre asociación
Clase Asociativa 29
Clases y Objetos
j
Estilo
Cliente Orden
nombre 1 0..* fecha
dirección estado
calcImpuesto
calcTotal
1..* 1
Pago calcPesoTotal
monto 1
línea 1..*
31
Ejercicio
z Especificar un diagrama de clases que describa redes
de ordenadores.
z Los elementos que se pueden incluir en la red son:
{ Servidor,
S id PC, PC Impresora.
I
{ Hub, Cable de red.
z Los PCs pueden conectarse con un único Hub, Hub los
servidores con uno o varios.
z Los Servidores y PCs pueden generar mensajes, con
una cierta longitud.
z Los Hubs tienen un número de puertos, algunos de los
cuales puede usarse para conectar con otros Hubs.Hubs
Tienen cierta probabilidad de “perder” mensajes.
z Las impresoras pueden averiarse, con cierta
probabilidad, durante cierto tiempo. 32
Ejercicio Posible Solución.
Ejercicio. Solución
“Los PCs pueden conectarse con un único Hub, los servidores con uno o varios”
33
Podemos modelarlo como una restricción OCL, o bien añadir asociaciones desde
Servidor y PC
Más sobre asociaciones
Asociaciones n-arias
Año
temporada
d
E i
Equipo equipo pichichi
J
Jugador
d
34
Más sobre asociaciones
Adornos en asociaciones y fin de asociación.
zAAsociaciones
i i d
derivadas
i d ((con un “/” d
delante
l t d dell nombre).
b )
z Propiedades, cerca del nombre de la asociación.
z Los finales de la asociación pueden adornarse con:
{ Multiplicidad.
{ Nombre (rol).
( )
{ Propiedades:
z {subsets <nombre-prop>}.
z {redefine <nombre-fin-asoc>}
<nombre-fin-asoc>}.
z {union}.
z {ordered} (un conjunto ordenado).
z {bag} (conjunto con repetición)
repetición).
z {sequence} o {seq} (bag ordenado).
35
Más sobre asociaciones
Adornos en asociaciones y fin de asociación: Ejemplos
a b
A 0..1 *
B
{ordered}
d
C 1 0..1
D
{subsets b}
36
Más sobre asociaciones
Asociaciones Cualificadas
body-condition
post-condición
38
Interfaces
<<interface>>
Clase MiInterfaz Clase
métodos MiInterfaz
Clase
MiInterfaz
39
Plantillas
42
Solucion (ii)
z Nota: pedidos_simples es una asociación derivada. El atributo total de
Pedido es derivado
derivado.
z Habría que incluir las siguientes restricciones OCL:
Context
C t t realizar_pedido:
li did
pre: self.cuentas->exists(c | c.disponible > 0)
Context Pedido:
inv: self.t_productos.num->sum() <= 20
Context añadir_pedido(p:
añadir pedido(p: Producto
Producto, num: int):
pre: p.stock>=num
Objetos
Empleado Cliente
subordinados
- sueldo_bruto - nombre_empresa
+ mostrar () - telefono_de_contacto
+ calcular_salario_neto()
l l l i t ()
+mostrar()
empleados clientes
Directivo
Empresa
- categoria
- nombre
+ mostrar ()
e2 : Empleado e1 : Empleado
- nombre=“María” - nombre=“Pedro”
- edad
edad=25
25 - edad
edad=23
23
- sueldo_bruto=36000 - sueldo_bruto=30000
subordinados empleados empleados
d1 : Directivo empleados
Empresa
- nombre=“Luis” - nombre=“HGJ”
- edad=35
d d 35
- sueldo_bruto=36000
- categoria=“C1” clientes
c1 : Cliente
- nombre=“Luis”
- edad=35 46
- nombre_empresa=“Macroware”
- telefono_de_contacto=91555666
Componentes
z Componente
C t = “Unidad
“U id d Modular
M d l con interfaces
i t f
bien definidos que es reemplazable en su
entorno .
entorno”
z Énfasis
É f i en reutilización
tili ió y encapsulamiento.
l i t
Interfaces Interfaces
que ofrece que requiere
48
Componentes
Vi t d
Vista de caja
j bl
blanca
49
Estructuras Compuestas
z Composición
C i ió de
d elementos
l t ( l ifi d
(clasificadores o
colaboraciones)
51
Estructuras Compuestas
Alternativa a relaciones de composición
A li ti
Application
2
Window Button
Application
2
Window Button
52
Estructuras Compuestas
53
Estructuras Compuestas
p
Colaboración.
E t t
Estructura iinterna
t d
de una colaboración.
l b ió
54
Estructuras Compuestas
p
Colaboración.
O
Ocurrencia
i de
d una colaboración
l b ió en otra.
t Binding.
Bi di
55
Estructuras Compuestas
p
Colaboración.
Template de colaboración.
56
Despliegue
z Definen
D fi lla arquitectura
it t d
de ejecución
j ió dde un sistema.
i t
57
Despliegue
p g
Relaciones entre artefactos.
“Manifestación” de
elementos a través de
artefactos
58
Despliegue
p g
Ejemplo.
59
Paquetes
z Un paquete es un contenedor que agrupa elementos
relacionados.
60
Paquetes
q
Ejemplo.
61
Indice
z Diagramas de Casos de Uso
Uso.
z Diagramas de Estructura.
zDiagramas de Comportamiento
Comportamiento.
{ Diagramas de Interacción.
z Diagramas de Comunicación.
z Diagramas de Secuencia.
z Diagramas de visión de conjunto de la interacción.
z Diagramas de tiempo.
{ Diagramas de Estados.
{ Diagramas de Actividad.
z OCL
z Herramientas.
z Ejemplos
Ejemplos.
z Bibliografía. 62
Diagramas de Interacción
z El comportamiento
t i t se representa
t a través
t é de d
colaboraciones:
{ Colección de objetos:
z Instancias
z Roles
z En un contexto dado
z Diagrama
Di d Secuencia
de S i
z Estructura
E t t d
de llos participantes
ti i t
zDiagramas de Comunicación
z Patrones de comunicación
zDiagramas de Comunicación
zDiagramas de Secuencia
z Temporización
p de la comunicación.
zDiagramas de Secuencia
zDiagramas de Tiempo.
z Estructuración de las interacciones
zDiagrama
g de visión de conjunto
j de la
interacción.
66
Diagramas de Comunicación
z Representa
R t los
l objetos
bj t ( l
(roles o instancias)
i t i )
necesarios para una interacción y sus
relaciones.
:Window
Wi d / Observer
Ob : SlidingBarIcon
Slidi B I
roles
l
relaciones
/Subject :CallQueue
68
Diagramas de Comunicación
:Window
Wi d / Observer
Ob : SlidingBarIcon
Slidi B I
restricción
{
{Observer.reading=length(Subject.queue)
g g ( j q )
/Subject :CallQueue and
Observer.range = (0..Subject.capacity)}
69
Diagramas de Comunicación
Llamadas anidadas:
realizarPago(cantidad) 1: realizarPago(cantidad)
:Registro :Venta
1.1: crear(cantidad)
:Pago
Iteraciones:
Ejectuar() 1*[i:=1..N]: num:= nextInt()
:Simulador :Random
70
Diagramas
g de Comunicación
Multiobjetos.
z R
Representan
t conjuntos
j t d instancias
de i t i en ell
extremo “muchos” de una relación 1:N o M:N
servers
:Client :Server
:Server
1:aServer:=find(specs)
aServer <<local>>
:Server
2:process
72
Diagramas
g de Comunicación
Condiciones.
e:ClaseE
2 msg6()
2: 6()
1b
b [not
[ ot test]:
test] msg4()
sg () 1a.1:
a msg3()
sg3()
d:ClaseD c:ClaseC
1b 1 msg5()
1b.1: 5()
73
Ejercicio: Biblioteca
z Una biblioteca tiene copias de libros
libros. Estos últimos se
caracterizan por su nombre, tipo (novela, teatro, poesía,
ensayo), editorial, año y autor.
z Los autores se caracterizan por su nombre, nacionalidad
y fecha de nacimiento.
z Cada copia tiene un identificador
identificador, y puede estar en la
biblioteca, prestada, reservada, con retraso o en
reparación.
z Los lectores pueden tener un máximo de 3 libros en
préstamo.
z Cada libro se ppresta un máximo de 30 días, p por cada día
de retraso, se impone una “multa” de dos días sin
posibilidad de coger un libro.
z Realiza el diagrama de colaboración para el método
devolver()
Solución
1.3 [retraso>0]: multar(retraso)
1: devolver(id,
( , fecha))
prestamos
:Lector 1.1: dev:=remove(id)
:Copia
1.3.1a [multa=0]: multa:=
create(fecha,retraso)
multa:Multa
lt M lt
{new} 1.2: retraso:=getRetraso(fecha)
dev:Copia
multa:Multa
1.3.1b [multa<>0]: anyade(fecha,retraso)
Solución
1.3 [retraso>0]: multar(retraso)
1: devolver(id,
( , fecha))
prestamos
:Lector 1.1: fec:=remove(id)
:Copia
1.3.1a [multa=0]: multa:=
create(fecha,retraso)
multa:Multa
lt M lt fechas
{new} fec:Fecha
1.2: retraso:=getRetraso(fecha)
multa:Multa
1.3.1b [multa<>0]: anyade(fecha,retraso)
76
Diagramas
g de Comunicación
Etiquetas de las flechas.
predecesor
d orden-secuencial
d i l valor-retorno
l t
:= nombre-mensaje lista-argumentos
z Predecesor
{ Lista separada por “,” terminada en “/”
{ El mensaje
j no está
tá habilitado
h bilit d hhasta
t que no ocurran llos
mensajes en la lista
z Orden en la secuencia
{ Lista separada por “.”, terminada en “:”
{ C d té
Cada término
i representa t nivel
i ld de anidamiento
id i t procedural
d l
{ Iteración: *[cláusula interación]
{ Bifurcación: [condición]
77
Diagramas
g de Comunicación
Etiquetas de las flechas.
zEjemplos:
{2: display(x,y)
display(x y)
{1.3.1: p:=find(specs)
{4 [x<0]: invert(x, color)
{A3,B4/ C3.1:update()
{1.1 *[i:=1..n]: lecturer()
78
Diagramas
g de Comunicación
Ejemplo.
redisplay()
:Controller :Window
1:displayPositions(window) 1.1.3.1:add(self)
1.1*[i:=1..n]: drawSegment(i)
contents {new}
wire
<< local >> line
wire:Wire :Line
Li {new}
{ }
<< self >> 1.1.2: create(r0,r1)
i-1 i 1.1.3: display(window)
1 1 1 r0:=
1.1.1a: 0 position()
i i () 1 1 1b r1:=
1.1.1b: 1 position()
i i ()
left:Bead right:Bead
g
79
Diagramas
g de Comunicación
Objetos Activos.
zPoseen
P su propio
i hilo
hil de
d control
t l
zLos
L objetos
bj t activos
ti se representan
t
frecuentemente con componentes internas
80
Diagramas
g de Comunicación
Objetos Activos. Ejemplo.
:FactoryManager
:FactoryScheduler
job
1:start(job)
A2,B2/2:completed(job)
currentJob:TransferJob
<<local>> job :FactoryJobMgr
B2:completed A2:completed
1/B1:start(job) 1/A1:start(job)
:Robot :Oven
81
Diagramas
g de Comunicación
Objetos Activos. Ejemplo.
z Dos dimensiones:
{Tiempo (generalmente vertical); puede ser una escala si
el sistema es de tiempo real
{Diferentes
{Dif t instancias
i t i ((generalmente
l t h
horizontal);
i t l) ell
orden relativo no tiene importancia
zP
Pueden
d existir
i ti trazas
t no incluidas
i l id en los
l d
dos conjuntos
j t
anteriores.
a: lift receiver
b: dial tone
Objetos c: dial
di l digit
di it
...
Focos de d: route
Control
ringing tone phone rings
Mensajes answer phone
ac: ds:
LoginPage: CurrentUser:
Authentication UserData
Servlet UserData
C
Controller
ll S i
Service
validateCredentials(“Dan”, “b4_23”)
restoreUserData(“Dan”)
create(“Dan”,”Administrator”)
currentUser
currentUser
86
Diagramas de Secuencia
Gate (formal),
con nombre
out Unlock
out_Unlock
88
Diagramas de Secuencia
z Copian el contenido de
la interacción referida.
z Substitución de
parámetros y conexión
de las puertas (gates)
formales y actuales.
actuales
89
Diagramas
g de Secuencia
Operadores sobre interacciones.
z Fragmentos combinados,
combinados operadores (i):
{ Alternativa (alt).
z Elección (mediante una guarda) de una interacción.
interacción
{ Aserción (assert).
z La
a secue
secuencia
c a espec
especificada
cada po
por e
el ope
operador
ado es la
aúúnica
ca válida.
á da
{ Opción (opt).
z Equivalente a un operador alt con un solo fragmento.
{ Ruptura (break).
z El operando se ejecuta en lugar del resto de la interacción englobada en el
fragmento “padre”.
padre .
{ Paralelo (par).
z Mezcla de las trazas de los operandos (cualquier entrelazado es válido
mientras preserve el orden de los eventos de cada operando).
operando)
90
Diagramas
g de Secuencia
Operadores sobre interacciones.
{ Secuenciación débil (seq).
(seq)
z Define un conjunto de trazas que cumple:
z 1. Se mantiene el orden de eventos de los operandos
z 2.
2 Eventos de otras líneas de vida de otros operandos pueden venir
en cualquier orden.
z 3. Eventos de la misma línea de vida de otros operandos se ordenan
de tal manera que cualquier evento del primer operando va antes que
el del segundo.
{ Negativa (neg).
z Define trazas inválidas.
92
Diagramas
g de Secuencia
Operadores sobre interacciones. Alternativa.
93
Diagramas
g de Secuencia
Operadores sobre interacciones. Opción.
94
Diagramas
g de Secuencia
Operadores sobre interacciones. Bucle.
95
Diagramas
g de Secuencia
Operadores sobre interacciones. Región Crítica.
96
Diagramas de Secuencia
Ejemplo
Sd Alarm Activation
assert
Activate()
ReadConfiguration()
Configuration Information Returned
seq SelfTest()
ACK
Activate()
SelfTest()
par opt Test()
opt Validate
{t..t+5}
ACK 97
ACK
Diagramas
g de Secuencia
Retorno de Valores
98
Diagramas
g de Secuencia
Tiempo
z Restricciones temporales (duración)
La estructura interna de
ACS
ACSystem tiene
i una
interacción
“AC_UserAccess” que se
invoca en este fragmento.
100
Diagramas
g de Secuencia
Descomposición en partes
101
Diagramas
g de Secuencia Coregión: s[u]
co-región recibe los mensajes
en cualquier orden.
102
Diagramas
g de Secuencia
Invariantes
z Invariantes.
Invariantes
104
Ejercicio
Especificar
f el diagrama de secuencia de la operación
“crearLaberinto”
:JuegoLaberinto
crearLaberinto()
l bL b i t
lab:Laberinto
h1:Habitacion
h2:Habitacion
create(h1,h2)
puerta:Puerta
añadeHabitacion(h1)
añadeHabitacion(h2)
añadePuerta(puerta)
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;
}
:JuegoLaberinto lab:Laberinto
crearLaberinto()
opt [conVentana==true]
v:Ventana
añadeVentana(v)
añadeHabitacion(h)
Ejercicio
+ mover(int actual,
int unidades):
boolean
Solución
par tirar()
n1
tirar()
n2
ca:=casillaActual()
mover(ca,n1+n2)
movRealizado
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.
loop [for i = 1 to 9]
digit(code)
displayDigit
(code) emitTone
(code)
send()
connect(pno)
inUse()
¿Diagrama de colaboración
equivalente?
Solución
Visión de Conjunto de la Interacción
z D
Define
fi las
l interacciones
i t i a ttravés
é dde una
variante de los diagramas de actividad.
115
Tiempo
zMuestran
M t i t
interacciones
i d d
donde es
importante razonar sobre el tiempo.
Diagrama temporal
correspondiente
p
a la interacción
117
Tiempo
118
Tiempo
119
Máquinas de Estados
z “Statecharts”
“St t h t ” [Harel]
[H l]
120
Máquinas de Estados
digit(n)
start Partial Dial
digit(n)
Transiciones
121
Máquinas de Estados
z Un
U ttransición
i ió puede
d ttener:
{ Evento.
z Eventos temporales: tm(n)
{ Acción.
{ pre-condiciones (guardas) y post- condiciones.
z Ejemplo:
j p
Dialing
124
digit(n)
Ejercicio: Biblioteca
z Una biblioteca tiene copias de libros
libros. Estos últimos se
caracterizan por su nombre, tipo (novela, teatro, poesía,
ensayo), editorial, año y autor.
z Los autores se caracterizan por su nombre, nacionalidad
y fecha de nacimiento.
z Cada copia tiene un identificador
identificador, y puede estar en la
biblioteca, prestada, reservada, con retraso o en
reparación.
z Los lectores pueden tener un máximo de 3 libros en
préstamo.
z Cada libro se ppresta un máximo de 30 días, p por cada día
de retraso, se impone una “multa” de dos días sin
posibilidad de coger un libro.
z Realiza el diagrama de estados de la clase “copia”
copia .
Solucion
Con devolver()
Con reservar(id) /
Retraso y
en Retraso usrRes = id
reser ado
reservado
reparacion
reparado() devolver() [getDate()>fp+30] [getDate()>fp+30]
reparar()
en prestar(id,fecha)/ reservar(id) /
prestado reservado
biblioteca fp=fecha usrRes = id
devolver()
prestar(id, fecha) devolver()
[usrRes==id]/
fp=fecha
t (2 days)
tm(2 d ) en
reserva
Solucion: Estados Jerárquicos
Con
Con reservar(id) / Retraso y
en Retraso usrRes = id reser ado
reservado
reparacion
reparado() [getDate()>fp+30] [getDate()>fp+30]
reparar()
en prestar(id,fecha)/ reservar(id) /
prestado reservado
biblioteca fp=fecha usrRes = id
127
Máquinas
q de Estados
Componentes Ortogonales
Incomplete
lab done
Lab1 Lab2
Final pass
Test
fail
128
Failed
Máquinas
q de Estados
Componentes Ortogonales: Utilidad
ack
transmit
Idle Message Sending
arr.
129
Máquinas
q de Estados
Componentes Ortogonales: Utilidad
ack1
Idle
d 1 Mess
ss1 trans1 Send
d1
Idle2 arr1 Idle2 Idle2
arr1
arr2 arr2 tout1 arr2
arr1
arr2 arr2
arr1
Idle1 Mess1 trans1 Send1
Mess2 arr1 Mess2 Mess2
tout1 arr1
ack1 trans2
trans2 tout2
ack2 tout2
ack2 arr1
Idle1 Mess1 z Dos
Send2 Send2
arr1
arr2 procesos 130
Máquinas
q de Estados
Componentes Ortogonales: Utilidad
ack P 1
Proc-1
transmit
Idle Message Sending
arr.
arr
time out arr
P 2
Proc-2
ack
transmit
Idle Message Sending
arr.
arr
time out arr 131
Máquinas
q de Estados
Componentes Ortogonales: Utilidad
P 1
Proc-1
ack/ channel = free
arr
transmit
Wait [channel
Idle Message Sending
arr channel ==free ] /
channel = busy
arr
time out / channel = free
P 2
Proc-2
ack/ channel = free
arr
transmit
Wait [channel
Idle Message Sending
arr channel ==free ] /
channel = busy
arr
time out / channel = free 132
Máquinas de Estados
Pseudo
P d - estados:
t d
z Fork / Join.
z Initial.
z Deep History / Shallow History. H* H
z Junction.
z Choice.
z Entry / Exit point.
z Terminate.
A1 A2
Setup Cleanup
B1 B2
133
Fork Join
Máquinas
q de Estados
Estado Histórico
B
H
t4
B1 B2
I
t1: ev0 B12
t2
B21 t3
B11
t3: ev1
t4: ev2
134
Máquinas
q de Estados
Estado Histórico (ii)
B
H
H*
t4
B1 B2
I
t1: ev0 B12
t2
B21 t3
B11
t3: ev1
t4: ev2
135
Máquinas
q de Estados
Estado Histórico. Ejercicio.
136
Máquinas
q de Estados
Estado Histórico. Ejercicio. Solución
On
power H
Radio Tape
mode
M d l ell mismo
Modelar i sistema
i t sin
i usar estado
t d histórico.
hi tó i
137
Máquinas
q de Estados
Estado Histórico. Ejercicio. Solución (ii)
Standby On
power
lastCD CD mode
power
mode
power
lastRadio
power
Radio Tape
mode
lastTape power
power
138
Máquinas de Estados
Pseudo - estados: Junction.
139
Máquinas de Estados
Puntos de Entrada/Salida, Estados Sub-Máquina
140
Ejemplo. Reproductor CDs.
ReproductorCD
p
I
InterfazUsuario
f U i Li C i
ListaCanciones
- Tpausa: Tiempo 1 disco
... ...
- NumActual: Entero 1
... + obtenerCancion(Orden: Entero):
+ stop()
t () Cancion
+ pause() + numCanciones(): Entero
+ play() 1 ....
+ eject()
j ()
+ apagar()
+ finCancion()
- buscaDisco(d: InfoDisco): pista 0..*
1
ListaCanciones Cancion
player 1 actual
- titulo: Cadena
driver 1 - duracion: Tiempo
p
ControladorCD - Artista: Cadena
- Orden: Entero
...
...
+ play(act:
l ( t Cancion,
C i desde: d d Tiempo)
Ti )
+ stop() : Tiempo
+ detectarDisco() : InfoDisco
+ detectarAbierto()
() : Logico
g
+ abrir()
+ cerrar() 141
+ apagar()
Diagrama de estados para la clase
ReproductorCD
p
[(info=driver.detectarDisco())!=NULL]/
[not driver. disco=buscaDisco(info)
detectarAbierto()] NumActual = 1; [else]/ driver.stop();
actual = disco.obtenerCancion(ordenActual)
( ) NumActual=1;;
actual= disco.obtenerCancion(NumActual)
[drriver.detectarrAbierto()]
Cerrado
endOfSong()/
NumActual+=1
driver.cerrarr ()
Play()/
driver.abrir (()
[NumActual<=
pausa)
eject
disco.numCanciones()]/
p()
Tpausa = driver.stop
driver.pllay(actual, Tp
d
e
actual=
t l
eject ()/
Abierto disco.obtenerCancion
driver.stop(); stop()/
(NumActual)
driver.abrir() driver.stop();
driver.play(actual,0)
NumActual=11
NumActual
Pause())/
actual=
Play()/
disco.obtenerCancion(NumActual)
Pause
apagar ()/
driver.stop();
142
driver.apagar()
Máquinas de Estados de Protocolo
z Asociadas a un clasificador,, interface o p
puerto.
z Má
Máquinas
i d estado
de t d declarativas:
d l ti E
Especifican
ifi l
las
transiciones legales (no su condición) para cada
operación. “Contrato” para el usuario del clasificador.
144
Máquinas
q de Estados
Generalización
z Una máquina de estados es generalizable
generalizable.
145
Máquinas
q de Estados
Generalización: Ejemplo, cajero autómatico.
146
Máquinas
q de Estados
Generalización: Ejemplo, cajero autómatico.
Extensión:
E ió posibilidad
ibilid d de
d
teclear el importe a
retirar, y de que este se
pueda rechazar.
147
Ejercicio
z M
Modelar
d l ell comportamiento
t i t reactivo ti de
d un reloj
l j de
d pulsera.
l
z El valor del tiempo se debe actualizar cada segundo, incluso cuando no se
muestra (p.ej. crono encendido).
z El botón de la parte superior derecha enciende la luz, luz que se mantiene
encendida tanto como el botón está apretado, una vez que se suelta, la luz
está encendida durante 2 segundos más y se apaga.
z El botón superior izquierdo alterna entre el modo de crono y de reloj. El
sistema empieza en el modo reloj,
reloj en el que se muestra la hora en formato
HH:MM:SS.
z En el modo crono, el tiempo discurrido se muestra en formato MM:SS:CC
((CC son centésimas de segundo). g ) Inicialmente el crono empieza
p en
00:00:00. El botón inferior derecho se usa para activar el crono. Éste
É se
actualiza en incrementos de 1/100 segundos. Presionando el botón inferior
derecho pausa o continua el crono (si el reloj está en modo crono).
Pulsando el botón inferior izquierdo
q resetea el crono a 00:00:00 si el relojj
está en modo crono y el crono ha sido pausado antes. El crono continua
corriendo (si está corriendo) o mantiene su valor (si está en pausa) incluso
cuando el reloj está en un modo de display distinto (por ejemplo, cuando se
muestra la hora).
148
Ejercicio
z Interface provisto por el controlador:
{ getTime() : Devuelve la hora actual.
{ refreshTimeDisplay() : Repinta la hora en el visor con la hora interna actual. El
visor no necesita limpiarse antes de llamar a esta función. Por ejemplo, si se está
visualizando el crono, se borrará antes de pintar la hora.
{ refreshChronoDisplay() : ver refreshTimeDisplay().
{ resetChrono() : Resetea el crono interno a 00:00:00.
{ increaseTime() : Incrementa la hora en un segundo. Los minutos y horas se
modificarán adecuademente, (por ejemplo, si se llama a increaseTime () a las
11:59:59, la nueva hora será 12:00:00).
{ increaseChrono () : Incrementa el crono en 1/100 segundos.
{ setLight() : Enciende la luz del visor.
{ unsetLight() : Apaga la luz del visor.
visor
z Eventos de botones recibidos:
{ topRightPressed.
{ topRightReleased.
p g
{ topLeftPressed.
{ topLeftReleased.
{ bottomRightPressed.
{ bottomRightReleased
bottomRightReleased.
{ bottomLeftPressed. 149
{ bottomRightReleased.
Posible Solución.
Solución
150
Máquinas de Estados
Ejemplo. Herramienta de Dibujo (i)
/setup widgets
setup
t bibindings
di
Active
wmQuit
exitButton
151
Máquinas
q de Estados
Ejemplo. Herramienta de Dibujo (ii)
Shapes Canvas
Modes
152
Máquinas
q de Estados
Ejemplo. Herramienta de Dibujo (iii)
Shapes
shapeSelected(Triangle)
shapeSelected(Rectangle) shapeSelected(Circle)
Triangle
shapeSelected(Triangle)
p ( g )
shapeSelected(Circle)
h S l t d(Ci l )
Rectangle Circle
shapeSelected(Rectangle)
153
Máquinas
q de Estados
Ejemplo. Herramienta de Dibujo (iv)
Modes
modeSelect(Insert)/
Canvas.Insert
modeSelect(Delete)/
Canvas.Delete
Insert
modeSelect(Move)/
Canvas.Move
modeSelect(Insert)/
Canvas.Insert
modeSelect(Delete)/
( )/
Canvas.Delete
Move Delete
modeSelect(Move)/
C
Canvas.Move
M
154
Máquinas de Estados
Ejemplo Herramienta de Dibujo (v)
Ejemplo.
Canvas
[Shapes in Circle]/
Inserting
g
d
drawCircle(x,y)
Ci l ( )
[Shapes in Rectangle]/
Idle drawRectangle(x,y)
[Shapes in Triangle]/
onDrawingMouse1Press(x,y) drawTriangle(x,y)
C
delete insert
move insert
Deleting
Moving
Idle
onDrawingMouse1Press(x,y)/
movingObject=find_closest(x,y)
i Obj t fi d l t( ) onDrawingMouse1Click(x,y)/
D i M 1Cli k( )/
find_closest(x,y).del()
onDrawingMouse1Release(x,y)
Idle Moving
move
onDrawingMouse1Motion(x,y)/
oldCoords=coords(movingObject)
delete 155
move(movingObject, distance(oldCoords, (x,y)))
Diagramas de Actividad
z Refinamiento de los diagramas de estados.
estados
Drink
[no cola]
157
Diagramas de Actividad
Swimlanes
158
Diagramas de Actividad
Pesos en los enlaces
159
Diagramas de Actividad
Parámetros y Eventos Temporales
Parámetros/Pins/Excepciones
E
Eventos
t Temporales
T l
160
Diagramas de Actividad
Excepciones/Pins
161
Diagramas de Actividad
Regiones de
Expansión
z Regiones de expansión,
procesamiento paralelo
(también iterative y
streaming).
t i )
162
Diagramas de Actividad
Regiones Interrumpibles
163
Diagramas de Actividad
Particiones
164
Diagramas de Actividad
Flujos de Objetos: Objectflows
165
Indice
z Útil p
para obtener modelos p
precisos ((no anotaciones en
lenguaje natural).
z Restricción OCL:
Context Flight
168
Inv: passengers->size() <= plane.numberOfSeats
Ejemplos
Casa Persona
0 *
0.. 1 numSegSoc:
S S Id
Identificador
ifi d
valor: Dinero
casas propietario sueldo: Dinero
Reglas adicionales:
1. Una persona puede tener una hipoteca sobre una casa sólo si es el
propietario.
2.
2 La fecha de inicio de cada hipoteca ha de ser menor que la de final
final.
3. El número de la seguridad social de cada persona ha de ser único.
4. Sólo es posible contratar una nueva hipoteca si el salario de la persona
es suficiente.
5. Sólo es posible contratar una nueva hipoteca si el valor de la casa aval
es suficiente. 169
Ejemplos Las restricciones OCL se escriben
en el contexto de una instancia de
un tipo específico.
Context
C t t Hipoteca
Hi t
Inv: aval.propietario = contratante
Context Hipoteca
Inv: fechaInicio < fechaFin self hace referencia a la instancia
del contexto.
Context Persona
Inv: Persona::allInstances()->isUnique(numSegSoc)
170
Ejemplos
“Los PCs pueden conectarse con un único Hub, los servidores con uno o varios”
Context PC
Inv: cable_equipo->size() = 1
Context Servidor
Inv: cable_equipo->size() >= 1 171
Ejercicio
“Un Hub no puede conectarse consigo mismo a través de
un puerto”
Context Cable_Hubs
Inv: Puerto_Hub.hub->asSet()->size() = 2
172
¿Dónde usar OCL?
z Clases:
{ Invariantes. Expresión OCL de tipo booleano, la expresión debe
ser true para cada instancia de la clase en todo momento de la
ejecución.
ejecución
z Operaciones:
{ Pre-condición. Condición que debe ser verdadera para ejecutar
l operación
la ió en una d
determinada
t i d iinstancia.
t i
{ Post-condición. Condición que debe ser verdadera al terminar
una operación.
{ Body.
B d Especificación
E ifi ió del
d l cuerpo d
de una operación
ió dde ti
tipo query.
z Atributos y finales de asociación:
{ Valor inicial. expresión
p p
para dar el valor inicial a un atributo o
final de asociación. Se evalua al crear la instancia.
{ Valor derivado.
z Transiciones de máquinas de estados:
{ Guarda.
Ejemplos
parents
0..*
children 0..*
174
Ejemplos
z Especificación
E ifi ió ddell valor
l iinicial
i i lyd
derivado
i d d de atributos/association
t ib t / i ti ends:
d
context Person::income : Integer
init: parents.income->sum() * 1% -- pocket allowance
d i d if self.age
derived:if lf < 18
then parents.income->sum() * 1% -- pocket allowance
else job.salary -- income from regular job
endif
z Subexpresiones (let):
context Person inv:
let income : Integer = self.job.salary->sum() in
if isUnemployed then
income < 100
else
income >= 100
endif
175
Ejemplos Colecciones.
Ejemplos. Colecciones
context
t t Company
C i
inv:
self.employee->select(age < 25)->notEmpty()
context Company
inv: self.employee->forAll( isUnemployed = False )
inv: self.employee->forAll( p | p.isUnemployed = False )
i
inv: self.employee->forAll(
lf l >f All( p : PPerson | p.isUnemployed
i U l d=FFalse
l )
177
Ejemplos Colecciones.
Ejemplos. Colecciones
exists(expr): devuelve true si al menos hay un elemento en la
colección para el que expr es verdadera.
verdadera
coleccion->exists( expresion-logica )
coleccion->exists( v | expresion-logica-con-v )
coleccion->exists( v : Type | expresion-logica-con-v )
context Company
inv: self.employee->exists( age > 50 )
inv: self.employee->exists( p | p.age > 50 )
inv: self.employee->exists( p : Person | p.age > 50 )
181
Herramientas II
Herramientas,
z Soporte a la navegación
{Vistas compuestas
{Elaboración de conexiones entre información
relacionada
{Bú
{Búsquedad
{Visión con diferentes niveles de granularidad
(expansión y contracción de partes de la vista)
{Filtros
{Operaciones sobre componentes de la vista
182
Herramientas III
Herramientas,
z Soporte al trabajo multiusuario
{ Bloqueo de información
{ Trabajo
j colaborativo
z Generación de código
{ Esqueletos con información estática (clases)
{ Generación a partir de diagramas de comportamiento
(máquinas de estados).
{ Integración con lenguajes especiales (SQL, …)
{ Desarrollo Dirigido por Modelos (MDA
(MDA,
http://www.omg.org/mda/)
z Ingeniería inversa
{ Construcción de un modelo de diseño a partir de código
{ Diseño iterativo: incorporación al modelo de detalles
implementados
183
Herramientas IV
Herramientas,
184
Herramientas V
Herramientas,
185
Poseidon for UML
Indice
Comprar un
cuadro
Vendedor
Vender un
cuadro
Agente
Galería
Producir Informe
C
Comprador
d
Actualizar
Coeficiente de
moda
188
Diagrama Comprar
p una
Obra maestra
refinado
Comprar una
O
Obra representativa
Vendedor
Comprar una
Obra representativa
Vender un
cuadro
Producir Informe
tendencias
Actualizar
189
Coeficiente de moda
Caso de uso: comprar una obra maestra
Actores primarios:
p
Agente Galería, vendedor
Interesados y Objetivos:
• Agente: quiere obtener una recomendación lo más acertada posible del
precio máximo recomendado de manera rápida.
• Vendedor: quiere vender el cuadro a un precio razonable de manera rápida.
Precondiciones:
El agente ha entrado en la aplicación.
Garantía de éxito (post-condiciones):
Se registra la venta.
E
Escenarioi Principal
P i i l ded Éxito:
É it
1. El agente introduce la descripción del cuadro.
2. El sistema busca el cuadro más parecido del mismo autor.
3 El sistema presenta el precio recomendado
3. recomendado.
4. El agente hace una propuesta por debajo del precio recomendado, y el
vendedor acepta la oferta.
5 El agente introduce información de la venta
5. venta.
Extensiones:
2a. No hay ningún cuadro parecido del mismo autor, así que el sistema
no presenta una recomendación
recomendación.
4a. El vendedor no acepta la oferta y la venta no se produce. 190
Diagrama de clases inicial Cuadro
nombreDelArtista
apellidosDelArtista
Sistema
Si t G
Gestion
ti Titulo
Galeria AñoCreacion
Alto
Ancho
Tecnica
Tema
Obra maestra
192
: GUI : Calcular Precio
Vendedor Agente : Cuadro
Obra Maestra
Galería Subastado
1: proporcionar
datos obra 2: transferir detalles
maestra : Obra maestra
3: crear objeto
nuevo
Datos
4: devolver objeto
proporcionados nuevo
por el vendedor 5: buscar cuadros
subastados
6: devolver cuadro
7: proporcionar
8: mostrar subastado
precio
precio
9: proporcionar
detalles del 10: transferir detalles
vendedor 11: solicitar
vendedor
actualización
193
Un ejemplo completo para
todos los diagramas
194
195
196
197
0
1
11
1.1
2
2.1
3
3.1 3.1.1
3.2
3.2.1
198
199
200
201
202
203
Indice
OCL
{ Warmer,
Warmer Kleppe.
Kleppe “The Object Constraint Language 2nd Edition
Edition. Getting your
Models Ready for MDA”. Addison-Wesley. 2003. 205
z D
David
id Harel
H l and d Eran
E G
Gery. E
Executable
bl object
bj
modeling with statecharts. IEEE Computer, pages 31-42,
1997.
206