You are on page 1of 36

Ejercicios UML

Juan de Lara Grupo 46 G 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. Los L empleados ti l d tienen un sueldo b t l empleados que ld bruto, los l d son directivos tienen una categora, as como un conjunto de empleados subordinados. p De los clientes adems se necesita conocer su telfono de contacto. La L aplicacin necesita mostrar l li i it t los d t datos d empleados y de l d clientes.
3

Ejercicio
Persona
- nombre - edad + mostrar()

Empleado
subordinados - sueldo_bruto + mostrar () t + calcular_salario_neto()

Cliente
- telefono_de_contacto nombre_empresa +mostrar()

0..*

1..*
empleados

0..* clientes 1..* 1

Directivo
0..*
- categoria + mostrar ()

Empresa
- nombre b
4

Ejercicio: Biblioteca
Una biblioteca tiene copias de libros Estos ltimos se libros. 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 y puede estar en la identificador, 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 una multa de dos das sin p 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 Prestamo - inicio: Date - fin: Date 0..1 lector - titulo : string libro - tipo: tipoLibro 1 - editorial: string - anyo: i t int 1..* obras

1 autor

Autor
- nombre: string b ti - nacionalidad: string - fechaNacimiento: Date
<<enumeration>> tipoLibro
novela teatro poesia i ensayo

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)

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, PC, Impresora. S id PC I Hub, Cable de red.

Los PCs pueden conectarse con un nico Hub los Hub, 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. Ejercicio Posible Solucin. 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() = 1 cable_equipo->size() Context Servidor Inv: cable_equipo->size() >= 1 q p

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


Context Cable_Hubs Conte t 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 pedidos de productos, 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 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 Adems slo es posible cliente. Adems, realizar peticiones de productos en stock. Existe una clase (de la cual debe haber una nica instancia en la aplicacin) responsable del cobro, orden de distribucin y confirmacin de los pedidos. El p p 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 parte de un pedido compuesto, se rechaza el pedido entero). Una vez que el p p p , p ) q 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: inv: self pedidos simples >c enta >cliente >asSet() >si e() = 1 in 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 Estos ltimos se libros. 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 y puede estar en la identificador, biblioteca, prestada, reservada, con retraso o en reparacin. Los lectores pueden tener un mximo de 3 libros en prstamo. Cada libro se presta un mximo de 30 das, p cada da p por 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
Con Retraso reservar(id) / usrRes = id Con Retraso y reservado reser ado devolver()

en reparacion reparado() reparar()

devolver() [getDate()>fp+30]

[getDate()>fp+30]

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

reservado devolver() en reserva

Solucion: Estados Jerrquicos


Con Retraso [getDate()>fp+30] reservar(id) / usrRes = id Con Retraso y reservado reser ado

en reparacion reparado() reparar()

[getDate()>fp+30]

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

reservar(id) / usrRes = id prestar(id, fecha) [usrRes==id]/ fp=fecha

reservado devolver() en reserva

16

Mquinas de Estados q
Estado Histrico. Ejercicio.

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

Mquinas de Estados q

Estado Histrico. Ejercicio. Solucin

On Standby power power mode CD mode

H
Radio mode Tape

Modelar l i M d l el mismo sistema sin usar estado hi t i i t i t d histrico.

18

Mquinas de Estados q

Estado Histrico. Ejercicio. Solucin (ii)

Standby lastCD power power power power lastTape power power mode

On CD mode

lastRadio

Radio

mode

Tape

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 pedidos de productos, 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 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 Adems slo es posible cliente. Adems, realizar peticiones de productos en stock. Existe una clase (de la cual debe haber una nica instancia en la aplicacin) responsable del cobro, orden de distribucin y confirmacin de los pedidos. El p p 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 parte de un pedido compuesto, se rechaza el pedido entero). Una vez que el p p p , p ) q 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 l M d l el comportamiento reactivo d un reloj d pulsera. t i t ti de l j de 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 que se mantiene luz, 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 en el que se muestra la hora en formato reloj, HH:MM:SS. En el modo crono, el tiempo discurrido se muestra en formato MM:SS:CC ( (CC son centsimas de segundo). Inicialmente el crono empieza en g ) p 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 resetea el crono a 00:00:00 si el reloj 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

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 de Interaccin. g

25

Ejercicio
Especificar el diagrama de secuencia de la operacin f 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()

lab:Laberinto l bL b i t 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
crearLaberinto() loop [for i = 1 to 10]

lab:Laberinto

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: i t ill A t l int + realizarJugada(): void + casillaActual(): int
* 1 * 2

Dado
+ tirar(): int

Tablero
+ mover(int actual, int unidades): boolean

Solucin
:Jugador
realizarJugada() par tirar() n1 tirar() n2

d1:Dado

d2:Dado

:Tablero

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 Los dgitos L d it acumulados se mandan a l red l d d la d Se establece la conexin con el nmero marcado

Solucin
:Button :Dialer :Display :Speaker send:Button :CellularRadio

loop

[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 Estos ltimos se libros. 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 y puede estar en la identificador, biblioteca, prestada, reservada, con retraso o en reparacin. Los lectores pueden tener un mximo de 3 libros en prstamo. Cada libro se presta un mximo de 30 das, p cada da p por 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
1.3.1a [multa=0]: multa:= create(fecha,retraso)

prestamos

1.1: dev:=remove(id)

:Copia

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

1.2: retraso:=getRetraso(fecha)

dev:Copia

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

You might also like