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

Para chamar um método, antigas funções, preciso criar sempre um objeto?

Olá!!

Tenho algumas dúvida sobre os "Objetos" da POO.

1 - Todas as vezes que desejar chamar um método, antiga função, preciso criar um objeto para então chamar esse método, consequentemente uma classe java com tudo que ela carrega?

2 - É possível chamar um método de uma determinada classe sem instanciar o objeto relacionado à classe passando apenas o parâmetro do método? Se a reposta for verdadeira: A criação de classes é de forma geral uma exponencial, ou seja, teremos dezenas ou centenas de classes em um projeto pequeno e milhares em projetos grandes? Está certo este entendimento? Se a resposta for negativa: Poderia colocar um exemplo, por favor, de como chamar um método sem instanciar um objeto da classe.

Forte abraço.

3 respostas

Olá Emerson, tudo bem com você?

Tudo em Java gira em torno de classes, portanto sempre que quisermos implementar um método, consequentemente, precisaremos de uma classe. Quando você se referiu ao método como a "antiga função", só faz sentido aqui pois o método nada mais é que uma função associada a uma classe. E como sabemos, no mundo Java não existe função sem classe. Eu posso estar me estendendo um pouco de mais nesse assunto, mas pensando orientado a objetos, seria como imaginar ações (métodos) como andar(), falar(), acelerar(), voar()... essas ações não podem ser realizadas sem alguém ou algo para executá-las, portanto precisamos das classes/objetos cumprir essa parte.

Mas voltando à pergunta, nós temos os métodos estáticos que nos permitem usá-los sem precisar instanciar um objeto da classe. Como vimos na aula do Paulo sobre o assunto, membros (atributos e métodos) estáticos são acessados diretamente da classe sem precisar instanciar nada, enquanto os membros de instância que já conhecemos depende de um objeto para serem acessados. Não se preocupe, teremos bastante contato com métodos estáticos de classes muito úteis mais para frente.

Eu não sei se entendi muito bem a sua segunda pergunta, mas é possível sim que projetos cheguem a essa quantidade de classes. Embora você não vá chegar ao ponto de criar dezenas de classes com métodos estáticos, o mais comum de acontecer, como eu mencionei, é você utilizar métodos estáticos já implementados em outras bibliotecas para desenvolver o seu sistema. Em outras palavras, o que eu quero dizer é que você terá a sua disposição várias funcionalidades que foram implementadas dessa forma, sem precisar instanciar nada, o que não quer dizer que devemos descartar o uso de objetos já que os próprios métodos estáticos podem ser perigosos se não usarmos com moderação.

Se algum ponto não ficou claro, estou à disposição!

Forte abraço e bons estudos!!

solução!
package br.com.util;

public class CalculaValores {

    public static void main(String[] args) {

        //criamos alguns numeros de alunos de dadas salas
        int numeroAlunosSalaA = 23;
        int numeroAlunosSalaB = 34;

        //chamamos o método que pertence a esta classe para que ele se encarregue de somar 
        //e esse metodo tem um 'retorno' do tipo inteiro, ou seja ele devolve o resultado da soma
        System.out.println("Total Alunos: " + soma(numeroAlunosSalaA,numeroAlunosSalaB));


        //criamos alungos numeros de carros para dados estacionamentos
        int numeroCarrosEstacionamentoA = 32;
        int numeroCarrosEstacionamentoB = 85;

        //aqui estariamos somando manualmente o numero de carros
        int total = numeroCarrosEstacionamentoA + numeroCarrosEstacionamentoB;


        //aqui precisamos imprimir a variavel que tem os dados do resultado
        System.out.println("Total Carros :" + total);



    }

    //metodo soma que é estático, pois esta sendo chamado de outro método estático (o metodo main)
    //sua unica função é retorna a a soma de 2 parametros (valores passados para ele trabalhar)
    private static int soma(int x, int y) {

        return x+y;
    }

}

Então existe como chamar o método de maneira simplificada, mas é importante entender quando usar a instancia do objeto e quando usar apenas o metodo!

Para mais duvidas eu sugiro ler esse artigo simplificado da DEVMEDIA sobre o assunto : https://www.devmedia.com.br/trabalhando-com-metodos-em-java/25917

E claro fazer as aulas básicas de Java da Alura.

Obrigado pelas respostas!

Em verdade, eu acabei sanando as dúvidas nas próprias aulas do Prof Nico. Fiz alguns ajustes nos exemplos da aula, somado às restas de vocês, consegui sanar as dúvidas.

Segue a resposta que encontrei.

public class Fluxo {

    public static void main(String[] args) {
        System.out.println("Ini do main");
        metodo1();
    //neste ponto o método2 é chamado de outra classe sem a necessidade de instanciar o objeto.  ;)
        Teste.metodo2();
        System.out.println("Fim do main");
    }
    private static void metodo1() {
        System.out.println("metodo1");
    }
}

public class Teste {
    public static void metodo2() {
        System.out.println("método 2.");
    }
}