0
respostas

[Projeto] Encapsulamento

CLASSE MAIN (PRINCIAPAL)

//Importando a outra clase que está em um pacote diferente que esse da classe main, que está no pacote raíz.
import cineverse.modelo.movie;

public class main {
    public static void main(String[] args) {
        movie filme1 = new movie();
        //Usando a classe cineverse.modelo.movie instaciamos um objeto da classe, com uma nova variável que terá os atributos de filme
        filme1.setNome("Forrest Gump");
        filme1.setAnoLancamento(1994);
        filme1.setDuracaoEmMinutos(142);
        filme1.setDiretor("Robert Zameckis");

        // Através do metodo exibeFichaTecnica buscamos a varável e ele já irá realizar a ação.
        filme1.exibeFichaTecnica();
        filme1.avaliaNota(10);
        System.out.println("Média de avaliações: " + filme1.retornaMediaAvaliacao());
        //Retorno do total de avaliações através do metodo get (criado pois o atributo é private na outra classe)
        System.out.println("Total de avaliações: " + filme1.getTotalDeAvaliacoes());
    }
}

CLASSE MOVIE (FILMES)

/*
Nesse caso colocamos essa classe num pacote, se caso quisermos acessar os atributos e métodos dessa classe por uma classe de
fora do pacote temos que torná-los públicos
*/
package cineverse.modelo;

public class movie {
    //Criação de uma classe de filmes com atributos que todos os filmes irão ter.
    private String nome;
    private String diretor;
    private int anoLancamento;
    private boolean inclusoNoPlano;
    //Quando usamos o prvate garantimos que o atributo não seja modificado ou lido diretamente dentro de outra classe
    private double somaAvaliacao;
    private int duracaoEmMinutos;
    private int totalDeAvaliacoes;

    //criação de getters e setters para manter as classses como privadas e elas serem acessíveis de outro lugar através de um metodo.


    public void setNome(String nome) {
        this.nome = nome;
    }

    public void setDiretor(String diretor) {
        this.diretor = diretor;
    }

    public void setAnoLancamento(int anoLancamento) {
        this.anoLancamento = anoLancamento;
    }

    public void setInclusoNoPlano(boolean inclusoNoPlano) {
        this.inclusoNoPlano = inclusoNoPlano;
    }

    public void setDuracaoEmMinutos(int duracaoEmMinutos) {
        this.duracaoEmMinutos = duracaoEmMinutos;
    }
    //Como definimos como private, usamos um metodo de get para pegar o total de avaliacoes e retornar através do return
    public int getTotalDeAvaliacoes() {
        return totalDeAvaliacoes;
    }

    public String getNome() {
        return nome;
    }

    public String getDiretor() {
        return diretor;
    }

    public int getAnoLancamento() {
        return anoLancamento;
    }

    public boolean isInclusoNoPlano() {
        return inclusoNoPlano;
    }

    public int getDuracaoEmMinutos() {
        return duracaoEmMinutos;
    }

    //Após a criação dos atributos do filme em si, criamos uma ação, que é exibir a ficha técinca.
    public void exibeFichaTecnica(){
        System.out.println("Nome do filme: " + nome);
        System.out.println("Duração em minutos: " + duracaoEmMinutos);
        System.out.println("Ano de lançamento: " + anoLancamento);
        System.out.println("Direção: " + diretor);

    }
    public void avaliaNota(double nota){
        somaAvaliacao += nota;
        totalDeAvaliacoes ++;
    }
    public double retornaMediaAvaliacao() {
    return somaAvaliacao / totalDeAvaliacoes;
    }

}