Ir al contenido principal

Entornos de Desarrollo - Unidad 5 - Prueba Práctica de Evaluación Final: Programación Orientada a Objetos

 Duración: 2 horas

Valor total: 100 puntos


Instrucciones:

  1. Lee todas las preguntas cuidadosamente.
  2. Escribe el código y justifica tus decisiones cuando se indique.
  3. Comenta el código cuando sea necesario para mejorar la comprensión.
  4. Entrega tu código y respuestas al final de la sesión.

Parte 1: Diseño y Diagrama de Clases (30 puntos)

Instrucciones:

  • Lee el enunciado a continuación y crea un diagrama de clases UML que resuelva el problema.
  • Luego, implementa las clases en Java siguiendo el diseño propuesto en el diagrama.
  • El diagrama debe incluir las relaciones correctas entre clases (composición, herencia, etc.) y la visibilidad de los atributos y métodos.

Enunciado:

Crea un sistema de gestión de una biblioteca. La biblioteca tiene varios Libros y Usuarios. Los usuarios pueden prestar libros. Un Libro tiene título, autor, y un número de ejemplares disponibles. Un Usuario tiene nombre, correo electrónico y un número máximo de libros que puede prestar.

  1. Los Libros pueden ser prestados o devueltos por los usuarios.
  2. Cada Usuario tiene un historial de libros que ha prestado.
  3. Los Libros tienen el atributo "número de ejemplares disponibles" y los Usuarios pueden tener un máximo de 5 libros prestados.

Requisitos:

  1. Implementa las siguientes clases:
    • Libro: título, autor, ejemplares disponibles, y método para prestar un libro.
    • Usuario: nombre, correo electrónico, número máximo de libros que puede tener prestados, y método para prestar/liberar libros.
    • Biblioteca: lista de libros, lista de usuarios, y un método para registrar préstamos y devoluciones.

Evaluación:

  • Diagrama de clases (10 puntos):

    • Correcta representación de las relaciones entre las clases (agregación, composición, etc.).
    • Visibilidad correcta de los atributos y métodos (público, privado, protegido).
    • Correcto uso de los métodos y atributos necesarios en el diseño.
  • Código de las clases (20 puntos):

    • Implementación correcta de las clases LibroUsuario y Biblioteca.
    • Correcta utilización de los métodos para prestar y devolver libros.
    • Control de los ejemplares disponibles y el número máximo de libros prestados por usuario.

Parte 2: Métodos y Pruebas Unitarias (40 puntos)

Instrucciones:

  • Crea las pruebas unitarias usando JUnit para validar que las clases implementadas en la Parte 1 funcionen correctamente. Asegúrate de que se cubren los siguientes casos:

Enunciado de los casos a probar:

  1. Préstamo de un libro:
    Verifica que un usuario pueda prestar un libro si hay ejemplares disponibles.

  2. Devolución de un libro:
    Verifica que un usuario pueda devolver un libro y que el número de ejemplares disponibles aumente.

  3. Número máximo de libros por usuario:
    Verifica que un usuario no pueda tener más de 5 libros prestados al mismo tiempo.

  4. Historial de préstamos de un usuario:
    Verifica que los libros prestados por un usuario se guarden en su historial correctamente.


Evaluación:

  • Pruebas unitarias (25 puntos):

    • Las pruebas cubren todos los casos solicitados.
    • Uso correcto de aserciones para verificar los resultados esperados.
    • Asegúrate de que las pruebas unitarias se ejecuten correctamente y validen el comportamiento esperado de las clases.
  • Justificación y comentarios (15 puntos):

    • Explicación clara de los métodos de prueba y de las decisiones tomadas para realizar las pruebas.
    • Los comentarios en el código de las pruebas unitarias son adecuados y explican la lógica de cada prueba.

Parte 3: Extensión del sistema y Buenas Prácticas (30 puntos)

Instrucciones:

Realiza una extensión del sistema creado en la Parte 1, en la cual se agrega una funcionalidad adicional. Elige uno de los siguientes escenarios y desarrolla la funcionalidad en el código:

  1. Escenario 1: Sistema de multa por retraso en la devolución.

    • Agrega un atributo fechaDevolucion en la clase Libro y un método para calcular las multas por días de retraso.
    • Si un libro se devuelve después de la fecha de devolución, el usuario debe pagar una multa.
  2. Escenario 2: Clasificación de libros por género.

    • Modifica la clase Libro para que incluya un campo género (por ejemplo, "Ficción", "No Ficción", etc.).
    • Crea un método en la clase Biblioteca que permita obtener una lista de libros de un género específico.
  3. Escenario 3: Sistema de recomendaciones de libros.

    • Agrega una funcionalidad en la clase Usuario para recomendar libros basados en los libros que han leído previamente.
    • Crea un método recomendarLibros() que devuelva una lista de libros recomendados.
  • Requisitos:
    • Desarrolla el código necesario para implementar la funcionalidad seleccionada.
    • Los métodos deben ser claros y bien documentados.
    • Se valorará la organización del código y la correcta aplicación de principios de programación orientada a objetos.

Evaluación:

  • Funcionalidad añadida (20 puntos):

    • Implementación correcta de la funcionalidad seleccionada.
    • El código es eficiente y sigue buenas prácticas de programación orientada a objetos.
  • Código limpio y buenas prácticas (10 puntos):

    • Código organizado y bien estructurado.
    • Uso adecuado de nombres descriptivos para clases, métodos y variables.
    • Comentarios y documentación clara en el código.

Criterios de Evaluación:

PartePuntos
Parte 1: Diseño y Diagrama de Clases30
- Diagrama de clases10
- Implementación de clases en Java20
Parte 2: Métodos y Pruebas Unitarias40
- Pruebas unitarias25
- Justificación y comentarios15
Parte 3: Extensión del sistema30
- Funcionalidad añadida20
- Buenas prácticas y código limpio10
Total100

Notas Importantes:

  1. Plagios o copias de código de compañeros u otros sitios resultarán en una calificación de 0 puntos en la prueba.
  2. Claridad en el código y la explicación será valorada. Asegúrate de comentar tu código y justificar tus decisiones.

Comentarios