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

qual devo usar

professor eu devo usar o metodos getters e setters ou atraves de constutores qual a diferencia deles você pode me ajudar fico no aguardo

2 respostas

O objetivo do encapsulamento (getters e setters) é facilitar o controle da segurança e acoplamento. Mas muitas pessoas vem desencorajando o uso indiscriminado desse tipo de encapsulamento. É meio polêmico o assunto mesmo.

solução!

Fala Guilherme, tudo bem ?

Então. A ideia é que ambos podem ser usados, inclusive juntos. Mas com parcimônia, expondo apenas o necessário e o que faz sentido para sua regra de negócio. Tente sempre imaginar como gostaria de usar seus objetos em outros pontos da aplicação.

Eles devem receber sempre alguns dados quando forem criados ? Então um construtor recebendo esses parâmetros obrigatórios pode ajudar ?

Os dados podem ser definidos e recuperados externamente em outras classes ? Então pode definir getters e setters para esses dados, com cuidado.

Exemplo:

public class Conta {

    private int numero;
    private double saldo;
    private double limiteDeCredito;

    /*
    Se toda conta que for criada
    precisa obrigatoriamente de um número
    o construtor pode obrigar isso
    */
    public Conta(int numero) {
        this.numero = numero;
    }

    /*
    Se sua conta precisa exibir o número para 
    outros pontos, um getter pode garantir isso
    */
    public int getNumero() {
        return this.numero;
    }

    /*
    Se não pode deixar o numero ser definido em 
    outro momento em outros pontos, não coloque um
     setNumero(int numero){..}, por exemplo
    */

    //Se sua conta precisa exibir o saldo, getter pro saldo
    public double getSaldo() {
        return this.saldo;
    }

    /*
    Se não pode deixar o saldo ser definido 
    arbitrariamente não coloque um 
    setSaldo(double saldo)
    Você provavelmente tem outros métodos pra
    movimentar as contas (saca, deposita, transfere, etc)
    */

    public void deposita(double valor) {
        //regras do deposito
    }

    /*
    Se sua conta precisa exibir o limite para 
    outros pontos, e ainda, permitir que ele seja 
    alterado, um getter e um setter pra ele    */
    public int getLimiteDeCredito() {
        return this.limiteDeCredito;
    }

    public void setLimiteDeCredito(double limiteDeCredito) {
        this.limiteDeCredito = limiteDeCredito;
    }
}

Sempre tudo pensando no suficiente pra garantir um uso seguro da sua Conta em outras classes, protegendo (encapsulando) seus detalhes, como os dados que você mantém no objeto e suas implementações.

Espero ter ajudado no pensamento. Abraço!