Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ejercicios UML
Ejercicios UML
Juan de Lara
G
Grupo
46
Curso 2008/09
Indice
zDiagramas de clases y
OCL.
OCL
zDiagramas de Transicin de Estados
zDiagramas de Interaccin.
Ejercicio
z Representa mediante un diagrama de clases la siguiente
especificacin:
{ Una aplicacin necesita almacenar informacin 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 categora, as como un conjunto de
empleados
p
subordinados.
{ De los clientes adems se necesita conocer su telfono de
contacto.
{ La
L aplicacin
li
i necesita
it mostrar
t
l
los
d t
datos
d empleados
de
l d
y
clientes.
3
Ejercicio
Persona
- nombre
- edad
+ mostrar()
Cliente
Empleado
subordinados
0..*
- sueldo_bruto
- telefono_de_contacto
nombre_empresa
+ mostrar
t
()
+ calcular_salario_neto()
1..*
empleados
+mostrar()
0..* clientes
1..*
Directivo
0..*
- categoria
+ mostrar ()
Empresa
- nombre
b
4
Ejercicio: Biblioteca
z Una biblioteca tiene copias de libros
libros. Estos ltimos se
caracterizan por su nombre, tipo (novela, teatro, poesa,
ensayo), editorial, ao 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, con retraso o en reparacin.
z Los lectores pueden tener un mximo de 3 libros en
prstamo.
prstamo
z Cada libro se presta un mximo de 30 das, por cada da
de retraso, se impone
p
una multa de dos das sin
posibilidad de coger un nuevo libro.
z Realiza un diagrama de clases y aade los mtodos
necesarios para realizar el prestamo y devolucin de
libros.
Libro
Copia
- id : Identifier
ejemplar
- estado: estadoCopia 1..*
0..3 prestamos
- titulo : string
libro - tipo: tipoLibro
1 - editorial: string
- anyo: int
i t
1..* obras
Prestamo
- inicio: Date
- fin: Date
1 autor
Autor
0..1 lector
Lector
- nSocio : Identifier
- nombre: string
- telefono: string
- direccion: string
+ devolver(id: Identifier, fechaAct: Date) 1
{precondition: prestamos.notEmpty()}
+ prestar(id: Identifier, fechaAct: Date)
{precondition: multa==0}
- multar(dias : int)
- nombre:
b string
ti
- nacionalidad: string
- fechaNacimiento: Date
<<enumeration>>
tipoLibro
novela
teatro
poesia
i
ensayo
multa 0..1
Multa
- fInicio: Date
- fFin: Date
<<enumeration>>
estadoCopia
prestado
retraso
biblioteca
reparacion
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.
Los PCs pueden conectarse con un nico Hub, los servidores con uno o varios
8
Podemos modelarlo como una restriccin OCL, o bien aadir asociaciones desde
Servidor y PC
OCL
Los PCs pueden conectarse con un nico Hub, los servidores con uno o varios
Context PC
Inv: cable_equipo->size()
cable equipo >size() = 1
Context Servidor
Inv: cable_equipo->size()
q p
>= 1
Ejercicio
Examen Junio 2008.
Realiza el diseo de una aplicacin para la gestin de pedidos. La aplicacin deber
manejar clientes (se guarda su nombre, direccin, telfono y e-mail), que pueden
realizar p
pedidos de p
productos,, de los cuales se anota la cantidad en stock. Un
cliente puede tener una o varias cuentas para el pago de los pedidos. Cada
cuenta est asociada a una tarjeta de crdito, y tiene una cierta cantidad
disponible de dinero, que el cliente debe aumentar peridicamente para poder
realizar nuevos pedidos.
Un cliente puede empezar a realizar un pedido slo si tiene alguna cuenta con dinero
disponible. Al realizar un pedido, un cliente puede agruparlos en pedidos simples
o compuestos. Los pedidos simples estn asociados a una sola cuenta de pago y
(por restricciones en la distribucin) contienen un mximo de 20 unidades del
mismo o distinto tipo de producto. A su vez, un pedido compuesto contiene dos o
ms pedidos, que pueden ser simples o compuestos. Como es de esperar, el
sistema debe garantizar que todos los pedidos simples que componen un pedido
compuesto se paguen con cuentas del mismo cliente.
cliente Adems,
Adems slo es posible
realizar peticiones de productos en stock.
Existe una clase (de la cual debe haber una nica instancia en la aplicacin)
responsable
p
del cobro, orden de distribucin y confirmacin de los p
pedidos. El
cobro de los pedidos se hace una vez al da, y el proceso consiste en comprobar
todos los pedidos pendientes de cobro, y cobrarlos de la cuenta de pago
correspondiente. Si una cuenta no tiene suficiente dinero, el pedido se rechaza (si
es p
parte de un p
pedido compuesto,
p
, se rechaza el p
pedido entero).
) Una vez q
que el
pedido est listo para servirse, se ordena su distribucin, y una vez entregado,
10
pasa a estar confirmado.
Se pide un diagrama de clases de diseo. Aade las restricciones OCL necesarias.
Solucin
11
Restricciones OCL:
Context Cliente::realizar_pedido:
Cliente::realizar pedido:
pre: self.cuentas->exists(c | c.disponible > 0)
Context Pedido Compuesto:
in
inv:
self pedidos simples >c enta >cliente >asSet() >si e() = 1
self.pedidos_simples->cuenta->cliente->asSet()->size()
Context Pedido:
inv: self.t_productos.num->sum() <= 20
Context Pedido::aadirProducto(p: Producto, num: int):
pre: p.stock>=num
Context Cliente::rechazar_pedido (p:Pedido):
pre: self.cuentas.disponible->sum()<p.total
12
Indice
zDiagramas de clases
zDiagramas de Transicin de
Estados
zDiagramas de Interaccin.
13
Ejercicio: Biblioteca
z Una biblioteca tiene copias de libros
libros. Estos ltimos se
caracterizan por su nombre, tipo (novela, teatro, poesa,
ensayo), editorial, ao 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
reparacin.
z Los lectores pueden tener un mximo de 3 libros en
prstamo.
z Cada libro se p
presta un mximo de 30 das, p
por cada da
de retraso, se impone una multa de dos das sin
posibilidad de coger un libro.
z Realiza el diagrama de estados de la clase copia
copia .
Solucion
en
reparacion
reparado()
reparar()
Con
Retraso
reservar(id) /
usrRes = id
devolver() [getDate()>fp+30]
Con
Retraso y
reser ado
reservado
devolver()
[getDate()>fp+30]
prestar(id,fecha)/
reservar(id) /
en
prestado
usrRes = id
biblioteca fp=fecha
devolver()
prestar(id, fecha)
[usrRes==id]/
fp=fecha
t (2 days)
tm(2
d
)
reservado
devolver()
en
reserva
en
reparacion
reparado()
reservar(id) /
usrRes = id
Con
Retraso
reparar()
[getDate()>fp+30]
prestar(id,fecha)/
en
prestado
biblioteca fp=fecha
devolver()
t (2 days)
tm(2
d
)
Con
Retraso y
reser ado
reservado
[getDate()>fp+30]
reservar(id) /
usrRes = id
prestar(id, fecha)
[usrRes==id]/
fp=fecha
reservado
devolver()
en
reserva
16
Mquinas
q
de Estados
Estado Histrico. Ejercicio.
Mquinas
q
de Estados
On
Standby
power
power
mode
CD
mode
H
Radio
mode
Tape
M d l ell mismo
Modelar
i
sistema
i t
sin
i usar estado
t d histrico.
hi t i
18
Mquinas
q
de Estados
Standby
lastCD
lastRadio
power
power
power
lastTape
On
power
power
CD
mode
mode
Radio
mode
Tape
power
19
Ejercicio
Examen Junio 2008.
Realiza el diseo de una aplicacin para la gestin de pedidos. La aplicacin deber
manejar clientes (se guarda su nombre, direccin, telfono y e-mail), que pueden
realizar p
pedidos de p
productos,, de los cuales se anota la cantidad en stock. Un
cliente puede tener una o varias cuentas para el pago de los pedidos. Cada
cuenta est asociada a una tarjeta de crdito, y tiene una cierta cantidad
disponible de dinero, que el cliente debe aumentar peridicamente para poder
realizar nuevos pedidos.
Un cliente puede empezar a realizar un pedido slo si tiene alguna cuenta con dinero
disponible. Al realizar un pedido, un cliente puede agruparlos en pedidos simples
o compuestos. Los pedidos simples estn asociados a una sola cuenta de pago y
(por restricciones en la distribucin) contienen un mximo de 20 unidades del
mismo o distinto tipo de producto. A su vez, un pedido compuesto contiene dos o
ms pedidos, que pueden ser simples o compuestos. Como es de esperar, el
sistema debe garantizar que todos los pedidos simples que componen un pedido
compuesto se paguen con cuentas del mismo cliente.
cliente Adems,
Adems slo es posible
realizar peticiones de productos en stock.
Existe una clase (de la cual debe haber una nica instancia en la aplicacin)
responsable
p
del cobro, orden de distribucin y confirmacin de los p
pedidos. El
cobro de los pedidos se hace una vez al da, y el proceso consiste en comprobar
todos los pedidos pendientes de cobro, y cobrarlos de la cuenta de pago
correspondiente. Si una cuenta no tiene suficiente dinero, el pedido se rechaza (si
es p
parte de un p
pedido compuesto,
p
, se rechaza el p
pedido entero).
) Una vez q
que el
pedido est listo para servirse, se ordena su distribucin, y una vez entregado,
20
pasa a estar confirmado.
Se pide un diagrama de transicin de estados para la clase Pedido
Solucin
21
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 botn de la parte superior derecha enciende la luz,
luz que se mantiene
encendida tanto como el botn est apretado, una vez que se suelta, la luz
est encendida durante 2 segundos ms y se apaga.
z El botn 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 centsimas de segundo).
g
) Inicialmente el crono empieza
p
en
00:00:00. El botn inferior derecho se usa para activar el crono. ste
se
actualiza en incrementos de 1/100 segundos. Presionando el botn inferior
derecho pausa o continua el crono (si el reloj est en modo crono).
Pulsando el botn 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).
22
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 funcin. 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
modificarn 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
topRightPressed.
topRightReleased.
p g
topLeftPressed.
topLeftReleased.
bottomRightPressed.
bottomRightReleased
bottomRightReleased.
bottomLeftPressed.
bottomRightReleased.
23
Posible Solucin.
Solucin
24
Indice
zDiagramas de clases
zDiagramas de Transicin de Estados
zDiagramas
g
de Interaccin.
25
Ejercicio
Especificar
f
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;
}
}
Solucin
:JuegoLaberinto
crearLaberinto()
l bL b i t
lab:Laberinto
h1:Habitacion
h2:Habitacion
create(h1,h2)
puerta:Puerta
aadeHabitacion(h1)
aadeHabitacion(h2)
aadePuerta(puerta)
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);
}
}
Solucin
:JuegoLaberinto
lab:Laberinto
crearLaberinto()
loop
[for i = 1 to 10]
h:Habitacion
opt
[conVentana==true]
v:Ventana
aadeVentana(v)
aadeHabitacion(h)
Ejercicio
Especificar el diagrama de secuencia de la operacin
realizarJugada definida en la clase Jugador, para el juego del
parchs
Jugador
- casillaActual:
ill A t l iintt
+ realizarJugada(): void
+ casillaActual(): int
Dado
+ tirar(): int
*
1
Tablero
+ mover(int actual,
int unidades):
boolean
Solucin
d1:Dado
:Jugador
d2:Dado
:Tablero
realizarJugada()
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 realizacin de una llamada desde un telfono mvil.
z El usuario pulsa los dgitos del nmero de telfono
z Para cada dgito
g
{ la pantalla se actualiza para aadir el dgito marcado
{ se emite un tono por el receptor
z
z
z
z
z
Solucin
:Button
loop
:Dialer
:Display
:Speaker
send:Button
:CellularRadio
[for i = 1 to 9]
digit(code)
displayDigit
(code)
emitTone
(code)
send()
connect(pno)
inUse()
Diagrama de colaboracin
equivalente?
Solucin
Ejercicio: Biblioteca
z Una biblioteca tiene copias de libros
libros. Estos ltimos se
caracterizan por su nombre, tipo (novela, teatro, poesa,
ensayo), editorial, ao 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
reparacin.
z Los lectores pueden tener un mximo de 3 libros en
prstamo.
z Cada libro se p
presta un mximo de 30 das, p
por cada da
de retraso, se impone una multa de dos das sin
posibilidad de coger un libro.
z Realiza el diagrama de colaboracin para el mtodo
devolver()
Solucion
1.3 [retraso>0]: multar(retraso)
1: devolver(id,
( , fecha))
:Lector
prestamos
1.1: dev:=remove(id)
:Copia
multa:Multa
lt M lt
{new}
multa:Multa
1.2: retraso:=getRetraso(fecha)
dev:Copia