You are on page 1of 7

Gestin de una Biblioteca

Modelo de Dominio
Descripcin del sistema
Se desea realizar una aplicacin para gestionar una biblioteca de barrio. Esta
aplicacin, apunta el cliente, la utilizarn los administradores de la biblioteca (hasta 3)
mediante sus ordenadores Windows. La aplicacin debe ser de escritorio desarrollada
en Java SE, por imposicin del cliente. Las acciones tpicas a llevar a cabo por los
administradores sern consultar los libros que tiene prestados un usuario en concreto,
listar todos los prstamos actuales de todos los usuarios, dar de alta, eliminar o
modificar los usuarios. Tambin deber dar la posibilidad de comprar nuevos libros y
realizar prstamos.
Los administradores podrn dar de alta y eliminar nuevos administradores.
Diagrama de clases
La solucin se centra en el Usuario, porque as se recoge de los requisitos del cliente.
[Usuario|nif]-0..3>[Prestamo|fechaIni;fechaFin]
[Prestamo|fechaIni;fechaFin]-[note:El sistema no necesita conocer un histrico
de prstamos{bg:cornsilk}]
[Libro]-[note:Slo existe un ejemplar por libro{bg:cornsilk}]
[Prestamo|fechaIni;fechaFin]-1>[Libro]

http://yuml.me/diagram/class/draw

Diagrama de clases
Para otro problema y enunciado ms cercano a la realidad, podramos considerar esta
solucin. El resto del documento se basa en la primera solucin.
[Usuario|nif]-*>[Prestamo|fechaIni;fechaFin]
[Prestamo|fechaIni;fechaFin]-[note:Se gestiona histricos. Prstamos en curso
mx=3. Si fechaFin>now(){bg:cornsilk}]
[Prestamo|fechaIni;fechaFin]-1>[Ejemplar|id]
[Ejemplar|id]-1>[Libro|isbn;titulo]

http://yuml.me/diagram/class/draw

Descripcin de las clases


No se requiere.

Modelo de Casos de Uso


Diagrama de Casos de Uso
[Admin]-(Realizar Prstamo)
[Admin]-(Dar de Alta un libro)
[Admin]-(Visualizar Prstamos en curso)
[Admin]-(Visualizar Prstamos en curso de un usuario)
[Admin]-(Gestionar Usuarios)
[Admin]-(Gestionar Administradores)

http://www.websequencediagrams.com/

Descripcin detallada de los casos de uso


Nombre: Realizar Prstamo de un Libro
Actores: Usuario
Precondiciones:
Trigger: Escenario Primario:
1. El usuario selecciona un libro.
2. El sistema comprueba que el usuario no tiene ms de 3 prstamos (RN01).
3. El usuario solicita el prstamo.
4. El sistema comprueba que el libro est disponible.
5. El sistema asigna el prstamo al usuario.
Extensiones:
2a. El usuario tiene 3 prstamos en su haber
1a. El sistema comunica al usuario que no puede reservar ms libros.
2b. El libro no est disponible
1b. El sistema comunica al usuario que el libro no est disponible.
2b. El sistema cancela el proceso de prstamo.
2b. Vuelta a 1

Reglas de Negocio:
RN01: Un usuario no puede tener ms de 3 prstamos en curso.

Requerimientos No Funcionales:

nicamente habr hasta tres administradores que puedan acceder concurrentemente


al sistema.

Restricciones:

Debe ser desarrollada en Java.

Diagrama de Secuencia: Caso de Uso Realizar Prstamo de un Libro (versin


Centralizada)
Se refleja un comportamiento centralizado.
User->RealizarPrestamo:prestar(u,l)
RealizarPrestamo->u|Usuario: getPrestamos()
activate RealizarPrestamo
activate u|Usuario
u|Usuario-> RealizarPrestamo: numeroPrestamos
opt numeroPrestamos<3
RealizarPrestamo ->l|Libro: isDisponible()
activate l|Libro
l|Libro-> RealizarPrestamo: disponible
deactivate l|Libro
opt disponible
RealizarPrestamo ->p|Prestamo: new
activate p|Prestamo
p|Prestamo-> RealizarPrestamo: p
RealizarPrestamo ->p|Prestamo: setLibro(l)
deactivate p|Prestamo
RealizarPrestamo ->u|Usuario: addPrestamo(p)
end
end

http://www.websequencediagrams.com/

Diagrama de Secuencia: Caso de Uso Realizar Prstamo de un Libro (versin


Distribuida)
En este caso no es una buena solucin trabajar de forma distribuida. Se crea una nueva
dependencia entre Usuario y Libro. Adems, se rompe la cohesin de la clase Usuario.
Recomiendo utilizar modelos centralizados. En primer lugar la comprensin de los diagramas
de secuencia es mayor. Por otro lado, hay que decidir con bastante criterio en qu casos es
mejor uno u otro.
User->Usuario: reservar(l)
activate Usuario
Usuario->Prestamo: getPrestamos()
activate Prestamo
Prestamo->Usuario: numeroPrestamos
opt numeroPrestamos<3
Usuario->Libro: isDisponible()
activate Libro
Libro->Usuario: disponible
deactivate Libro
opt disponible
Usuario->Prestamo: new
activate Prestamo
Prestamo-> Usuario: p
Usuario ->Prestamo: setLibro(this)
deactivate Prestamo
Usuario ->Usuario: addPrestamo(p)
end
end

http://www.websequencediagrams.com/

Diseo preeliminar
Diagrama de Clases

Diagrama de Componentes