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

aplicando polimorfismo con herencia

PELICULA

package com.alura.screenmatch.modelos;
public class Pelicula extends Titulo{
    private String director;
    public String getDirector() {
        return director;
    }
    public void setDirector(String director) {
        this.director = director;
    }
}

SERIE

package com.alura.screenmatch.modelos;
public class Serie extends Titulo {
    int temporadas;
    int episodioPorTemporada;
    int minutosPorEpisodio;
    @Override
    public int getDuracionEnMinutos() {
        return temporadas * episodioPorTemporada * minutosPorEpisodio;
    }
    public int getTemporadas() {
        return temporadas;
    }
    public void setTemporadas(int temporadas) {
        this.temporadas = temporadas;
    }
    public int getEpisodioPorTemporada() {
        return episodioPorTemporada;
    }
    public void setEpisodioPorTemporada(int episodioPorTemporada) {
        this.episodioPorTemporada = episodioPorTemporada;
    }
    public int getMinutosPorEpisodio() {
        return minutosPorEpisodio;
    }
    public void setMinutosPorEpisodio(int minutosPorEpisodio) {
        this.minutosPorEpisodio = minutosPorEpisodio;
    }
}

TITULO

package com.alura.screenmatch.modelos;
public class Titulo {
    private String nombre;
    private int fechaDeLanzamiento;
    private int duracionEnMinutos;
    private boolean incluidoEnPlan;
    private double sumaEvaluaciones;
    private int totalEvaluaciones;

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
    public void setFechaDeLanzamiento(int fechaDeLanzamiento) {
        this.fechaDeLanzamiento = fechaDeLanzamiento;
    }
    public void setDuracionEnMinutos(int duracionEnMinutos) {
        this.duracionEnMinutos = duracionEnMinutos;
    }
    public void setIncluidoEnPlan(boolean incluidoEnPlan) {
        this.incluidoEnPlan = incluidoEnPlan;
    }
    public int getTotalEvaluaciones() {
        return totalEvaluaciones;
    }
    public int getDuracionEnMinutos() {
        return duracionEnMinutos;
    }
    public int getFechaDeLanzamiento() {
        return fechaDeLanzamiento;
    }
    public String getNombre() {
        return nombre;
    }
    public void MuestraFichaTecnica() {
        System.out.println("El nombre de la pelicula es: " + nombre);
        System.out.println("Su fecha de lanzamiento es: " + fechaDeLanzamiento);
        System.out.println("Su duración en minutos es: " + getDuracionEnMinutos());
    }
    public void Evalua(double nota) {
        sumaEvaluaciones += nota;
        totalEvaluaciones++;
    }
    public double CalcularMedia(){
        return sumaEvaluaciones / totalEvaluaciones;
    }
    public boolean isIncluidoEnPlan(){
        return incluidoEnPlan;
    }
}

PRINCIPAL

import com.alura.screenmatch.calculos.CalculadoraDeTiempo;
import com.alura.screenmatch.modelos.Pelicula;
import com.alura.screenmatch.modelos.Serie;

public class Principal {
    public static void main(String[] args) {
        Pelicula pelicula = new Pelicula();
        pelicula.setNombre("Encanto");
        pelicula.setFechaDeLanzamiento(2021);
        pelicula.setDuracionEnMinutos(120);
        pelicula.setIncluidoEnPlan(true);

        pelicula.MuestraFichaTecnica();
        pelicula.Evalua(100);
        pelicula.Evalua(300);
        System.out.println(pelicula.getTotalEvaluaciones());
        System.out.println(pelicula.CalcularMedia());

        Pelicula pelicula2 = new Pelicula();
        pelicula2.setNombre("Matrix");
        pelicula2.setFechaDeLanzamiento(1998);
        pelicula2.setDuracionEnMinutos(120);
        pelicula2.setIncluidoEnPlan(true);

        pelicula2.MuestraFichaTecnica();
        pelicula2.Evalua(300);
        pelicula2.Evalua(600);


        Serie casaDragon = new Serie();
        casaDragon.setNombre("Casa del dragon");
        casaDragon.setFechaDeLanzamiento(1998);
        casaDragon.setTemporadas(1);
        casaDragon.setMinutosPorEpisodio(50);
        casaDragon.setEpisodioPorTemporada(10);
        casaDragon.MuestraFichaTecnica();
        
        System.out.println(casaDragon.getDuracionEnMinutos());
        CalculadoraDeTiempo calculadora = new CalculadoraDeTiempo();
        
        calculadora.incluye(pelicula);
        calculadora.incluye(casaDragon);
        calculadora.incluye(pelicula2);
        System.out.println("Tiempo necesario para ver los titulos es: "+calculadora.getTiempoTotal());

    }
}

CALCULADORA DE TIEMPO

package com.alura.screenmatch.calculos;

import com.alura.screenmatch.modelos.Pelicula;
import com.alura.screenmatch.modelos.Titulo;

public class CalculadoraDeTiempo {
    private int tiempoTotal;
    public int getTiempoTotal() {
        return tiempoTotal;
    }
    public void incluye(Titulo titulo){
        this.tiempoTotal += titulo.getDuracionEnMinutos();
    }
}
1 respuesta

Hola Juan,

¡Espero que estés bien! Por lo que veo, ya has avanzado bastante en la implementación de herencia y polimorfismo en tu proyecto. Has creado las clases Pelicula, Serie y Titulo, y estás utilizando la clase CalculadoraDeTiempo para calcular el tiempo total de los títulos.

Para aplicar correctamente el polimorfismo con herencia, asegúrate de que las clases Pelicula y Serie hereden de Titulo, lo cual ya has hecho. Esto te permite tratar instancias de Pelicula y Serie como objetos de tipo Titulo, lo cual es fundamental para el polimorfismo.

En tu código, el método incluye(Titulo titulo) de la clase CalculadoraDeTiempo está utilizando polimorfismo, ya que acepta cualquier objeto que sea una instancia de Titulo o sus subclases (Pelicula y Serie). Esto te permite sumar la duración de cualquier tipo de título sin preocuparte por su tipo específico.

Un ejemplo práctico de cómo estás aplicando polimorfismo es cuando llamas a calculadora.incluye(pelicula), calculadora.incluye(casaDragon), y calculadora.incluye(pelicula2). Aunque pelicula y pelicula2 son instancias de Pelicula, y casaDragon es una instancia de Serie, todas pueden ser pasadas al método incluye porque todas son instancias de Titulo.

Si deseas mejorar aún más tu implementación, podrías considerar agregar más métodos en Titulo que puedan ser sobrescritos en Pelicula y Serie para mostrar más información específica de cada tipo de título.

Espero que esta explicación te ayude a entender mejor cómo estás aplicando polimorfismo y herencia en tu proyecto. ¡Sigue adelante con tu aprendizaje!

Espero haber ayudado y buenos estudios!