Autor Tema: Ejercicio de Patrones de Diseño en Java  (Leído 1689 veces)

luu02

  • Sin experiencia
  • *
  • Mensajes: 6
  • Intento de programadora :)
    • Ver Perfil
Ejercicio de Patrones de Diseño en Java
« en: 16 de Diciembre 2022, 19:50 »
Hola chicos, no sé si podríais ayudarme con un ejercicio que me está resultando algo difícil. Tengo algunas dudas con los patrones de diseño y me cuesta diferenciarlos. Y en el ejercicio que os dejo a continuación me han pedido implementar el código en java para todo el proyecto además de diseñar el diagrama de clases, incluyendo los distintos patrones que se implementen.
Os indico los patrones que hemos llegado a ver:
  • Singleton
  • Factory Method
  • Abstract Factory
  • Adapter
  • Composite
  • Facade
  • Decorator
  • Template Method
  • Observer
  • Strategy

Simplemente con que me ayudéis a distinguir las distintas clases que habría (con sus respectivos atributos) y los patrones que serían necesarios me ayudaríais un montón :)

Os dejo el enunciado del ejercicio a continuación y gracias de antemano:
Citar
Un Centro de Convenciones necesita un sistema informático que de manera automática gestione la reserva y ocupación de sus espacios. Los espacios representan los salones de que dispone. El sistema deberá ser capaz de registrar nuevos espacios. De un espacio se debe registrar su código, su nombre, su capacidad y un listado (histórico) con el coste por día para cada año desde que se habilitó el espacio. De ese listado es de donde se debe tomar el coste para poder calcular los ingresos. A un espacio dado se le puede añadir equipamiento extra (opcional) en función del evento que se celebre. Este equipamiento puede ser una ornamentación especial, un equipo de música con sus altavoces o un escenario si el evento lo requiere. De estos equipamientos se debe registrar, un código numérico identificativo, su descripción y el coste de ese equipamiento que será una cantidad que dependerá de cada caso (un mismo equipamiento podrá tener precios distintos para espacios y momentos distintos) y deberá introducir el usuario cada vez que se use dicho equipamiento. El sistema debe estar abierto a poder extender a nuevos equipamientos si aparece una nueva demanda. Solo se pueden reservar aquellos espacios que aparezcan en el sistema. De la reserva se debe registrar el nombre del cliente que hizo la reserva, su teléfono, la fecha del evento, el código del espacio que se reserva y la lista de consumiciones que se hayan hecho en total. De una consumición se debe registrar el producto que se ha consumido y la cantidad. Las consumiciones las prepara la cocina que dispone el centro de convenciones. La cocina dispone de su propia carta de productos que se organiza por secciones. Así se puede encontrar una sección de menús, otra con platos individuales, y otra de bebidas o cócteles. De cada producto que se oferte para su consumición se debe registrar un código, su descripción y un listado (histórico) con coste del producto para cada año desde que está disponible. El sistema debe estar abierto a poder añadir nuevos tipos de productos u oferta a su carta.
Tanto los espacios como productos dados de alta en el sistema no se eliminan. En caso de no estar disponible por la causa que fuere, se deberá registrar su no disponibilidad para que no se pueda hacer uso de él. En el caso de que volviera a estar disponible, solo haría falta actualizar su disponibilidad para poder acceder al recurso.
La primera vez que arranque el sistema deberá crear el objeto carta del cual dependerán jerárquicamente las secciones y, de estas, los productos disponibles para su preparación en la cocina del Centro de Convenciones.

Gestión de espacios
• Dar de alta un nuevo espacio. Se le añade un precio para el año en curso.
• Añadir un nuevo precio a todos los espacios para un año dado. Para ello se solicitará el año que se quiere registrar y el porcentaje de incremento sobre el precio del año anterior. Si para un espacio ya existe precio para ese año o no existe para el año anterior entonces no se llevará a cabo acción alguna sobre ese espacio.
• Hacer disponible un espacio ya existente
• Hacer no disponible un espacio ya existente
• Listar la información de todos los espacios disponibles.

Gestión de Reservas
• Dar de alta. Para ello, se mostrará un listado con todos los espacios disponibles para la fecha seleccionada y que tenga la capacidad adecuada para albergar el número de personas que van a participar en el evento que se desea organizar. En caso de que no haya espacios que cumplan esas condiciones, se terminará el
proceso sin dar de alta la reserva. En caso contrario, se seleccionará un espacio y, a continuación, se solicitará al usuario si el espacio reservado requiere de algún equipamiento especial. El equipamiento así asignado no se puede cambiar para dicha reserva. Cualquier cambio implicaría cancelar la reserva y reiniciar el proceso. Por último, se consignarán aquellas peticiones de consumición que se desea realizar a priori. • Dar de baja una reserva. La elimina del sistema. Sólo se puede dar de baja una reserva si la fecha de la reserva todavía no ha vencido.
• Añadir una nueva consumición a una reserva. Se contempla la posibilidad de añadir nuevas consumiciones a una reserva con anterioridad o durante la celebración del evento.
• Eliminar una consumición de una reserva.
• Listar la información de todas las reservas.
• Mostrar la información de una reserva concreta.

Gestión de la Carta de Productos
• Dar de alta una sección de la carta. A la hora de dar de alta una nueva sección se ha de indicar el nombre de la nueva sección de la cuál dependerán nuevos productos.
• Dar de alta un nuevo producto. Un nuevo producto puede ser desde un menú ya predefinido, a un plato o coctel concreto. Para dar de alta un nuevo producto se debe seleccionar la sección donde se le quiere incluir. Para ello el sistema mostrará el listado de secciones existente. Se le añade un precio para el año en curso.
• Añadir un nuevo precio a todos los productos de la carta para un año dado. Para ello se solicitará el año que se quiere registrar y el porcentaje de incremento sobre el precio del año anterior. Si para un espacio ya existe precio para ese año o no existe para el año anterior entonces no se llevará a cabo acción alguna sobre ese espacio.
• Hacer disponible un producto ya existente
• Mostrar la información de una sección con los productos disponibles.

Gestión económica
• Mostrar los ingresos totales obtenidos por un espacio en un periodo concreto. Este periodo debe ser anterior a la fecha actual.
• Mostrar los ingresos totales obtenidos del centro de convenciones en un periodo concreto. Este periodo debe ser anterior a la fecha actual.
« Última modificación: 16 de Diciembre 2022, 20:05 por luu_cuuesta »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Re: Ejercicio de Patrones de Diseño en Java
« Respuesta #1 en: 18 de Diciembre 2022, 01:46 »
Sobre los patrones poco puedo ayudar, porque no me los se...  :-\
Vamos, seguro que tú podrías explicarme más sobre ellos que yo a ti.


Sobre las clases, tampoco soy un experto en UML, pero creo que estas podrían ser las clases.

Equipamiento y Producto las he puesto como abstractas.
Sin embargo, ya que entre sus hijas no hay atributos que pudieran diferenciarlas unas de otras, en realidad se podría haber resuelto con sendos enumeradores (Enum).
Pero intuyo que la intención del ejercicio es representar relaciones de herencias con estas entidades.

Un Espacio puede tener, o no, un Equipamiento, por eso remarco que este atributo podría tener valor null.

Reserva se relaciona con Espacio a través de su código/ID. Es decir, que Reserva no tiene un atributo de tipo Espacio, si no un String con el código identificador de un Espacio

Una Reserva si puede tener agregadas varias Consumiciones, por eso su atributo es un ArrayList.
Y cada Consumición consta de un Producto

NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

luu02

  • Sin experiencia
  • *
  • Mensajes: 6
  • Intento de programadora :)
    • Ver Perfil
Re: Ejercicio de Patrones de Diseño en Java
« Respuesta #2 en: 18 de Diciembre 2022, 09:39 »
Muchas gracias de verdad porque me has ayudado un montón a la hora de empezar con ello. Me estaba agobiando el no saber por dónde cogerlo :(

Al final, informándome un poco sobre los patrones, creo que habría que implementar 3 de ellos en la práctica (Singleton, Decorator y Composite). Y dicha implementación me obliga a crear 2 nuevas clases: una para la “Carta/Cocina” que dispondrá de los productos, y otra que he llamado “CentroConvenciones” desde la que gestionar todos los recursos del sistema.

Ahora, en cuanto a la implementación del proyecto, me han surgido algunas dudas en la opción 2 del menú Gestión de espacios (“Añadir un nuevo precio a todos los espacios…”). No llego a dar con el código que consiga guardar el listado/histórico con el coste por día para cada año y acceder a el para cambiar los precios.

Además, la primera opción de Gestión de Reservas me está dando problemas. No consigo añadir los equipamientos y consumiciones a la reserva.

Gracias por tu dedicación de verdad. Consigues ayudar y animar a mucha gente con este foro :)

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Re: Ejercicio de Patrones de Diseño en Java
« Respuesta #3 en: 18 de Diciembre 2022, 11:48 »
Claro, yo puse las entidades básicas.
Luego posiblemente queramos añadir más clases que se encarguen de gestionar esas entidades.

Por ejemplo una clase GestionEspacios con un ArrayList de Espacios y los métodos necesarios para crear espacios, para añadirles/quitar Equipamientos (quizás apoyándose en otra clase GestorEquipamientos)

También es posible que queramos añadir nuevos atributos, por ejemplo un boolean para indicar si un espacio está disponible o no.

Sobre el histórico de precios por año..., quizás el ArrayList<Double> no sea la mejor opción ya que solo permite guardar valor de costes, pero sin asociarlos a ningún año en concreto.

Puede que un HashMap<Integer, Double>, que permite asociar claves y valores, sea mejor opción al poder usar el año(Integer) como clave y el coste de dicho año(Double) como valor.

O si no, crear una nueva clase llamada CosteAnual con dos atributos, el año y el coste.

La verdad es que es un ejercicio interesante y completo. Lástima que ahora en Navidades soy esclavo a tiempo completo del trabajo los siete días de la semana  :'( y no tengo tiempo ni fuerzas para intentar solucionarlo por mi parte.

Mantennos informados de tus avances y expón tus dudas, por si podemos ayudarte en algo.

Un saludo.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".