Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

Haga lo que hicimos en aula: utilizando interfaces

Clasificable.java

package com.aluracursos.screenmatch.calculos;

public interface Clasificable {
    int getClasificacion();
}

Pelicula.java

import com.aluracursos.screenmatch.modelos.Titulo;
import com.aluracursos.screenmatch.calculos.Clasificable;

// NOTA: Debes tener el método calculaMedia() definido en Pelicula
public class Pelicula extends Titulo implements Clasificable {

    // Constructor, getters y setters omitidos por brevedad...

    // Implementación obligatoria de la interfaz Clasificable
    @Override
    public int getClasificacion() {
        // Asumiendo que calculaMedia() devuelve la nota promedio
        return (int) (calculaMedia() / 2);
    }
    
    // Otros métodos específicos de Pelicula...
    public double calculaMedia() {
        // Implementación de ejemplo para que compile
        return 9.5; 
    }
}

Episodio.java

import com.aluracursos.screenmatch.calculos.Clasificable;

// Necesitas importar la clase Serie o definirla mínimamente
class Serie {} 

public class Episodio implements Clasificable {
    private int numero;
    private String nombre;
    private Serie serie;
    private int totalVisualizaciones; // Atributo nuevo

    // Implementación obligatoria de la interfaz Clasificable
    @Override
    public int getClasificacion() {
        if (totalVisualizaciones >= 100){ // Usamos >= en lugar de > para incluir el 100
            return 4;
        } else {
            return 2;
        }
    }

    // Getters y Setters
    public void setTotalVisualizaciones(int totalVisualizaciones) {
        this.totalVisualizaciones = totalVisualizaciones;
    }
    
    public void setNumero(int numero) {
        this.numero = numero;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public void setSerie(Serie serie) {
        this.serie = serie;
    }
}

FiltroRecomendacion.java

package com.aluracursos.screenmatch.calculos;

public class FiltroRecomendacion {

    /**
     * Aplica Polimorfismo por Interfaz. 
     * Recibe cualquier objeto que implemente Clasificable (Pelicula, Episodio, etc.)
     * @param clasificacion El objeto a evaluar.
     */
    public void filtra(Clasificable clasificacion){
        int nota = clasificacion.getClasificacion();
        
        if (nota >= 4){
            System.out.println("Muy bien evaluado en el momento");
        } else if (nota >= 2){
            System.out.println("Popular en el momento");
        } else {
            System.out.println("Colócalo en tu lista para verlo después");
        }
    }
}

Principal.java

public class Principal {
    public static void main(String[] args) {
        // Asumiendo que has creado miPelicula y casaDragon (Serie) previamente
        
        // --- PREPARACIÓN (EJEMPLOS SIMPLIFICADOS) ---
        // Debes reemplazar Titulo y Pelicula con tus implementaciones reales si no funcionan
        class Titulo { int getDuracionEnMinutos() { return 120; } }
        class Pelicula extends Titulo implements com.aluracursos.screenmatch.calculos.Clasificable {
            @Override public int getClasificacion() { return 5; }
            public double calculaMedia() { return 10.0; } // Ejemplo
        }
        
        Pelicula miPelicula = new Pelicula();
        Serie casaDragon = new Serie(); // Necesitas la clase Serie
        
        // --- CÓDIGO DE LA TAREA ---
        Episodio episodio = new Episodio();
        episodio.setNumero(1);
        episodio.setNombre("La casa Targaryen");
        episodio.setSerie(casaDragon);
        episodio.setTotalVisualizaciones(50); // Clasificación = 2 (Popular)

        FiltroRecomendacion filtroRecomendacion = new FiltroRecomendacion();
        
        // 1. Filtra la Película (Clasificación 5 -> Muy bien evaluado)
        filtroRecomendacion.filtra(miPelicula); 

        // 2. Filtra el Episodio (Clasificación 2 -> Popular)
        filtroRecomendacion.filtra(episodio);
    }
}
1 respuesta

¡Hola Mario, espero que estés bien!

Veo que estás trabajando con interfaces en Java y has implementado la interfaz Clasificable en tus clases Pelicula y Episodio. Parece que ya tienes una buena base, pero permíteme ofrecerte algunos consejos y aclaraciones:

  1. Interfaz Clasificable: Ya la tienes bien definida. Esta interfaz asegura que cualquier clase que la implemente tendrá el método getClasificacion.

  2. Clase Pelicula: Has implementado correctamente la interfaz Clasificable. El método getClasificacion está calculando la clasificación dividiendo el resultado de calculaMedia() por 2. Asegúrate de que calculaMedia() devuelve un valor razonable para tu lógica de negocio.

    Ejemplo:

    public double calculaMedia() {
        // Aquí podrías calcular la media de las calificaciones de la película
        return 9.5; 
    }
    
  3. Clase Episodio: También está bien implementada. Has añadido el atributo totalVisualizaciones y el método getClasificacion que devuelve 4 si las visualizaciones son 100 o más, y 2 en caso contrario.

  4. Clase FiltroRecomendacion: Esta clase utiliza polimorfismo para trabajar con cualquier objeto que implemente Clasificable. El método filtra imprime un mensaje basado en la clasificación.

  5. Clase Principal: Aquí estás creando instancias de Pelicula y Episodio y aplicando el filtro de recomendación. Asegúrate de que las clases Titulo y Serie estén definidas correctamente en tu proyecto, ya que son necesarias para que el código compile sin errores.

Ejemplo de uso en Principal:

public class Principal {
    public static void main(String[] args) {
        Pelicula miPelicula = new Pelicula();
        Serie casaDragon = new Serie(); // Asegúrate de que esta clase existe

        Episodio episodio = new Episodio();
        episodio.setNumero(1);
        episodio.setNombre("La casa Targaryen");
        episodio.setSerie(casaDragon);
        episodio.setTotalVisualizaciones(50); // Clasificación = 2 (Popular)

        FiltroRecomendacion filtroRecomendacion = new FiltroRecomendacion();

        filtroRecomendacion.filtra(miPelicula); // Clasificación 5 -> Muy bien evaluado
        filtroRecomendacion.filtra(episodio);   // Clasificación 2 -> Popular
    }
}

Espero que estos consejos te ayuden a seguir adelante con tu proyecto. ¡Sigue así y buenos estudios!