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: encapsulando el proyecto

Áca dejo lo que he hicimos durante la clase :D Clase Película:

package com.aluracursos.screenmatch.modelos;

public class Pelicula {
    private String nombre;
    private int fechaDeLanzamiento;
    private int duracionEnMinutos;
    private boolean incluidoEnElPlan;
    private double sumaDeLasEvaluaciones;
    private int totalDeEvaluaciones;

    

    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;
    }

    public int getTotalDeEvaluaciones(){
        return totalDeEvaluaciones;
    }

    public void muestraFechaTecnica(){
        System.out.println("El nombre de la película es: " + nombre);
        System.out.println("Su fecha de lanzamiento es: " + fechaDeLanzamiento);
        System.out.println("Dureción en minutos: " + duracionEnMinutos);
    }

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

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

Clase Principal

import com.aluracursos.screenmatch.modelos.Pelicula;

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.muestraFechaTecnica();
        miPelicula.evalua(10);
        miPelicula.evalua(10);
        miPelicula.evalua(7.8);
        System.out.println(miPelicula.getTotalDeEvaluaciones());
        System.out.println(miPelicula.calculaMedia());

//        com.aluracursos.screenmatch.modelos.Pelicula otraPelicula = new com.aluracursos.screenmatch.modelos.Pelicula();
//        otraPelicula.nombre = "Shrek";
//        otraPelicula.fechaDeLanzamiento = 2001;
//        otraPelicula.duracionEnMinutos = 89;
//
//        otraPelicula.muestraFechaTecnica();
//        otraPelicula.evalua(7.8);
//        otraPelicula.evalua(9.8);
//
//        System.out.println(otraPelicula.calculaMedia());
    }
}
1 respuesta

Hola Diego, espero que estés bien

¡Qué bueno que estás aplicando lo que viste en clase! Parece que ya has comenzado a encapsular los atributos de tu clase Pelicula al hacerlos privados y proporcionar métodos públicos para acceder y modificar esos atributos. Esto es un gran paso en la dirección correcta para proteger los datos y seguir los principios de la orientación a objetos.

A continuación, te doy algunas sugerencias para mejorar aún más el encapsulamiento en tu proyecto:

  1. Getters y Setters: Veo que ya tienes setters para algunos atributos. Sería útil también tener getters para todos los atributos que desees exponer de manera controlada. Por ejemplo, podrías agregar un método getNombre() para obtener el nombre de la película.

  2. Validación en Setters: Puedes agregar lógica de validación en los setters para asegurarte de que los datos sean correctos antes de asignarlos. Por ejemplo, podrías verificar que fechaDeLanzamiento sea un año válido o que duracionEnMinutos sea un número positivo.

  3. Eliminar Acceso Directo a Atributos: En el código comentado de otraPelicula, estás accediendo directamente a los atributos. Asegúrate de usar los métodos setters para asignar valores, lo que refuerza el encapsulamiento.

Aquí tienes un ejemplo de cómo podrías implementar un getter y agregar validación en un setter:

public String getNombre() {
    return nombre;
}

public void setFechaDeLanzamiento(int fechaDeLanzamiento) {
    if (fechaDeLanzamiento > 1800) { // Asegúrate de que sea un año razonable
        this.fechaDeLanzamiento = fechaDeLanzamiento;
    } else {
        System.out.println("Año de lanzamiento no válido.");
    }
}

Espero que estas sugerencias te ayuden a mejorar tu proyecto y a entender mejor el concepto de encapsulamiento. ¡Sigue adelante con tu aprendizaje!

Espero ter ayudado y bons estudos!