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

[Dúvida] Não é um erro, apenas um dúvida sobre métodos da aula 06 "Evitando Código Duplicado".

Bom dia, pessoal! A minha dúvida é na linha "calculadora.inclui(meuFilme); ". Não entendi. É um método (calculadora) chamando ou método (meuFilme)? Poderiam me explicar com detalhes, por favor?

Obrigada desde já!

import br.com.alura.screenmatch.calculos.CalculadoraDeTempo;
import br.com.alura.sreenmatch.modelos.Filme;
import br.com.alura.sreenmatch.modelos.Serie;


public class Principal {
    public static void main(String[] args) {
        Filme meuFilme = new Filme();
        meuFilme.setNome("O poderoso chefão");
        meuFilme.setAnoDeLancamento(1970);
        meuFilme.setDuracaoEmMinutos(180);
        meuFilme.getDuracaoEmMinutos();
        System.out.println("Duração do filme em minutos: " + meuFilme.getDuracaoEmMinutos());
        meuFilme.exibeFichaTecnica();
        meuFilme.avalia(8);
        meuFilme.avalia(9);
        System.out.println("Média de avaliações: " + meuFilme.pegaMedia());
        System.out.println("Total de avaliações: " + meuFilme.getTotalDeAvaliacoes());
        Serie lost = new Serie();
        lost.setNome("Lost");
        lost.setAnoDeLancamento(2015);
        lost.exibeFichaTecnica();
        lost.setTemporadas(10);
        lost.setMinutosPorEpisodio(50);
        lost.setEpisodiosPorTemporada(10);
        System.out.println("Duração para maratonar Lost: " + lost.getDuracaoEmMinutos());
        CalculadoraDeTempo calculadora = new CalculadoraDeTempo();
        calculadora.inclui(meuFilme);
        System.out.println(calculadora.getTempoTotal());
    }
}
5 respostas
solução!

Olá, Rayane!

Na linha "calculadora.inclui(meuFilme);", o método "inclui" está sendo chamado a partir do objeto "calculadora", que é uma instância da classe "CalculadoraDeTempo". Esse método recebe como parâmetro um objeto do tipo "Filme" (no caso, "meuFilme"), que será adicionado a uma lista de filmes que a calculadora está guardando.

Esse método "inclui" é responsável por calcular o tempo total de todos os filmes adicionados à lista da calculadora. Ou seja, a calculadora está sendo utilizada para fazer um cálculo com base em um objeto do tipo "Filme".

Espero ter ajudado a esclarecer sua dúvida! Se tiver mais alguma dúvida, é só perguntar.

Bons estudos!

Muito obrigada, Rodrigo! Poderia só me esclarecer mais duas dúvidas, por favor?

  1. Então sempre que eu for chamar um método, preciso colocar o objeto e não a classe antes, certo?
  2. E esse "meuFilme" é uma variável, né? Pois no começo aparece assim: "Filme meuFilme = new Filme();" Ou ele inicia como variável, mas depois se torna um parâmetro?
public class Principal {
    public static void main(String[] args) {
        Filme meuFilme = new Filme();
        meuFilme.setNome("O poderoso chefão");
        meuFilme.setAnoDeLancamento(1970);
        meuFilme.setDuracaoEmMinutos(180);
        meuFilme.getDuracaoEmMinutos();
        System.out.println("Duração do filme em minutos: " + meuFilme.getDuracaoEmMinutos());

Aqui outro exemplo diferente para assimilar:

public class Produto {

    private String nome;
    private double preco;

    //metodos getter e setter
}
public class CalculadoraDeImposto {

    public double calcular(Produto produtoVendido) {
        double precoDoProdutoVendido = produtoVendido.getPreco();
        
        return precoDoProdutoVendido * 0.15;
    }
}
public classe Principal {

    public static void main(String[] args) {
        Produto celular = new Produto();
        celular.setNome("Xiaomi Redmi 9");
        celular.setPreco(800);
        
        CalculadoraDeImposto calculadora = new CalculadoraDeImposto();
        double valorDoImposto = calculadora.calcular(celular);
        
        System.out.println("Imposto a ser pago: R$" +valorDoImposto);
    }
}

A classe CalculadoraDeImposto tem um método chamado calcular, que recebe como parâmetro um objeto do tipo Produto.

Não tem como chamar o método calcular de maneira solta e direta:

double imposto = calcular(celular);

Pois esse método foi definido dentro da classe CalculadoraDeImposto, sendo necessário ter um objeto desse tipo para poder chamar o método:

//instanciando um objeto do tipo CalculadoraDeImposto e o armazenando numa variavel chamada calc
CalculadoraDeImposto calc = new CalculadoraDeImposto();

double valorDoImposto = calc.calcular(celular);

E para chamar esse método devemos passar nos parentesis um objeto do tipo Produto, pois o método calcular precisa de um parâmetro do tipo Produto:

Produto celular = new Produto();
celular.setNome("Xiaomi Redmi 9");
celular.setPreco(800);

Produto teclado = new Produto();
teclado.setNome("Teclado mecanico");
teclado.setPreco(200);

CalculadoraDeImposto calculadora = new CalculadoraDeImposto();

double impostoDoCelular = calculadora.calcular(celular);
double impostoDoTeclado = calculadora.calcular(teclado);

System.out.println("Imposto a ser pago pelo celular: R$" +impostoDoCelular);
System.out.println("Imposto a ser pago pelo teclado: R$" +impostoDoTeclado);

//códigos abaixo nao compilam, pois estão chamando o método passando parâmetros que não são do tipo Produto:
calculadora.calcular("teste");
calculadora.calcular(900.99);

Com o tempo e a prática vai ficar mais fácil de você entender a diferencça entre classe, objeto, variável e parâmetro ;)

Bons estudos!

Muito obrigada pelos esclarecimentos e atenção, Rodrigo!