candy - PowerSystem2024/CapybaraFilms_ProyectoTercerSemestre GitHub Wiki

📄 Candy.py

1. Propósito y Responsabilidades

La entidad Candy representa los productos de confitería disponibles en el cine, gestionando los diferentes tipos de combos y proporcionando funcionalidad de selección interactiva.

🔸 Responsabilidades principales:

  • Encapsular tipos de combos de confitería.
  • Proporcionar métodos de acceso a información del combo.
  • Implementar selección interactiva de combos.
  • Integrar con enumeraciones de tipos de candy.

2. Atributos Principales

Atributo Tipo Propósito Validación
tipo TipoCandy Tipo de combo (enum) Valores predefinidos

3. Métodos Clave con Ejemplos de Uso

🔸 Acceso al Tipo de Combo:

candy = Candy(TipoCandy.MEDIANO)  
tipo_combo = candy.get_tipo()  
print(f"Tipo: {tipo_combo.get_nombre()}")
Fuente: Candy.py:7-8

🔸 Representación Textual:

    def __str__(self):
        return f"Candy: {TipoCandy.get_nombre()}"  # Muestra el nombre del candy

🔸 Selección Interactiva de Combos:

combo_seleccionado = Candy.obtener_combo()  
# Muestra menú interactivo y retorna objeto Candy  
print(f"Combo elegido: {combo_seleccionado.get_tipo().get_nombre()}")

4. Manejo de Errores

La entidad Candy implementa validación en la selección interactiva:

  • Entrada inválida: Captura ValueError para entradas no numéricas.
  • Rango inválido: Valida que la opción esté dentro del rango de combos disponibles.
  • Bucle de reintento: Permite múltiples intentos hasta obtener entrada válida.

5. Integración con Otras Entidades

graph TD
    Reserva --> CandyNode
    CandyDAO --> CandyNode
    CineServices --> CandyNode

    subgraph CandySubgraph
        CandyNode["Candy
        - tipo: TipoCandy
        + obtener_combo"]
    end

    CandyNode --> TipoCandy["TipoCandy
    CHICO/MEDIANO/GRANDE
    + get_nombre
    + get_precio"]
Loading

🔸 Relaciones:

  • Con TipoCandy: Enum que define tipos y precios de combos.
  • Con Reserva: Múltiples candies pueden asociarse a una reserva.
  • Con CandyDAO: Persistencia y consultas del catálogo de combos.
  • Con CineServices: Selección de combos en el flujo de reserva.

6. Patrones de Diseño Implementados

🔸 Factory Method Pattern:

  • El método estático obtener_combo() actúa como factory para crear instancias.
  • Encapsula la lógica de selección y creación de objetos.

🔸 Enum Integration:

  • Utiliza TipoCandy para garantizar consistencia en tipos de combos.
  • Accede a precios y nombres a través de métodos del enum.

🔸 Interactive Selection:

  • Implementa interfaz de usuario directamente en la entidad.
  • Maneja validación y reintento de entrada de usuario.

Ambas entidades (Sala y Candy) demuestran diferentes enfoques de diseño: Sala es una entidad simple y directa, mientras que Candy incorpora lógica de interacción más compleja, mostrando la flexibilidad del diseño de dominio para adaptarse a diferentes necesidades del negocio.

⚠️ **GitHub.com Fallback** ⚠️