Ejercicios UML
Juan de Lara
G46G
rupo
46
Curso 2008/09
1
Indice Indice zDiagramas de clases y
OCLOCL
.
z
DiagramasdeTransicióndeEstados
z
Diagramas
de
Transición
de
Estados
zDiagramas de Interacción.
2
Ejercicio Ejercicio z
Representa
mediante
un
diagrama
de
clases
la
siguiente
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.
{
L
ld
ti
ld
bt
l
ld
{
L
os emp
lea
d
os
ti
enen un sue
ld
o
b
ru
t
o,
los emp
lea
d
os que
son directivos tienen una categoría, así como un conjunto de
em
p
leados subordinados.
p
{De los clientes además se necesita conocer su teléfono de
contacto.
{
L
li ió
it
t
l
dt
d
ld
{
L
aap
li
cac
ió
n neces
it
amos
t
ra
r
los
d
a
t
os
d
eemp
lea
d
os y
clientes.
3
Ejercicio Ejercicio
Persona Persona
+ mostrar() -nombre
-edad
+ mostrar() -nombre -edad
t()
- sueldo_bruto
- nombre_empresa - telefono_de_contacto
Empleado
Cliente
subordinados
t()
- sueldo_bruto
- telefono_de_contacto
Empleado
Cliente
subordinados
0..*
+mostrar()
+ mos
t
rar
()
+ calcular_salario_neto()
empleados
clientes
+mostrar()
+ mos
t
rar
()
+ calcular_salario_neto()
1..*
0..*
-categoria
Directivo
Empresa
b
empleados
-categoria
Directivo
Empresa
b
1
1..*
0..*
4
+ mostrar ()
-nom
b
re
+ mostrar ()
-nom
b
re
Ejercicio:Biblioteca Ejercicio:
Biblioteca
z
Unabibliotecatienecopiasdelibros Estosúltimosse
z
Una
biblioteca
tiene
copias
de
libros
.
Estos
últimos
se
caracterizan por su nombre, tipo (novela, teatro, poesía,
ensayo), editorial, año y autor.
zLos autores se caracterizan por su nombre, nacionalidad
y fecha de nacimiento.
z
Cadacopiatieneunidentificador ypuedeestarenla
z
Cada
copia
tiene
un
identificador
,
y
puede
estar
en
la
biblioteca, prestada, con retraso o en reparación.
zLos lectores pueden tener un máximo de 3 libros en
préstamo préstamo
.
zCada libro se presta un máximo de 30 días, por cada día
de retraso, se im
p
one una “multa” de dos días sin
p
posibilidad de coger un nuevo libro.
zRealiza un diagrama de clases y añade los métodos
necesariospararealizarelprestamoydevoluciónde necesarios
para
realizar
el
prestamo
y
devolución
de
libros.
Libro
Copia
- id : Identifier
- estado: estadoCopia
Libro
- titulo : string - tipo: tipoLibro - editorial: string
it
libro
1 1..*
ejemplar
Prestamo
0..3prestamos
- anyo:
in
t
obras 1..*
- inicio: Date
- fin: Date
0..1 lector
Autor
bti
autor 1
Lector
- nSocio : Identifier
- nombre: string
- nom
b
re: s
t
r
ing
- nacionalidad: string
- fechaNacimiento: Date
- telefono: string - direccion: string
<<enumeration>>
tipoLibro
novela
teatro
i
+ devolver(id: Identifier, fechaAct: Date) {precondition: prestamos.notEmpty()}
1
<<enumeration>>
estadoCopia
poes
ia
ensayo
Multa
{precondition:
prestamos.notEmpty()}
+ prestar(id: Identifier, fechaAct: Date)
{precondition: multa==0}
- multar(dias : int)
0..1 multa
prestado
retraso
biblioteca
reparacion
- fInicio: Date
-fFin: Date
Ejercicio Ejercicio zEspecificar un diagrama de clases que describa redes
deordenadores.
zLoselementosquesepuedenincluirenlaredson:
{
Sid
PC
I
{
S
erv
id
or,
PC
,
I
mpresora.
{Hub, Cable de red.
z
Los
PCs
pueden
conectarse
con
un
único
Hub
los
z
Los
PCs
pueden
conectarse
con
un
único
Hub
,
los
servidoresconunoovarios.
zLos Servidores y PCs pueden generar mensajes, con
unaciertalongitud.
zLos Hubs tienen un número de puertos, algunos de los
cuales
puede
usarse
para
conectar
con
otros
Hubs
cuales
puede
usarse
para
conectar
con
otros
Hubs
.
Tienenciertaprobabilidadde“perder”mensajes.
z
Las
impresoras
pueden
averiarse,
con
cierta
7
Las
impresoras
pueden
averiarse,
con
cierta
probabilidad,duranteciertotiempo.
Ejercicio PosibleSolución Ejercicio
.
Posible
Solución
.
8
“Los PCs pueden conectarse con un único Hub, los servidores con uno o varios”
Podemos modelarlo como una restricción OCL, o bien añadir asociaciones desde
Servidor y PC
OCLOCL
“Los PCs pueden conectarse con un único Hub, los servidores con uno o varios”
ContextPC
Inv:
cable equipo
>size() 1
Inv:
cable
_
equipo
-
>size()
=
1
ContextServidor
Inv:cable e
q
ui
p
o-
>
size() >= 1
_
qp
“Un Hub no puede conectarse consigo mismo a través de un puerto”
Conte t
Cbl Hb
Conte
x
t
C
a
bl
e_
H
u
b
s
Inv:Puerto_Hub.hub->asSet()->size() = 2
9
Ejercicio Examen Junio 2008.
Realiza el diseño de una aplicación para l a gestión de pedidos. La aplicación deberá
manejar clientes (se guarda su nombre, dirección, teléfono y e-mail), que pueden
realiza
r
p
edidos de
p
roductos
,
de los cuales se anota la cantidad en stock. Un
p
p,
cliente puede tener una o varias cuentas para el pago de los pedidos. Cada cuenta está asociada a una tarjeta de crédito, y tiene una cierta cantidad disponible de dinero, que el cliente debe aumentar periódicamente para poder realizar
nuevos
pedidos
.
realizar
nuevos
pedidos
.
Un cliente puede empezar a realizar un pedido sólo si tiene alguna cuenta con dinero
disponible. Al realizar un pedido, un cliente puede agruparlos en pedidos simples
o compuestos. Los pedidos simples están asociados a una sola cuenta de pago y
(por
restricciones
en
la
distribución)
contienen
un
máximo
de
20
unidades
del
(por
restricciones
en
la
distribución)
contienen
un
máximo
de
20
unidades
del
mismo o distinto tipo de producto. A su vez, un pedido compuesto contiene dos o más 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
Además
sólo
es
posible
compuesto
se
paguen
con
cuentas
del
mismo
cliente
.
Además
,
sólo
es
posible
realizar peticiones de productos en stock.
Existe una clase (de la cual debe haber una única instancia en la aplicación)
res
p
onsable del cobro, orden de distribución
y
confirmación de los
p
edidos. El
p
y
p
cobro de los pedidos se hace una vez al día, y el proceso consiste en comproba
r
todos los pedidos pendientes de cobro, y cobrarlos de la cuenta de pago correspondiente. Si una cuenta no tiene sufi ciente dinero, el pedido se rechaza (si
es
p
arte de un
p
edido com
p
uesto
,
se rechaza el
p
edido entero
)
.Unavez
q
ue el 10
p
p
p,
p
)
q
pedido está listo para servirse, se ordena su distribución, y una vez entregado, pasa a estar confirmado.
Se pide un diagrama de clases de diseño. Añade las restricciones OCL necesarias.
Solución
11
RestriccionesOCL: Restricciones
OCL:
Context
Cliente
::
realizar pedido
:
Context
Cliente
::
realizar
_
pedido
:
pre: self.cuentas->exists(c | c.disponible > 0)
Context Pedido Compuesto:
in
self
pedidos simples
>c enta
>cliente
>
asSet
()
>
si e
()
1
in
v:
self
.
pedidos
_
simples
-
>c
u
enta
-
>cliente
-
>
asSet
()
-
>
si
z
e
()
=
1
Context Pedido:
inv: self.t_productos.num->sum() <= 20
Context Pedido::añadirProducto(p: Producto, num: int):
pre: p.stock>=num
Context Cliente::rechazar_pedido (p:Pedido): pre: self.cuentas.disponible->sum()<p.total
12
Indice Indice zDiagramas de clases z
DiagramasdeTransiciónde
z
Diagramas
de
Transición
de
Estados Estados
zDiagramas de Interacción.
13
Ejercicio:Biblioteca Ejercicio:
Biblioteca
z
Unabibliotecatienecopiasdelibros Estosúltimosse
z
Una
biblioteca
tiene
copias
de
libros
.
Estos
últimos
se
caracterizan por su nombre, tipo (novela, teatro, poesía,
ensayo), editorial, año y autor.
zLos autores se caracterizan por su nombre, nacionalidad
y fecha de nacimiento.
z
Cadacopiatieneunidentificador ypuedeestarenla
z
Cada
copia
tiene
un
identificador
,
y
puede
estar
en
la
biblioteca, prestada, reservada, con retraso o en
reparación.
z
Loslectorespuedentenerunmáximode3librosen
z
Los
lectores
pueden
tener
un
máximo
de
3
libros
en
préstamo.
zCada libro se
p
resta un máximo de 30 días,
p
or cada día
pp
de retraso, se impone una “multa” de dos días sin
posibilidad de coger un libro. z
Realizaeldiagramadeestadosdelaclase
“
copia
”
z
Realiza
el
diagrama
de
estados
de
la
clase
copia
.
Solucion Solucion
en
Con
Retraso
Con
Retraso y reser ado
devolver()
reservar(id) / usrRes = id
en
reparacion
reparar()
reparado()
Retraso [getDate()>fp+30]
reser
v
ado
devolver()
[getDate()>fp+30]
en
biblioteca
prestado
prestar(id,fecha)/ fp=fecha
reservado
reservar(id) / usrRes = id
devolver()
devolver()
prestar(id, fecha) [usrRes==id]/ fp=fecha
t(2d )
en
reserva
t
m
(2
d
ays
)
Solucion:EstadosJerárquicos Solucion:
Estados
Jerárquicos
en
Con
Retraso
Con
Retraso y reser ado
reservar(id) / usrRes = id
en
reparacion
reparar()
reparado()
Retraso
[getDate()>fp+30]
reser
v
ado
[getDate()>fp+30]
usrRes
=
id
en
biblioteca
prestado
prestar(id,fecha)/ fp=fecha
reservado
reservar(id) / usrRes = id
devolver()
devolver()
prestar(id, fecha) [usrRes==id]/ fp=fecha
t(2d )
en
reserva
fp=fecha
t
m
(2
d
ays
)
16
Má
q
uinas de Estados
q
Estado Histórico. Ejercicio. zModelar el comportamiento de una
cadena de música. Esta
p
uede estar
p
encendida (ON) o apagada (Standby). La cadenatiene reproductordeCD Radioy cadena
tiene
reproductor
de
CD
,
Radio
y
Cinta. Se cambia de uno a otro con el
botón
“
mode
”
Cuandoseenciendela
botón
mode
.
Cuando
se
enciende
la
cadena se recuerda el último estado en el
que estuvo.
17
Má
q
uinas de Estados
q
Estado Histórico. Ejercicio. Solución
On
Standby
On CD
mode
mode
power
H
Radio
Tape
mode
power
H
mode
Mdl
l
i
it
i
td
hi tó i
M
o
d
e
lar e
l
m
ismo s
is
t
ema s
inusares
t
a
d
o
hi
s
tó
r
ico.
18
Má
q
uinas de Estados
q
Estado Histórico. Ejercicio. Solución (ii)
Standby
On
power
CD
mode
mode
power power
lastCD
power
Radio
Tape
mode
lastRadio
power power power
lastTape
power power
19
Ejercicio Examen Junio 2008.
Realiza el diseño de una aplicación para l a gestión de pedidos. La aplicación deberá
manejar clientes (se guarda su nombre, dirección, teléfono y e-mail), que pueden
realiza
r
p
edidos de
p
roductos
,
de los cuales se anota la cantidad en stock. Un
p
p,
cliente puede tener una o varias cuentas para el pago de los pedidos. Cada cuenta está asociada a una tarjeta de crédito, y tiene una cierta cantidad disponible de dinero, que el cliente debe aumentar periódicamente para poder realizar
nuevos
pedidos
.
realizar
nuevos
pedidos
.
Un cliente puede empezar a realizar un pedido sólo si tiene alguna cuenta con dinero
disponible. Al realizar un pedido, un cliente puede agruparlos en pedidos simples
o compuestos. Los pedidos simples están asociados a una sola cuenta de pago y
(por
restricciones
en
la
distribución)
contienen
un
máximo
de
20
unidades
del
(por
restricciones
en
la
distribución)
contienen
un
máximo
de
20
unidades
del
mismo o distinto tipo de producto. A su vez, un pedido compuesto contiene dos o más 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
Además
sólo
es
posible
compuesto
se
paguen
con
cuentas
del
mismo
cliente
.
Además
,
sólo
es
posible
realizar peticiones de productos en stock.
Existe una clase (de la cual debe haber una única instancia en la aplicación)
res
p
onsable del cobro, orden de distribución
y
confirmación de los
p
edidos. El
p
y
p
cobro de los pedidos se hace una vez al día, y el proceso consiste en comproba
r
todos los pedidos pendientes de cobro, y cobrarlos de la cuenta de pago correspondiente. Si una cuenta no tiene sufi ciente dinero, el pedido se rechaza (si
es
p
arte de un
p
edido com
p
uesto
,
se rechaza el
p
edido entero
)
.Unavez
q
ue el 20
p
p
p,
p
)
q
pedido está listo para servirse, se ordena su distribución, y una vez entregado, pasa a estar confirmado.
Se pide un diagrama de transición de estados para la clase Pedido
Solución Solución
21
Ejercicio Ejercicio z
Mdl
l
tit
ti
d
lj
d
l
z
M
o
d
e
la
r
e
l
compor
t
am
ien
t
o reac
ti
vo
d
eunre
lo
j
d
epu
lsera.
zEl 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
que
se
mantiene
z
El
botón
de
la
parte
superior
derecha
enciende
la
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.
zEl botón superior izquierdo alterna entre el modo de crono y de reloj. El
sistema
empieza
en
el
modo
reloj
en
el
que
se
muestra
la
hora
en
formato
sistema
empieza
en
el
modo
reloj
,
en
el
que
se
muestra
la
hora
en
formato
HH:MM:SS.
zEn el modo crono, el tiempo discurrido se muestra en formato MM:SS:CC
(
CC son centésimas de se
g
undo
)
. Inicialmente el crono em
p
ieza en É
(
g)
p
00:00:00. El botón inferio
r
derecho se usa para activa
r
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 inferio
r
iz
q
uierdo resetea el crono a 00:00:00 si el relo
j
q
j
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
muestra
la
hora)
.
Ejercicio zInterface provisto por el controlador: Ejercicio
{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():ve
r
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
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
{
unsetLight()
:
Apaga
la
luz
del
visor
.
zEventos de botones recibidos:
{topRightPressed.
{to
p
Ri
g
htReleased.
pg
{topLeftPressed.
{topLeftReleased.
{bottomRightPressed.
{
bottomRightReleased
23
{
bottomRightReleased
.
{bottomLeftPressed.
{bottomRightReleased.
PosibleSolución Posible
Solución
.
24
Indice Indice zDiagramas de clases z
DiagramasdeTransicióndeEstados
z
Diagramas
de
Transición
de
Estados
zDia
g
ramas de Interacción.
g
25
Ejercicio Ejercicio
f
Especi
f
icar 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;
}
}
Solución Solución
:JuegoLaberinto
lbLb it
crearLaberinto()
la
b
:
L
a
b
er
in
t
o
h1:Habitacion
h2:Habitacion
puerta:Puerta
create(h1,h2)
añadeHabitacion(h1) añadeHabitacion(h2) añadePuerta(puerta)
“crearLaberinto”
public class JuegoLaberinto {
private Laberinto lab;
private boolean conVentana;
public JuegoLaberinto() { 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);
}
}
Solución Solución
:JuegoLaberinto
lab:Laberinto
crearLaberinto()
h:Habitacion
loop
[for i = 1 to 10]
v:Ventana
opt
[conVentana==true]
añadeVentana(v) añadeHabitacion(h)
Ejercicio Ejercicio Especificar el diagrama de secuencia de la operación
“realizarJugada” definida en la clase Jugador, para el juego del
parchís parchís
Jugador
ill A t l i t
Dado
2 *
-cas
ill
a
A
c
t
ua
l:
in
t
+ realizarJugada(): void
+ casillaActual(): int
+ tirar(): int
1
*
Tablero
+ mover(int actual,
int unidades):
1
int
Ejercicio Ejercicio Identificarlas clasesrelevantes y realizar el diagrama de 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.
zEl usuario pulsa los dígitos del número de teléfono
zPara cada dí
g
ito
g
{la pantalla se actualiza para añadir el dígito marcado
{se emite un tono por el receptor z
Elusuario pulsa el botón
“
Enviar
”
z
El
usuario
pulsa
el
botón
Enviar
zEl indicador “en uso” se ilumina en pantalla
zEl móvil establece conexión con la red
z
Ldíit ld d l d
z
L
os
dí
g
it
os acumu
la
d
os se man
d
an a
la re
d
zSe establece la conexión con el número marcado
Solución Solución
:Button
:Dialer
send:Button
:Display
:CellularRadio
:Speaker
digit(code)
loop
[for i = 1 to 9]
displayDigit
send()
displayDigit (code)
emitTone
(code)
send()
connect(pno)
inUse() inUse()
¿Diagrama de colaboración
equivalente?
Solución Solución
Ejercicio:Biblioteca Ejercicio:
Biblioteca
z
Unabibliotecatienecopiasdelibros Estosúltimosse
z
Una
biblioteca
tiene
copias
de
libros
.
Estos
últimos
se
caracterizan por su nombre, tipo (novela, teatro, poesía,
ensayo), editorial, año y autor.
zLos autores se caracterizan por su nombre, nacionalidad
y fecha de nacimiento.
z
Cadacopiatieneunidentificador ypuedeestarenla
z
Cada
copia
tiene
un
identificador
,
y
puede
estar
en
la
biblioteca, prestada, reservada, con retraso o en
reparación.
z
Loslectorespuedentenerunmáximode3librosen
z
Los
lectores
pueden
tener
un
máximo
de
3
libros
en
préstamo.
zCada libro se
p
resta un máximo de 30 días,
p
or cada día
pp
de retraso, se impone una “multa” de dos días sin
posibilidad de coger un libro. z
Realizaeldiagramadecolaboraciónparaelmétodo
z
Realiza
el
diagrama
de
colaboración
para
el
método
devolver()
Solucion Solucion
1: devolver
(
id
,
fecha
)
1.3 [retraso>0]: multar(retraso)
:Lector
(, )
:Copia
prestamos
1.1: dev:=remove(id)
1.3.1a [multa=0]: multa:=
lt M lt
create(fecha,retraso)
dev:Copia
1.2: retraso:=getRetraso(fecha)
mu
lt
a:
M
u
lt
a
{new}
multa:Multa
1.3.1b [multa<>0]: anyade(fecha,retraso)