Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Duvidas sobre os metodos, Projeto com orientação a objetos

Na classe Filme realizei os seguintes comandos:

public class Filme {
    String nome;
    int anoDeLancamento;
    int duracaoDeMinutos;
    boolean incluidoNoPlano;
    double somasDasAvaliacoes;
    double totalDeAvaliacoes;

    void exibeFichaTecnica() { // Nesse caso implememtei o if para que possa inves de parecer true ou false aparecesse sim ou não no pacote incluso
        System.out.println("Nome do Filme: " + anoDeLancamento);
        System.out.println("Duração: " + duracaoDeMinutos + "min.");
        if (incluidoNoPlano == true) {
            System.out.println("Incluso no plano: Sim");
        } else {
            System.out.println("Incluso no plano: Não");
        }
    }

    void avalia(double nota) {
        somasDasAvaliacoes += nota;
        totalDeAvaliacoes++;
    }

    double pegaMedia() {
        return somasDasAvaliacoes / totalDeAvaliacoes;
    }
}

Mas me veio a duvida sobre os metodos... No metodo exibeFichaTecnica() só precisou colocar void, mas ja o avalia(double nota), precisou colocar dentro dos parenteses o double nota e pegaMedia() não colocosse o void mas sim o double. Me veio muitas duvidas sobre esses metodos e queria entende melhor, como saber aplicar de forma correta e quando.

2 respostas

Oi Daniel, vamo lá...

Antes do nome do método nós indicamos qual será o seu retorno, você está indicando qual é o tipo (Objeto) que será retornado pelo método. Veja esse exemplo aqui:

public class Aluno {


    private String nome;
    private Integer idade;

    public Aluno(String nome, Integer idade){
        this.nome = nome;
        this.idade = idade;
    }

    public String getNome(){
        return this.nome;
    }

    public Integer getIdade(){
        return this.idade;
    }

Repare que o getNome declara um retorno do tipo String, pois o atributo 'nome' é um objeto String. O getIdade declara o retorno de um Integer, pois o atributo 'idade' é um objeto Integer.

Veja esse exemplo errado:

public String getIdade(){
    return this.idade;
}

Esse código nem compila, pois o compilador está esperando um objeto do tipo String, mas você está retornando um objeto do tipo Integer.

Quando queremos que um método execute uma ação mas não retorne nada usamos o void. Se você declarar void e retornar alguma coisa, também não irá compilar, pois o compilar não espera um retorno para o método.

exibeFichaTecnica: ele usa void porque o não retorna nada.

avaliaNota: ele retorna um double porque usa dois objetos double para fazer um operação matemática, o resultado é um novo objeto do tipo double com o valor do resultado do cálculo

Sobre o método avalia:

void avalia(double nota) {
    somasDasAvaliacoes += nota;
    totalDeAvaliacoes++;
}

Nele, você está declarando que não quer que ele retorne algo e que para ser chamado, é preciso passar um objeto do tipo double. Nos parênteses, com 'double' você está declarando o tipo de objeto que você quer receber nessa método, no caso é um double, em seguida você declara uma variável para este objeto (você pode pôr qualquer nome). Essa variável 'nota' é um objeto do tipo double, ela tem métodos de double e se comporta como double, se você tivesse declarado o método como public void(String nota), a variável nota se comportaria como uma String e teria métodos de String, pois é isso que ela é.

Agora um exemplo prático chamando o método os métodos:

//instancia o objeto Aluno
Aluno aluno = new Aluno("Aluno-san", 22);

//cria uma variável do tipo String que guarda o retorno do método getNome nela
String valorDoNome = aluno.getNome();

//cria uma variável do tipo Integer que guarda o retorno do método getIdade nela
Integer valorDaIdade = aluno.getIdade();


//-------------------------------------------------------------------------------------------------------------

//cria um double
double objetoDoTipoDouble = 1.33;

//passa o double como parâmetro para o método avalia, sem esperar nenhum retorno
filme.avalia(objetoDoTipoDouble);
solução!

Nossa muito obrigado pela explicação, Mateus da Silva Pontes, talvez seja isso que eu estava precisando. Agora é praticar e deixar fixo a informação!