Está en la página 1de 36

Ejercicios UML

Juan de Lara
G
Grupo
46
Curso 2008/09

Indice

Diagramas de clases y
OCL.
OCL
Diagramas de Transicin de Estados
Diagramas de Interaccin.

Ejercicio
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.
L empleados
Los
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.
L aplicacin
La
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
Una biblioteca tiene copias de libros
libros. Estos ltimos se
caracterizan por su nombre, tipo (novela, teatro, poesa,
ensayo), editorial, ao y autor.
Los autores se caracterizan por su nombre, nacionalidad
y fecha de nacimiento.
Cada copia tiene un identificador
identificador, y puede estar en la
biblioteca, prestada, con retraso o en reparacin.
Los lectores pueden tener un mximo de 3 libros en
prstamo.
prstamo
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.
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
Especificar un diagrama de clases que describa redes
de ordenadores.
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,


Hub los
servidores con uno o varios.
Los Servidores y PCs pueden generar mensajes, con
una cierta longitud.
Los Hubs tienen un nmero de puertos, algunos de los
cuales puede usarse para conectar con otros Hubs.
Hubs
Tienen cierta probabilidad de perder mensajes.
Las impresoras pueden averiarse, con cierta
probabilidad, durante cierto tiempo.
7

Ejercicio Posible Solucin.


Ejercicio.
Solucin

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

Un Hub no puede conectarse consigo mismo a travs de un puerto


Context
Conte
t Cable_Hubs
C bl H b
Inv: Puerto_Hub.hub->asSet()->size() = 2

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
Diagramas de clases

Diagramas de Transicin de
Estados
Diagramas de Interaccin.

13

Ejercicio: Biblioteca
Una biblioteca tiene copias de libros
libros. Estos ltimos se
caracterizan por su nombre, tipo (novela, teatro, poesa,
ensayo), editorial, ao y autor.
Los autores se caracterizan por su nombre, nacionalidad
y fecha de nacimiento.
Cada copia tiene un identificador
identificador, y puede estar en la
biblioteca, prestada, reservada, con retraso o en
reparacin.
Los lectores pueden tener un mximo de 3 libros en
prstamo.
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.
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 d
tm(2
days))

reservado
devolver()
en
reserva

Solucion: Estados Jerrquicos

en
reparacion
reparado()

reservar(id) /
usrRes = id

Con
Retraso

reparar()

[getDate()>fp+30]

prestar(id,fecha)/
en
prestado
biblioteca fp=fecha
devolver()
t (2 d
tm(2
days))

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.

Modelar el comportamiento de una


puede estar
cadena de msica. Esta p
encendida (ON) o apagada (Standby). La
cadena tiene reproductor de CD
CD, Radio y
Cinta. Se cambia de uno a otro con el
botn mode
mode . Cuando se enciende la
cadena se recuerda el ltimo estado en el
que estuvo.
17

Mquinas
q
de Estados

Estado Histrico. Ejercicio. Solucin

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

Estado Histrico. Ejercicio. Solucin (ii)

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
Modelar
M
d l ell comportamiento
t i t reactivo
ti de
d un reloj
l j de
d pulsera.
l
El valor del tiempo se debe actualizar cada segundo, incluso cuando no se
muestra (p.ej. crono encendido).
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.
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.
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
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

Eventos de botones recibidos:


topRightPressed.
topRightReleased.
p g
topLeftPressed.
topLeftReleased.
bottomRightPressed.
bottomRightReleased
bottomRightReleased.
bottomLeftPressed.
bottomRightReleased.

23

Posible Solucin.
Solucin

24

Indice
Diagramas de clases
Diagramas de Transicin de Estados

Diagramas
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)
aadeHabitacion(h1)
aadeHabitacion(h2)
aadePuerta(puerta)

puerta: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

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.
El usuario pulsa los dgitos del nmero de telfono
Para cada dgito
g
la pantalla se actualiza para aadir el dgito marcado
se emite un tono por el receptor

El usuario pulsa el botn Enviar


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

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
Una biblioteca tiene copias de libros
libros. Estos ltimos se
caracterizan por su nombre, tipo (novela, teatro, poesa,
ensayo), editorial, ao y autor.
Los autores se caracterizan por su nombre, nacionalidad
y fecha de nacimiento.
Cada copia tiene un identificador
identificador, y puede estar en la
biblioteca, prestada, reservada, con retraso o en
reparacin.
Los lectores pueden tener un mximo de 3 libros en
prstamo.
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.
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

1.3.1a [multa=0]: multa:=


create(fecha,retraso)

multa:Multa
lt M lt
{new}
multa:Multa

1.2: retraso:=getRetraso(fecha)

1.3.1b [multa<>0]: anyade(fecha,retraso)

dev:Copia