pelicula - PowerSystem2024/CapybaraFilms_ProyectoTercerSemestre GitHub Wiki

📄 Pelicula.py

1. Propósito y Responsabilidades

La entidad Pelicula encapsula toda la información relacionada con las películas disponibles en el sistema de cine.

🔸 Responsabilidades principales:

  • Almacenar información completa de películas (título, director, duración, etc.)
  • Gestionar formatos de proyección (2D/3D)
  • Proporcionar métodos de acceso y modificación controlados
  • Convertir formatos de string a enumeraciones

2. Atributos Principales

Atributo Tipo Propósito Validación
id_pelicula int Identificador único Asignado por BD
nombre str Título de la película Requerido
director str Director de la película Requerido
duracion int Duración en minutos Número positivo
genero str Género cinematográfico Texto libre
idioma str Idioma de la película Texto libre
formato FormatoPelicula Formato de proyección Enum 2D/3D

3. Métodos Clave con Ejemplos de Uso

🔸 Conversión de Formato:

pelicula = Pelicula(1, "Avatar", "James Cameron", 180, "Sci-Fi", "Inglés", "3D")  
formato_enum = pelicula.convertir_formato("3D")  # Convierte string a enum

🔸 Métodos Getter/Setter:

pelicula.set_nombre("Avatar: El Camino del Agua")  
pelicula.set_duracion(192)  
print(f"Película: {pelicula.get_nombre()}, Duración: {pelicula.get_duracion()} min")

🔸 Gestión de Formato:

    def get_formato(self) -> FormatoPelicula:
        """Devuelve el formato de la película."""
        return self.formato

    def set_formato(self, formato: FormatoPelicula):
        """Establece un nuevo formato a la película."""
        self.formato = formato

4. Manejo de Errores

La entidad Pelicula implementa manejo de errores específico:

  • Formato inválido: Lanza ValueError si el formato no existe en el enum.
  • Validación de tipos: Los setters incluyen type hints para validación.
  • Conversión segura: El método convertir_formato() valida antes de convertir.

5. Integración con Otras Entidades

graph TD
    Sala --> PeliculaNode
    PeliculaDAO --> PeliculaNode
    CineServices --> PeliculaNode

    subgraph PeliculaSubgraph
        PeliculaNode["Pelicula
        - nombre: str
        - director: str
        - duracion: int
        - formato: FormatoPelicula"]
    end

    PeliculaNode --> FormatoPelicula["FormatoPelicula DOS_D/TRES_D"]
Loading

🔸 Relaciones:

  • Con FormatoPelicula: Enum para formatos de proyección con precios adicionales
  • Con Sala: Asociación película-sala para proyecciones
  • Con PeliculaDAO: Persistencia y consultas del catálogo
  • Con CineServices: Selección de películas en el flujo de reserva

6. Representación Textual

La representación __str__ proporciona una vista completa de todos los atributos de la película, útil para debugging y logging del sistema.

7. Patrones de Diseño Implementados

Encapsulación: Todos los atributos tienen métodos getter/setter dedicados. Type Safety: Integración con enums para garantizar valores válidos. Domain Validation: Validación de formatos en el nivel de dominio.

Ambas entidades (Butaca y Pelicula) demuestran principios sólidos de diseño de dominio, manteniendo la lógica de negocio encapsulada y proporcionando interfaces claras para su uso en las capas superiores del sistema.

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