1
resposta

[Dúvida] Dúvida

public class Movie {

    String name;
    int yearOfRelease;
    boolean includedInThePlan;  // se o usuário possui ou não um plano compatível com a disponibilidade do filme
    private double rating;      // média das avaliações
    private int totalRating;    // total de avaliações recebidas
    int runtime;
    void show(){
    
        System.out.println("Movie Title: " + name);
        System.out.println("Year of Release: " + yearOfRelease);
        System.out.println("Runtime: " + runtime + " minutes");
        System.out.println("Rating: " + String.format("%.2f", rating));
        System.out.println("Number of Ratings: " + totalRating);
        if(includedInThePlan) {
            System.out.println("Available with your plan");
        }
    }
    void rateIt(double yourRating){
        rating = (rating * totalRating +yourRating)/(totalRating+1);
        totalRating++;
    }
}

public class Main{
    public static void main(String[] args){
        Movie myMovie = new Movie();
        myMovie.name = "O Poderoso Chefão";
        myMovie.yearOfRelease = 1970;
        myMovie.runtime = 180;
        myMovie.includedInThePlan = false;
        myMovie.rateIt(8);
        myMovie.rateIt(10);
        myMovie.rateIt(8.5);
        myMovie.rateIt(7);
        myMovie.rateIt(10);
        myMovie.show();

    }
}

Referente ao curso de Orientação à objetos, aula sobre "características privadas", o meu programa não causou erro algum após eu adicionar o "private" na avaliação e o total de avaliações, e eu ainda consigo mudar a nota utilizando o método "rateIt", sem problema nenhum, mesmo com o private. Isso ainda sim é seguro para a empresa? Eu deveria desfazer o método rateIt e fazer um método para soma, depois um para a média? Pois o show, acredito eu, não deveria ser capaz de mostrar o valor que está privado, pode ser que eu tenha entendido errado. Eu não usei nenhum "get". Agradeço desde já

1 resposta

Oi Luciana, tudo bem?

O fato de você ter adicionado o modificador private aos atributos rating e totalRating e ainda conseguir manipulá-los através de métodos públicos como rateIt é exatamente como o encapsulamento deve funcionar.

O encapsulamento é uma prática que ajuda a proteger os dados e a lógica interna de uma classe, permitindo que você controle como esses dados são acessados e modificados. No seu exemplo, mesmo que rating e totalRating sejam privados, você ainda pode alterá-los através do método rateIt, que é público. Isso é seguro porque você está controlando a forma como esses atributos são modificados, garantindo que a lógica de cálculo da média de avaliações seja sempre respeitada.

Sobre a sua preocupação com o método show exibindo valores privados, isso é aceitável. O método show está dentro da classe Movie, então ele tem acesso a todos os atributos da classe, mesmo os privados. O encapsulamento não significa que os atributos não podem ser usados dentro da própria classe, mas sim que o acesso direto a eles é restrito de fora da classe.

Se você quiser seguir as boas práticas de programação, pode sim criar métodos "getters" para acessar esses atributos de fora da classe, como getTotalRating() para retornar o total de avaliações. Isso melhora a legibilidade do código e mantém a lógica de encapsulamento, permitindo que você altere a implementação interna sem afetar o código que usa a classe.

Espero ter ajudado e bons estudos!

Ícone de sugestão Para saber mais:

Sugestão de conteúdo para você mergulhar ainda mais sobre o tema:

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!