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

2.3.11 Haga lo que hicimos en aula: aplicando polimorfismo con herencia

Hola, les comparlo mi codigo hasta ahora

Clase Principal

import com.aluracursos.screenmatch.calculos.CalculadoraDeTiempo;
import com.aluracursos.screenmatch.modelos.Pelicula;
import com.aluracursos.screenmatch.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(9);
        System.out.println(miPelicula.getTotalDelasEvaluaciones());
        System.out.println(miPelicula.calculaMedia());

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


        Pelicula otraPelicula = new Pelicula();
        otraPelicula.setNombre("Matrix");
        otraPelicula.setFechaDeLanzamiento(1999);
        otraPelicula.setDuracionEnMinutos(180);

        CalculadoraDeTiempo calculadora = new CalculadoraDeTiempo();
        calculadora.incluye(miPelicula);
        calculadora.incluye(casaDragon);
        calculadora.incluye(otraPelicula);
        System.out.println("Tiempo necesario para ver tus titulos favpritos estas vacaciones: " + calculadora.getTiempoTotal() + " minutos");


    }

Clase Titulo

package com.aluracursos.screenmatch.modelos;

public class Titulo {
    private String nombre;
    private int fechaDeLanzamiento;
    private int duracionEnMinutos;
    private boolean incluidoEnElPlan;
    // Que la variable sea privada
    private double sumaDeLasEvaluaciones;
    private int totalDelasEvaluaciones;

    public String getNombre() {
        return nombre;
    }

    public int getFechaDeLanzamiento() {
        return fechaDeLanzamiento;
    }
    public int getDuracionEnMinutos() {
        return duracionEnMinutos;
    }
    public boolean isIncluidoEnElPlan() {
        return incluidoEnElPlan;
    }
    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 setIncluidoEnElPlan(boolean incluidoEnElPlan) {
        this.incluidoEnElPlan = incluidoEnElPlan;
    }
    // Se coloca get cuando se quiere obtener algo
    public int getTotalDelasEvaluaciones(){
        return totalDelasEvaluaciones;
    }
    public void muestraFichaTecnica(){
        System.out.println("El titulo es: " + nombre);
        System.out.println("Su fecha de lanzamiento es: " + fechaDeLanzamiento);
        System.out.println("Duración en minutos: "+ getDuracionEnMinutos());
    }
    public void evalua(double nota){
        sumaDeLasEvaluaciones += nota;
        totalDelasEvaluaciones++;
    }
    public double calculaMedia(){
        return sumaDeLasEvaluaciones / totalDelasEvaluaciones;
    }
}

Clase Serie

public class Serie extends Titulo{
    int temporada;
    int episodiosPorTemporada;
    int minutosPorEpisodio;

    public int getDuracionEnMinutos() {
        return temporada * episodiosPorTemporada * minutosPorEpisodio;
    }
    public int getTemporada() {
        return temporada;
    }
    public void setTemporada(int temporada) {
        this.temporada = temporada;
    }
    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;
    }
}

Clase Pelicula

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

Clase ClaculadoraDeTiempo

public class CalculadoraDeTiempo {
    private int tiempoTotal;

    public int getTiempoTotal() {
        return tiempoTotal;
    }

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

}
1 respuesta

Hola Nelli, espero que estés bien

¡Qué bueno ver que estás aplicando los conceptos de herencia y polimorfismo en tu código! Parece que ya tienes una buena base. Aquí hay algunas sugerencias para asegurarte de que estás utilizando correctamente el polimorfismo con herencia:

  1. Uso de Polimorfismo: Ya estás utilizando polimorfismo al pasar objetos de tipo Pelicula y Serie al método incluye de la clase CalculadoraDeTiempo. Esto es posible porque ambas clases heredan de Titulo, lo que permite tratarlas como objetos del tipo de su clase base.

  2. Override de Métodos: Asegúrate de que los métodos que deberían tener un comportamiento específico para cada subclase estén correctamente sobrescritos. Por ejemplo, en la clase Serie, has sobrescrito el método getDuracionEnMinutos(), lo cual es adecuado ya que la duración de una serie se calcula de manera diferente a la de una película.

  3. Verificación de Comportamiento: Puedes añadir más métodos o atributos específicos a Pelicula o Serie para demostrar cómo el polimorfismo te permite manejar diferentes tipos de Titulo de manera uniforme, pero con comportamientos específicos.

  4. Ejemplo de Uso de Polimorfismo: Podrías crear un método en CalculadoraDeTiempo que acepte una lista de Titulo y calcule el tiempo total, demostrando cómo puedes trabajar con una colección de objetos de diferentes subclases de manera polimórfica.

Espero que estas sugerencias te ayuden a mejorar tu comprensión y aplicación de polimorfismo y herencia en Java. ¡Sigue adelante con tu aprendizaje!

Espero haber ayudado y buenos estudios!