Ejercicios uml

51,486 views 36 slides Jul 25, 2014
Slide 1
Slide 1 of 36
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36

About This Presentation

diagramas uml


Slide Content

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

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


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


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

r
ico.
18


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)

Ejercicio Ejercicio Especificareldiagramadesecuenciadelaoperación Especificar

el

diagrama

de

secuencia

de

la

operación

“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

unidades):

boolean

Solución Solución
:Jugador
d1:Dado
realizarJugada()
d2:Dado
:Tablero
tirar() n1
par
tirar()
n2
ca:=casillaActual()
mover(ca,n1+n2)
movRealizado

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

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)
Tags