Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
2
respuestas

Haga lo que hicimos en aula: aplicando polimorfismo con herencia

Aprendí a usar herencia y polimorfismo en Java creando Titulo, Pelicula y Serie, y una calculadora que funciona con cualquier contenido.

Principal.java

import com.aluracursos.screematch.calculos.CalculadoraDeTiempo;
import com.aluracursos.screematch.modelos.Pelicula;
import com.aluracursos.screematch.modelos.Serie;

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

        miPelicula.muestraFichaTecnica();
        miPelicula.evalua(10);
        miPelicula.evalua(10);
        miPelicula.evalua(7.8);
        System.out.println(miPelicula.getTotalDelasEvaluaciones());
        System.out.println("Média de evaluaciones de la película: " + miPelicula.calculaMedia());

        Serie casaDragon = new Serie();
        casaDragon.setNombre("La casa del dragón");
        casaDragon.setFechaDeLanzamiento(2022);
        casaDragon.setTemporadas(1);
        casaDragon.setMinutosPorEpisodio(50);
        casaDragon.setEpisodiosPorTemporada(10);
        casaDragon.muestraFichaTecnica();
        System.out.println(casaDragon.getDuracionEnMinutos());

        CalculadoraDeTiempo calculadora = new CalculadoraDeTiempo();
        calculadora.incluye(miPelicula);
        calculadora.incluye(casaDragon);
        System.out.println(calculadora.getTiempoTotal());
    }
}

Titulo.java

package com.aluracursos.screematch.modelos;

public class Titulo {

    private String nombre;
    private int fechaDeLanzamiento;
    private int duracionEnMinutos;
    private boolean incluidoEnElPlan;
    private double sumaDeEvaluaciones;
    private int totalDeEvaluaciones;

    public String getNombre() {
        return nombre;
    }

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

    public int getFechaDeLanzamiento() {
        return fechaDeLanzamiento;
    }

    public void setFechaDeLanzamiento(int fechaDeLanzamiento) {
        this.fechaDeLanzamiento = fechaDeLanzamiento;
    }

    public int getDuracionEnMinutos() {
        return duracionEnMinutos;
    }

    public void setDuracionEnMinutos(int duracionEnMinutos) {
        this.duracionEnMinutos = duracionEnMinutos;
    }

    public boolean isIncluidoEnElPlan() {
        return incluidoEnElPlan;
    }

    public void setIncluidoEnElPlan(boolean incluidoEnElPlan) {
        this.incluidoEnElPlan = incluidoEnElPlan;
    }

    public void muestraFichaTecnica() {
        System.out.println("Nombre: " + nombre);
        System.out.println("Fecha de lanzamiento: " + fechaDeLanzamiento);
    }

    public void evalua(double nota) {
        sumaDeEvaluaciones += nota;
        totalDeEvaluaciones++;
    }

    public double calculaMedia() {
        return sumaDeEvaluaciones / totalDeEvaluaciones;
    }

    public int getTotalDelasEvaluaciones() {
        return totalDeEvaluaciones;
    }
}

Serie.java

package com.aluracursos.screematch.modelos;

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

    public int getTemporadas() {
        return temporadas;
    }

    public void setTemporadas(int temporadas) {
        this.temporadas = temporadas;
    }

    public int getEpisodiosPorTemporada() {
        return episodiosPorTemporada;
    }

    public void setEpisodiosPorTemporada(int episodiosPorTemporada) {
        this.episodiosPorTemporada = episodiosPorTemporada;
    }

    public int getMinutosPorEpisodio() {
        return minutosPorEpisodio;
    }

    public void setMinutosPorEpisodio(int minutosPorEpisodio) {
        this.minutosPorEpisodio = minutosPorEpisodio;
    }

    @Override
    public int getDuracionEnMinutos() {
        return temporadas * episodiosPorTemporada * minutosPorEpisodio;
    }
}

Pelicula.java

package com.aluracursos.screematch.modelos;

public class Pelicula extends Titulo {
    private String director;

    public String getDirector() {
        return director;
    }

    public void setDirector(String director) {
        this.director = director;
    }
}

CalculadoraDeTiempo.java

package com.aluracursos.screematch.calculos;

import com.aluracursos.screematch.modelos.Titulo;

public class CalculadoraDeTiempo {
    private int tiempoTotal;

    public int getTiempoTotal() {
        return tiempoTotal;
    }

    public void incluye(Titulo titulo){
        this.tiempoTotal += titulo.getDuracionEnMinutos();
    }
}
2 respuestas

¡Hola! Parece que ya has hecho un gran trabajo implementando herencia y polimorfismo en tu código Java. Has creado las clases Titulo, Pelicula, Serie y CalculadoraDeTiempo, y estás utilizando herencia para que Pelicula y Serie extiendan de Titulo, lo cual es un buen uso de la herencia.

En cuanto al polimorfismo, lo estás aplicando correctamente al utilizar la clase CalculadoraDeTiempo que acepta objetos del tipo Titulo. Esto te permite incluir tanto películas como series en la calculadora y sumar sus duraciones, demostrando polimorfismo porque estás tratando diferentes tipos de Titulo de manera uniforme.

Un ejemplo práctico de cómo podrías expandir esto es añadiendo más métodos polimórficos. Por ejemplo, podrías tener un método en Titulo llamado reproducir() que sea sobrescrito en Pelicula y Serie para mostrar un mensaje diferente dependiendo del tipo de contenido que se está reproduciendo.

Aquí tienes un ejemplo de cómo podrías implementar esto:

// En Titulo.java
public void reproducir() {
    System.out.println("Reproduciendo título: " + nombre);
}

// En Pelicula.java
@Override
public void reproducir() {
    System.out.println("Reproduciendo película: " + nombre);
}

// En Serie.java
@Override
public void reproducir() {
    System.out.println("Reproduciendo serie: " + nombre);
}

Luego, en tu clase Principal, podrías llamar a este método reproducir() en los objetos de Pelicula y Serie para ver el polimorfismo en acción.

Ups mensaje duplicado