1
resposta

[Projeto] Minha resolução

package br.com.alura.meuprojeto;

public class Filme {
    private String nome;
    private int anoDeLancamento;
    private int duracaoEmMinutos;
    private boolean incluidoNoPlano;
    private double somaDasAvaliacoes;
    private int totalAvaliacoes;
    private String sinopseDoFilme;

    public void ExibeFichaTecnica(){
        System.out.println(nome);
        System.out.println(anoDeLancamento);
        System.out.println(duracaoEmMinutos);
        System.out.println(sinopseDoFilme);
    }

    public void avalia(double nota){
        somaDasAvaliacoes += nota;
        totalAvaliacoes ++;
    }
    public double pegaMedia() {

        if (totalAvaliacoes == 0) {
            return 0;
        }else{
            return somaDasAvaliacoes / totalAvaliacoes;
        }
    }
    public void setNome(String nome){
        this.nome = nome;
    }

    public void setAnoDeLancamento(int anoDeLancamento){
        this.anoDeLancamento = anoDeLancamento;
    }

    public void setDuracaoEmMinutos(int duracaoEmMinutos){
        this.duracaoEmMinutos = duracaoEmMinutos;
    }

    public void setSinopseDoFilme(String sinopseDoFilme){
        this.sinopseDoFilme = sinopseDoFilme;
    }

    public void setIncluidoNoPlano(boolean incluidoNoPlano){
        this.incluidoNoPlano = incluidoNoPlano;
    }

    public String getNome(){
        return nome;
    }

    public int getTotalAvaliacoes(){
        return totalAvaliacoes;
    }

}
import br.com.alura.meuprojeto.Filme;

public class PedroFlix {
    public static void main(String[] args){
        Filme filme1 = new Filme();
        filme1.setNome("Homem Aranha");
        filme1.setAnoDeLancamento(2005);
        filme1.setIncluidoNoPlano(true);
        filme1.setDuracaoEmMinutos(140);
        filme1.setSinopseDoFilme(""" 
                Após ser picado por uma aranha geneticamente modificada, Peter Parker.
                ganha habilidades extraordinárias como força sobre-humana, agilidade e a capacidade de escalar paredes. 
                Enquanto tenta equilibrar sua vida pessoal e seus novos poderes, ele enfrenta perigosos vilões e aprende
                 que “com grandes poderes vêm grandes responsabilidades” """);

        filme1.avalia(10);
        filme1.avalia(9);
        filme1.avalia(9.5);
        double media = filme1.pegaMedia();
        filme1.ExibeFichaTecnica();
        System.out.println("Total de Avaliações:"+ filme1.getTotalAvaliacoes());
        System.out.println("A média do filme " + filme1.getNome() + " é " + media);
    }
}

Fiquei com dúvida um pouco onde usar o get então usei apenas no nescessário, pois o método exibir ficha técnica já exibia maioria das informações

1 resposta

Olá, Pedro. Como vai?

Parabéns pelo excelente trabalho no desafio! Seu código está muito bem estruturado, limpo e respeitando perfeitamente o princípio do encapsulamento ao utilizar os atributos como private e criar os métodos de acesso de forma consciente. O nome da sua classe principal, PedroFlix, ficou sensacional e deu uma identidade bem legal para o projeto.

Sua dúvida sobre onde e quando usar os métodos getters é super comum e a sua intuição foi cirúrgica: você usou exatamente onde era necessário. Vamos entender o conceito de forma mais profunda para te dar total segurança daqui para frente.

O papel do Get e do Set no Encapsulamento

Quando colocamos os atributos como private, estamos trancando essas variáveis dentro da classe para que ninguém de fora possa mexer nelas diretamente.

  • Os métodos setters (set) funcionam como as portas de entrada. Eles servem para enviar dados para dentro da classe e preencher os atributos.
  • Os métodos getters (get) funcionam como as janelas de visualização. Eles servem exclusivamente para o mundo externo conseguir ler um valor específico isoladamente.

Por que a sua abordagem está correta?

Você pensou de forma muito madura ao notar que o método ExibeFichaTecnica() já fazia o papel de imprimir a maior parte das informações na tela.

Em desenvolvimento de software, nós não somos obrigados a criar getters e setters para todas as variáveis automaticamente. A boa prática é criar apenas o que a aplicação realmente precisa.

Imagine o seguinte cenário: você precisa criar uma tela no seu sistema que liste apenas os nomes de 50 filmes em uma tabela. Se você não tivesse o getNome(), você seria obrigado a chamar o ExibeFichaTecnica() para os 50 filmes, o que traria um monte de informações indesejadas (ano, duração, sinopse) e poluídos a tela. É exatamente aí que o getNome() brilha: ele permite pegar apenas a informação que você quer, de forma isolada.

Uma dica sobre Convenções de Nomenclatura em Java

Analisando o seu código, notei que o método de exibição foi escrito assim: ExibeFichaTecnica().

Em Java, existe uma convenção muito forte chamada camelCase para nomes de métodos e variáveis. A regra diz que a primeira letra deve ser sempre minúscula e, se a palavra for composta, as demais iniciais ficam em maiúscula.

Para que seu código fique no padrão de mercado usado por grandes empresas, a recomendação é ajustar para:

public void exibeFichaTecnica() {
    // seu código aqui
}

Apenas as Classes (como Filme e PedroFlix) devem começar com a primeira letra maiúscula (padrão PascalCase).

Você mandou super bem no exercício, entendeu o conceito de validação no método pegaMedia() para evitar divisões por zero e aplicou o encapsulamento de forma muito consciente. Continue assim!

Espero que possa ter lhe ajudado!