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: aplicando polimorfismo con herencia

Titulo.java

public class Titulo {
    private String nombre;
    private int fechaLanzamiento;
    private boolean incluidoEnElPlan;
    private double sumaDeLasEvaluaciones;
    private int totalDeEvaluaciones;
    private int duracionEnMinutos; // Duración común a todos los títulos

    // Constructor (opcional pero recomendable)
    public Titulo(String nombre, int duracionEnMinutos) {
        this.nombre = nombre;
        this.duracionEnMinutos = duracionEnMinutos;
    }

    // Métodos (Comportamiento)
    public void muestraFichaTecnica() {
        System.out.println("Nombre del título: " + nombre);
        System.out.println("Año de lanzamiento: " + fechaLanzamiento);
        System.out.println("Duración: " + duracionEnMinutos + " minutos");
    }

    // Getters y Setters
    public int getDuracionEnMinutos() {
        return duracionEnMinutos;
    }

    public void setDuracionEnMinutos(int duracionEnMinutos) {
        this.duracionEnMinutos = duracionEnMinutos;
    }
    
    // ... otros getters/setters y métodos de evaluación
}

Serie.java

public class Serie extends Titulo {
    private int temporadas;
    private int episodiosPorTemporada;
    private int minutosPorEpisodio;

    // Constructor que llama al constructor del padre (Título)
    public Serie(String nombre, int duracionEnMinutos) {
        super(nombre, duracionEnMinutos); // Llama al constructor de Título
    }

    // Método especializado
    public void configuraSerie(int temporadas, int episodios, int minutos) {
        this.temporadas = temporadas;
        this.episodiosPorTemporada = episodios;
        this.minutosPorEpisodio = minutos;
        // La duración total de la serie se calcula y se establece en el atributo heredado
        int duracionTotal = temporadas * episodios * minutos;
        super.setDuracionEnMinutos(duracionTotal);
    }
    
    // Sobrescribir (Polimorfismo por Sobreescritura)
    @Override
    public int getDuracionEnMinutos() {
        // La serie devuelve la duración total calculada
        return super.getDuracionEnMinutos();
    }

    // Getters y Setters específicos de Serie
    // ...
}

CalculadoraDeTiempo.java

public class CalculadoraDeTiempo {
    private int tiempoTotal;

    public int getTiempoTotal() {
        return tiempoTotal;
    }

    /**
     * Aplica Polimorfismo. Recibe un objeto de tipo Titulo (o cualquier subtipo).
     * @param titulo Objeto Titulo, Serie, o Pelicula.
     */
    public void incluye(Titulo titulo) {
        // Java llama al método getDuracionEnMinutos() de la clase REAL del objeto.
        // Si es Titulo, usa Titulo.getDuracionEnMinutos().
        // Si es Serie, usa Serie.getDuracionEnMinutos().
        this.tiempoTotal += titulo.getDuracionEnMinutos();
    }
}

Principal.java

public class Principal {
    public static void main(String[] args) {
        // 1. Crear Títulos
        Titulo pelicula1 = new Titulo("Avatar", 180);
        Titulo pelicula2 = new Titulo("Dune", 155);
        
        Serie serie1 = new Serie("The Witcher", 0); // Duración inicial 0
        serie1.configuraSerie(3, 8, 50); // 3 temporadas, 8 eps, 50 min/ep -> 1200 minutos

        // 2. Usar la Calculadora (Polimorfismo en acción)
        CalculadoraDeTiempo calculadora = new CalculadoraDeTiempo();
        
        // Incluye la película (usa Titulo.getDuracionEnMinutos())
        calculadora.incluye(pelicula1); 
        // Incluye la otra película
        calculadora.incluye(pelicula2); 
        // Incluye la serie (usa Serie.getDuracionEnMinutos() que devuelve la duración total calculada)
        calculadora.incluye(serie1); 

        // 3. Resultado
        System.out.println("Duración total de títulos vistos: " + calculadora.getTiempoTotal() + " minutos.");
        // Resultado esperado: 180 + 155 + 1200 = 1535 minutos
    }
}
1 respuesta

Hola Mario, espero que estés bien

¡Espero que estés bien! Veo que ya has avanzado bastante en la implementación de las clases Titulo, Serie y CalculadoraDeTiempo aplicando los conceptos de herencia y polimorfismo. ¡Bien hecho!

Para asegurarte de que estás aplicando correctamente el polimorfismo, revisemos algunos puntos clave que ya has implementado:

  1. Herencia: Has creado la clase Serie que extiende de Titulo, lo que significa que Serie hereda los atributos y métodos de Titulo. Esto es un buen uso de la herencia.

  2. Polimorfismo: En la clase CalculadoraDeTiempo, el método incluye(Titulo titulo) es un excelente ejemplo de polimorfismo. Este método acepta un objeto de tipo Titulo o cualquier subtipo de Titulo, como Serie. Cuando llamas a titulo.getDuracionEnMinutos(), Java determina automáticamente cuál método getDuracionEnMinutos() debe ser llamado, dependiendo de la clase real del objeto que se pasa. Esto es polimorfismo en acción.

  3. Sobreescritura de métodos: En la clase Serie, has sobrescrito el método getDuracionEnMinutos() para devolver la duración total de la serie. Esto muestra cómo puedes personalizar el comportamiento de un método heredado.

Tu implementación parece estar en línea con los conceptos de herencia y polimorfismo. Si tu objetivo era replicar el ejercicio de la lección, parece que lo has logrado. Si tienes alguna parte específica que te gustaría revisar o si sientes que algo no está funcionando como esperabas, no dudes en compartir más detalles.

Espero que esta explicación te ayude a consolidar tu comprensión de estos conceptos. ¡Bons estudios!